1{
2  "type": "Program",
3  "statements": [
4    {
5      "type": "FunctionDeclaration",
6      "function": {
7        "type": "ScriptFunction",
8        "id": {
9          "type": "Identifier",
10          "name": "func1",
11          "decorators": [],
12          "loc": {
13            "start": {
14              "line": 17,
15              "column": 10
16            },
17            "end": {
18              "line": 17,
19              "column": 15
20            }
21          }
22        },
23        "generator": false,
24        "async": false,
25        "expression": false,
26        "params": [
27          {
28            "type": "Identifier",
29            "name": "arg",
30            "typeAnnotation": {
31              "type": "TSTypeReference",
32              "typeName": {
33                "type": "Identifier",
34                "name": "Type",
35                "decorators": [],
36                "loc": {
37                  "start": {
38                    "line": 17,
39                    "column": 59
40                  },
41                  "end": {
42                    "line": 17,
43                    "column": 63
44                  }
45                }
46              },
47              "loc": {
48                "start": {
49                  "line": 17,
50                  "column": 59
51                },
52                "end": {
53                  "line": 17,
54                  "column": 63
55                }
56              }
57            },
58            "decorators": [],
59            "loc": {
60              "start": {
61                "line": 17,
62                "column": 54
63              },
64              "end": {
65                "line": 17,
66                "column": 57
67              }
68            }
69          }
70        ],
71        "returnType": {
72          "type": "TSTypeReference",
73          "typeName": {
74            "type": "Identifier",
75            "name": "Type",
76            "decorators": [],
77            "loc": {
78              "start": {
79                "line": 17,
80                "column": 66
81              },
82              "end": {
83                "line": 17,
84                "column": 70
85              }
86            }
87          },
88          "loc": {
89            "start": {
90              "line": 17,
91              "column": 66
92            },
93            "end": {
94              "line": 17,
95              "column": 70
96            }
97          }
98        },
99        "typeParameters": {
100          "type": "TSTypeParameterDeclaration",
101          "params": [
102            {
103              "type": "TSTypeParameter",
104              "name": {
105                "type": "Identifier",
106                "name": "Type",
107                "decorators": [],
108                "loc": {
109                  "start": {
110                    "line": 17,
111                    "column": 16
112                  },
113                  "end": {
114                    "line": 17,
115                    "column": 20
116                  }
117                }
118              },
119              "loc": {
120                "start": {
121                  "line": 17,
122                  "column": 16
123                },
124                "end": {
125                  "line": 17,
126                  "column": 21
127                }
128              }
129            },
130            {
131              "type": "TSTypeParameter",
132              "name": {
133                "type": "Identifier",
134                "name": "A",
135                "decorators": [],
136                "loc": {
137                  "start": {
138                    "line": 17,
139                    "column": 22
140                  },
141                  "end": {
142                    "line": 17,
143                    "column": 23
144                  }
145                }
146              },
147              "loc": {
148                "start": {
149                  "line": 17,
150                  "column": 22
151                },
152                "end": {
153                  "line": 17,
154                  "column": 24
155                }
156              }
157            },
158            {
159              "type": "TSTypeParameter",
160              "name": {
161                "type": "Identifier",
162                "name": "B",
163                "decorators": [],
164                "loc": {
165                  "start": {
166                    "line": 17,
167                    "column": 25
168                  },
169                  "end": {
170                    "line": 17,
171                    "column": 26
172                  }
173                }
174              },
175              "constraint": {
176                "type": "TSTypeOperator",
177                "operator": "readonly",
178                "typeAnnotation": {
179                  "type": "TSArrayType",
180                  "elementType": {
181                    "type": "TSNumberKeyword",
182                    "loc": {
183                      "start": {
184                        "line": 17,
185                        "column": 44
186                      },
187                      "end": {
188                        "line": 17,
189                        "column": 50
190                      }
191                    }
192                  },
193                  "loc": {
194                    "start": {
195                      "line": 17,
196                      "column": 44
197                    },
198                    "end": {
199                      "line": 17,
200                      "column": 52
201                    }
202                  }
203                },
204                "loc": {
205                  "start": {
206                    "line": 17,
207                    "column": 35
208                  },
209                  "end": {
210                    "line": 17,
211                    "column": 52
212                  }
213                }
214              },
215              "loc": {
216                "start": {
217                  "line": 17,
218                  "column": 25
219                },
220                "end": {
221                  "line": 17,
222                  "column": 53
223                }
224              }
225            }
226          ],
227          "loc": {
228            "start": {
229              "line": 17,
230              "column": 15
231            },
232            "end": {
233              "line": 17,
234              "column": 53
235            }
236          }
237        },
238        "body": {
239          "type": "BlockStatement",
240          "statements": [
241            {
242              "type": "ReturnStatement",
243              "argument": {
244                "type": "Identifier",
245                "name": "arg",
246                "decorators": [],
247                "loc": {
248                  "start": {
249                    "line": 18,
250                    "column": 12
251                  },
252                  "end": {
253                    "line": 18,
254                    "column": 15
255                  }
256                }
257              },
258              "loc": {
259                "start": {
260                  "line": 18,
261                  "column": 5
262                },
263                "end": {
264                  "line": 18,
265                  "column": 16
266                }
267              }
268            }
269          ],
270          "loc": {
271            "start": {
272              "line": 17,
273              "column": 71
274            },
275            "end": {
276              "line": 19,
277              "column": 2
278            }
279          }
280        },
281        "loc": {
282          "start": {
283            "line": 17,
284            "column": 1
285          },
286          "end": {
287            "line": 19,
288            "column": 2
289          }
290        }
291      },
292      "loc": {
293        "start": {
294          "line": 17,
295          "column": 1
296        },
297        "end": {
298          "line": 19,
299          "column": 2
300        }
301      }
302    },
303    {
304      "type": "FunctionDeclaration",
305      "function": {
306        "type": "ScriptFunction",
307        "id": {
308          "type": "Identifier",
309          "name": "func2",
310          "decorators": [],
311          "loc": {
312            "start": {
313              "line": 21,
314              "column": 10
315            },
316            "end": {
317              "line": 21,
318              "column": 15
319            }
320          }
321        },
322        "generator": false,
323        "async": false,
324        "expression": false,
325        "params": [],
326        "typeParameters": {
327          "type": "TSTypeParameterDeclaration",
328          "params": [
329            {
330              "type": "TSTypeParameter",
331              "name": {
332                "type": "Identifier",
333                "name": "A",
334                "decorators": [],
335                "loc": {
336                  "start": {
337                    "line": 21,
338                    "column": 16
339                  },
340                  "end": {
341                    "line": 21,
342                    "column": 17
343                  }
344                }
345              },
346              "constraint": {
347                "type": "TSTypeLiteral",
348                "members": [
349                  {
350                    "type": "TSPropertySignature",
351                    "computed": false,
352                    "optional": false,
353                    "readonly": false,
354                    "key": {
355                      "type": "Identifier",
356                      "name": "a",
357                      "decorators": [],
358                      "loc": {
359                        "start": {
360                          "line": 21,
361                          "column": 28
362                        },
363                        "end": {
364                          "line": 21,
365                          "column": 29
366                        }
367                      }
368                    },
369                    "typeAnnotation": {
370                      "type": "TSNumberKeyword",
371                      "loc": {
372                        "start": {
373                          "line": 21,
374                          "column": 31
375                        },
376                        "end": {
377                          "line": 21,
378                          "column": 37
379                        }
380                      }
381                    },
382                    "loc": {
383                      "start": {
384                        "line": 21,
385                        "column": 28
386                      },
387                      "end": {
388                        "line": 21,
389                        "column": 38
390                      }
391                    }
392                  },
393                  {
394                    "type": "TSPropertySignature",
395                    "computed": false,
396                    "optional": false,
397                    "readonly": false,
398                    "key": {
399                      "type": "Identifier",
400                      "name": "b",
401                      "decorators": [],
402                      "loc": {
403                        "start": {
404                          "line": 21,
405                          "column": 39
406                        },
407                        "end": {
408                          "line": 21,
409                          "column": 40
410                        }
411                      }
412                    },
413                    "typeAnnotation": {
414                      "type": "TSStringKeyword",
415                      "loc": {
416                        "start": {
417                          "line": 21,
418                          "column": 42
419                        },
420                        "end": {
421                          "line": 21,
422                          "column": 48
423                        }
424                      }
425                    },
426                    "loc": {
427                      "start": {
428                        "line": 21,
429                        "column": 39
430                      },
431                      "end": {
432                        "line": 21,
433                        "column": 50
434                      }
435                    }
436                  }
437                ],
438                "loc": {
439                  "start": {
440                    "line": 21,
441                    "column": 26
442                  },
443                  "end": {
444                    "line": 21,
445                    "column": 50
446                  }
447                }
448              },
449              "loc": {
450                "start": {
451                  "line": 21,
452                  "column": 16
453                },
454                "end": {
455                  "line": 21,
456                  "column": 51
457                }
458              }
459            }
460          ],
461          "loc": {
462            "start": {
463              "line": 21,
464              "column": 15
465            },
466            "end": {
467              "line": 21,
468              "column": 51
469            }
470          }
471        },
472        "body": {
473          "type": "BlockStatement",
474          "statements": [],
475          "loc": {
476            "start": {
477              "line": 21,
478              "column": 54
479            },
480            "end": {
481              "line": 21,
482              "column": 57
483            }
484          }
485        },
486        "loc": {
487          "start": {
488            "line": 21,
489            "column": 1
490          },
491          "end": {
492            "line": 21,
493            "column": 57
494          }
495        }
496      },
497      "loc": {
498        "start": {
499          "line": 21,
500          "column": 1
501        },
502        "end": {
503          "line": 21,
504          "column": 57
505        }
506      }
507    },
508    {
509      "type": "FunctionDeclaration",
510      "function": {
511        "type": "ScriptFunction",
512        "id": {
513          "type": "Identifier",
514          "name": "func3",
515          "decorators": [],
516          "loc": {
517            "start": {
518              "line": 23,
519              "column": 10
520            },
521            "end": {
522              "line": 23,
523              "column": 15
524            }
525          }
526        },
527        "generator": false,
528        "async": false,
529        "expression": false,
530        "params": [
531          {
532            "type": "Identifier",
533            "name": "a",
534            "typeAnnotation": {
535              "type": "TSTypeReference",
536              "typeName": {
537                "type": "Identifier",
538                "name": "A",
539                "decorators": [],
540                "loc": {
541                  "start": {
542                    "line": 23,
543                    "column": 90
544                  },
545                  "end": {
546                    "line": 23,
547                    "column": 91
548                  }
549                }
550              },
551              "loc": {
552                "start": {
553                  "line": 23,
554                  "column": 90
555                },
556                "end": {
557                  "line": 23,
558                  "column": 91
559                }
560              }
561            },
562            "decorators": [],
563            "loc": {
564              "start": {
565                "line": 23,
566                "column": 87
567              },
568              "end": {
569                "line": 23,
570                "column": 88
571              }
572            }
573          },
574          {
575            "type": "Identifier",
576            "name": "b",
577            "typeAnnotation": {
578              "type": "TSStringKeyword",
579              "loc": {
580                "start": {
581                  "line": 23,
582                  "column": 96
583                },
584                "end": {
585                  "line": 23,
586                  "column": 102
587                }
588              }
589            },
590            "decorators": [],
591            "loc": {
592              "start": {
593                "line": 23,
594                "column": 93
595              },
596              "end": {
597                "line": 23,
598                "column": 94
599              }
600            }
601          }
602        ],
603        "returnType": {
604          "type": "TSUnionType",
605          "types": [
606            {
607              "type": "TSNumberKeyword",
608              "loc": {
609                "start": {
610                  "line": 23,
611                  "column": 105
612                },
613                "end": {
614                  "line": 23,
615                  "column": 111
616                }
617              }
618            },
619            {
620              "type": "TSBooleanKeyword",
621              "loc": {
622                "start": {
623                  "line": 23,
624                  "column": 114
625                },
626                "end": {
627                  "line": 23,
628                  "column": 121
629                }
630              }
631            }
632          ],
633          "loc": {
634            "start": {
635              "line": 23,
636              "column": 105
637            },
638            "end": {
639              "line": 23,
640              "column": 121
641            }
642          }
643        },
644        "typeParameters": {
645          "type": "TSTypeParameterDeclaration",
646          "params": [
647            {
648              "type": "TSTypeParameter",
649              "name": {
650                "type": "Identifier",
651                "name": "A",
652                "decorators": [],
653                "loc": {
654                  "start": {
655                    "line": 23,
656                    "column": 16
657                  },
658                  "end": {
659                    "line": 23,
660                    "column": 17
661                  }
662                }
663              },
664              "constraint": {
665                "type": "TSTypeOperator",
666                "operator": "keyof",
667                "typeAnnotation": {
668                  "type": "TSTypeLiteral",
669                  "members": [
670                    {
671                      "type": "TSPropertySignature",
672                      "computed": false,
673                      "optional": false,
674                      "readonly": false,
675                      "key": {
676                        "type": "Identifier",
677                        "name": "a",
678                        "decorators": [],
679                        "loc": {
680                          "start": {
681                            "line": 23,
682                            "column": 34
683                          },
684                          "end": {
685                            "line": 23,
686                            "column": 35
687                          }
688                        }
689                      },
690                      "typeAnnotation": {
691                        "type": "TSTypeLiteral",
692                        "members": [
693                          {
694                            "type": "TSPropertySignature",
695                            "computed": false,
696                            "optional": false,
697                            "readonly": false,
698                            "key": {
699                              "type": "Identifier",
700                              "name": "b",
701                              "decorators": [],
702                              "loc": {
703                                "start": {
704                                  "line": 23,
705                                  "column": 39
706                                },
707                                "end": {
708                                  "line": 23,
709                                  "column": 40
710                                }
711                              }
712                            },
713                            "typeAnnotation": {
714                              "type": "TSNumberKeyword",
715                              "loc": {
716                                "start": {
717                                  "line": 23,
718                                  "column": 42
719                                },
720                                "end": {
721                                  "line": 23,
722                                  "column": 48
723                                }
724                              }
725                            },
726                            "loc": {
727                              "start": {
728                                "line": 23,
729                                "column": 39
730                              },
731                              "end": {
732                                "line": 23,
733                                "column": 49
734                              }
735                            }
736                          },
737                          {
738                            "type": "TSPropertySignature",
739                            "computed": false,
740                            "optional": false,
741                            "readonly": false,
742                            "key": {
743                              "type": "Identifier",
744                              "name": "c",
745                              "decorators": [],
746                              "loc": {
747                                "start": {
748                                  "line": 23,
749                                  "column": 50
750                                },
751                                "end": {
752                                  "line": 23,
753                                  "column": 51
754                                }
755                              }
756                            },
757                            "typeAnnotation": {
758                              "type": "TSBooleanKeyword",
759                              "loc": {
760                                "start": {
761                                  "line": 23,
762                                  "column": 53
763                                },
764                                "end": {
765                                  "line": 23,
766                                  "column": 60
767                                }
768                              }
769                            },
770                            "loc": {
771                              "start": {
772                                "line": 23,
773                                "column": 50
774                              },
775                              "end": {
776                                "line": 23,
777                                "column": 62
778                              }
779                            }
780                          }
781                        ],
782                        "loc": {
783                          "start": {
784                            "line": 23,
785                            "column": 37
786                          },
787                          "end": {
788                            "line": 23,
789                            "column": 62
790                          }
791                        }
792                      },
793                      "loc": {
794                        "start": {
795                          "line": 23,
796                          "column": 34
797                        },
798                        "end": {
799                          "line": 23,
800                          "column": 63
801                        }
802                      }
803                    },
804                    {
805                      "type": "TSPropertySignature",
806                      "computed": false,
807                      "optional": false,
808                      "readonly": false,
809                      "key": {
810                        "type": "Identifier",
811                        "name": "b",
812                        "decorators": [],
813                        "loc": {
814                          "start": {
815                            "line": 23,
816                            "column": 64
817                          },
818                          "end": {
819                            "line": 23,
820                            "column": 65
821                          }
822                        }
823                      },
824                      "typeAnnotation": {
825                        "type": "TSTupleType",
826                        "elementTypes": [
827                          {
828                            "type": "TSNumberKeyword",
829                            "loc": {
830                              "start": {
831                                "line": 23,
832                                "column": 68
833                              },
834                              "end": {
835                                "line": 23,
836                                "column": 75
837                              }
838                            }
839                          },
840                          {
841                            "type": "TSStringKeyword",
842                            "loc": {
843                              "start": {
844                                "line": 23,
845                                "column": 76
846                              },
847                              "end": {
848                                "line": 23,
849                                "column": 83
850                              }
851                            }
852                          }
853                        ],
854                        "loc": {
855                          "start": {
856                            "line": 23,
857                            "column": 67
858                          },
859                          "end": {
860                            "line": 23,
861                            "column": 83
862                          }
863                        }
864                      },
865                      "loc": {
866                        "start": {
867                          "line": 23,
868                          "column": 64
869                        },
870                        "end": {
871                          "line": 23,
872                          "column": 85
873                        }
874                      }
875                    }
876                  ],
877                  "loc": {
878                    "start": {
879                      "line": 23,
880                      "column": 32
881                    },
882                    "end": {
883                      "line": 23,
884                      "column": 85
885                    }
886                  }
887                },
888                "loc": {
889                  "start": {
890                    "line": 23,
891                    "column": 26
892                  },
893                  "end": {
894                    "line": 23,
895                    "column": 85
896                  }
897                }
898              },
899              "loc": {
900                "start": {
901                  "line": 23,
902                  "column": 16
903                },
904                "end": {
905                  "line": 23,
906                  "column": 86
907                }
908              }
909            }
910          ],
911          "loc": {
912            "start": {
913              "line": 23,
914              "column": 15
915            },
916            "end": {
917              "line": 23,
918              "column": 86
919            }
920          }
921        },
922        "body": {
923          "type": "BlockStatement",
924          "statements": [
925            {
926              "type": "ReturnStatement",
927              "argument": {
928                "type": "BooleanLiteral",
929                "value": true,
930                "loc": {
931                  "start": {
932                    "line": 24,
933                    "column": 12
934                  },
935                  "end": {
936                    "line": 24,
937                    "column": 16
938                  }
939                }
940              },
941              "loc": {
942                "start": {
943                  "line": 24,
944                  "column": 5
945                },
946                "end": {
947                  "line": 24,
948                  "column": 17
949                }
950              }
951            }
952          ],
953          "loc": {
954            "start": {
955              "line": 23,
956              "column": 122
957            },
958            "end": {
959              "line": 25,
960              "column": 2
961            }
962          }
963        },
964        "loc": {
965          "start": {
966            "line": 23,
967            "column": 1
968          },
969          "end": {
970            "line": 25,
971            "column": 2
972          }
973        }
974      },
975      "loc": {
976        "start": {
977          "line": 23,
978          "column": 1
979        },
980        "end": {
981          "line": 25,
982          "column": 2
983        }
984      }
985    },
986    {
987      "type": "TSTypeAliasDeclaration",
988      "id": {
989        "type": "Identifier",
990        "name": "PromiseConstructorLike",
991        "decorators": [],
992        "loc": {
993          "start": {
994            "line": 27,
995            "column": 14
996          },
997          "end": {
998            "line": 27,
999            "column": 36
1000          }
1001        }
1002      },
1003      "typeAnnotation": {
1004        "type": "TSConstructorType",
1005        "params": [
1006          {
1007            "type": "Identifier",
1008            "name": "executor",
1009            "typeAnnotation": {
1010              "type": "TSFunctionType",
1011              "params": [
1012                {
1013                  "type": "Identifier",
1014                  "name": "resolve",
1015                  "typeAnnotation": {
1016                    "type": "TSFunctionType",
1017                    "params": [
1018                      {
1019                        "type": "Identifier",
1020                        "name": "value",
1021                        "typeAnnotation": {
1022                          "type": "TSUnionType",
1023                          "types": [
1024                            {
1025                              "type": "TSTypeReference",
1026                              "typeName": {
1027                                "type": "Identifier",
1028                                "name": "T",
1029                                "decorators": [],
1030                                "loc": {
1031                                  "start": {
1032                                    "line": 27,
1033                                    "column": 75
1034                                  },
1035                                  "end": {
1036                                    "line": 27,
1037                                    "column": 76
1038                                  }
1039                                }
1040                              },
1041                              "loc": {
1042                                "start": {
1043                                  "line": 27,
1044                                  "column": 75
1045                                },
1046                                "end": {
1047                                  "line": 27,
1048                                  "column": 76
1049                                }
1050                              }
1051                            },
1052                            {
1053                              "type": "TSTypeReference",
1054                              "typeName": {
1055                                "type": "Identifier",
1056                                "name": "PromiseLike",
1057                                "decorators": [],
1058                                "loc": {
1059                                  "start": {
1060                                    "line": 27,
1061                                    "column": 79
1062                                  },
1063                                  "end": {
1064                                    "line": 27,
1065                                    "column": 90
1066                                  }
1067                                }
1068                              },
1069                              "typeParameters": {
1070                                "type": "TSTypeParameterInstantiation",
1071                                "params": [
1072                                  {
1073                                    "type": "TSTypeReference",
1074                                    "typeName": {
1075                                      "type": "Identifier",
1076                                      "name": "T",
1077                                      "decorators": [],
1078                                      "loc": {
1079                                        "start": {
1080                                          "line": 27,
1081                                          "column": 91
1082                                        },
1083                                        "end": {
1084                                          "line": 27,
1085                                          "column": 92
1086                                        }
1087                                      }
1088                                    },
1089                                    "loc": {
1090                                      "start": {
1091                                        "line": 27,
1092                                        "column": 91
1093                                      },
1094                                      "end": {
1095                                        "line": 27,
1096                                        "column": 92
1097                                      }
1098                                    }
1099                                  }
1100                                ],
1101                                "loc": {
1102                                  "start": {
1103                                    "line": 27,
1104                                    "column": 79
1105                                  },
1106                                  "end": {
1107                                    "line": 27,
1108                                    "column": 93
1109                                  }
1110                                }
1111                              },
1112                              "loc": {
1113                                "start": {
1114                                  "line": 27,
1115                                  "column": 79
1116                                },
1117                                "end": {
1118                                  "line": 27,
1119                                  "column": 90
1120                                }
1121                              }
1122                            }
1123                          ],
1124                          "loc": {
1125                            "start": {
1126                              "line": 27,
1127                              "column": 75
1128                            },
1129                            "end": {
1130                              "line": 27,
1131                              "column": 90
1132                            }
1133                          }
1134                        },
1135                        "decorators": [],
1136                        "loc": {
1137                          "start": {
1138                            "line": 27,
1139                            "column": 68
1140                          },
1141                          "end": {
1142                            "line": 27,
1143                            "column": 73
1144                          }
1145                        }
1146                      }
1147                    ],
1148                    "returnType": {
1149                      "type": "TSVoidKeyword",
1150                      "loc": {
1151                        "start": {
1152                          "line": 27,
1153                          "column": 98
1154                        },
1155                        "end": {
1156                          "line": 27,
1157                          "column": 102
1158                        }
1159                      }
1160                    },
1161                    "loc": {
1162                      "start": {
1163                        "line": 27,
1164                        "column": 67
1165                      },
1166                      "end": {
1167                        "line": 27,
1168                        "column": 102
1169                      }
1170                    }
1171                  },
1172                  "decorators": [],
1173                  "loc": {
1174                    "start": {
1175                      "line": 27,
1176                      "column": 58
1177                    },
1178                    "end": {
1179                      "line": 27,
1180                      "column": 65
1181                    }
1182                  }
1183                },
1184                {
1185                  "type": "Identifier",
1186                  "name": "reject",
1187                  "typeAnnotation": {
1188                    "type": "TSFunctionType",
1189                    "params": [
1190                      {
1191                        "type": "Identifier",
1192                        "name": "reason",
1193                        "typeAnnotation": {
1194                          "type": "TSAnyKeyword",
1195                          "loc": {
1196                            "start": {
1197                              "line": 27,
1198                              "column": 122
1199                            },
1200                            "end": {
1201                              "line": 27,
1202                              "column": 125
1203                            }
1204                          }
1205                        },
1206                        "optional": true,
1207                        "decorators": [],
1208                        "loc": {
1209                          "start": {
1210                            "line": 27,
1211                            "column": 113
1212                          },
1213                          "end": {
1214                            "line": 27,
1215                            "column": 119
1216                          }
1217                        }
1218                      }
1219                    ],
1220                    "returnType": {
1221                      "type": "TSVoidKeyword",
1222                      "loc": {
1223                        "start": {
1224                          "line": 27,
1225                          "column": 130
1226                        },
1227                        "end": {
1228                          "line": 27,
1229                          "column": 134
1230                        }
1231                      }
1232                    },
1233                    "loc": {
1234                      "start": {
1235                        "line": 27,
1236                        "column": 112
1237                      },
1238                      "end": {
1239                        "line": 27,
1240                        "column": 134
1241                      }
1242                    }
1243                  },
1244                  "decorators": [],
1245                  "loc": {
1246                    "start": {
1247                      "line": 27,
1248                      "column": 104
1249                    },
1250                    "end": {
1251                      "line": 27,
1252                      "column": 110
1253                    }
1254                  }
1255                }
1256              ],
1257              "returnType": {
1258                "type": "TSVoidKeyword",
1259                "loc": {
1260                  "start": {
1261                    "line": 27,
1262                    "column": 139
1263                  },
1264                  "end": {
1265                    "line": 27,
1266                    "column": 143
1267                  }
1268                }
1269              },
1270              "loc": {
1271                "start": {
1272                  "line": 27,
1273                  "column": 57
1274                },
1275                "end": {
1276                  "line": 27,
1277                  "column": 143
1278                }
1279              }
1280            },
1281            "decorators": [],
1282            "loc": {
1283              "start": {
1284                "line": 27,
1285                "column": 47
1286              },
1287              "end": {
1288                "line": 27,
1289                "column": 55
1290              }
1291            }
1292          }
1293        ],
1294        "typeParameters": {
1295          "type": "TSTypeParameterDeclaration",
1296          "params": [
1297            {
1298              "type": "TSTypeParameter",
1299              "name": {
1300                "type": "Identifier",
1301                "name": "T",
1302                "decorators": [],
1303                "loc": {
1304                  "start": {
1305                    "line": 27,
1306                    "column": 44
1307                  },
1308                  "end": {
1309                    "line": 27,
1310                    "column": 45
1311                  }
1312                }
1313              },
1314              "loc": {
1315                "start": {
1316                  "line": 27,
1317                  "column": 44
1318                },
1319                "end": {
1320                  "line": 27,
1321                  "column": 46
1322                }
1323              }
1324            }
1325          ],
1326          "loc": {
1327            "start": {
1328              "line": 27,
1329              "column": 43
1330            },
1331            "end": {
1332              "line": 27,
1333              "column": 46
1334            }
1335          }
1336        },
1337        "returnType": {
1338          "type": "TSTypeReference",
1339          "typeName": {
1340            "type": "Identifier",
1341            "name": "PromiseLike",
1342            "decorators": [],
1343            "loc": {
1344              "start": {
1345                "line": 27,
1346                "column": 148
1347              },
1348              "end": {
1349                "line": 27,
1350                "column": 159
1351              }
1352            }
1353          },
1354          "typeParameters": {
1355            "type": "TSTypeParameterInstantiation",
1356            "params": [
1357              {
1358                "type": "TSTypeReference",
1359                "typeName": {
1360                  "type": "Identifier",
1361                  "name": "T",
1362                  "decorators": [],
1363                  "loc": {
1364                    "start": {
1365                      "line": 27,
1366                      "column": 160
1367                    },
1368                    "end": {
1369                      "line": 27,
1370                      "column": 161
1371                    }
1372                  }
1373                },
1374                "loc": {
1375                  "start": {
1376                    "line": 27,
1377                    "column": 160
1378                  },
1379                  "end": {
1380                    "line": 27,
1381                    "column": 161
1382                  }
1383                }
1384              }
1385            ],
1386            "loc": {
1387              "start": {
1388                "line": 27,
1389                "column": 148
1390              },
1391              "end": {
1392                "line": 27,
1393                "column": 162
1394              }
1395            }
1396          },
1397          "loc": {
1398            "start": {
1399              "line": 27,
1400              "column": 148
1401            },
1402            "end": {
1403              "line": 27,
1404              "column": 159
1405            }
1406          }
1407        },
1408        "loc": {
1409          "start": {
1410            "line": 27,
1411            "column": 39
1412          },
1413          "end": {
1414            "line": 27,
1415            "column": 159
1416          }
1417        }
1418      },
1419      "declare": true,
1420      "loc": {
1421        "start": {
1422          "line": 27,
1423          "column": 9
1424        },
1425        "end": {
1426          "line": 27,
1427          "column": 163
1428        }
1429      }
1430    },
1431    {
1432      "type": "EmptyStatement",
1433      "loc": {
1434        "start": {
1435          "line": 27,
1436          "column": 162
1437        },
1438        "end": {
1439          "line": 27,
1440          "column": 163
1441        }
1442      }
1443    },
1444    {
1445      "type": "TSInterfaceDeclaration",
1446      "body": {
1447        "type": "TSInterfaceBody",
1448        "body": [
1449          {
1450            "type": "TSPropertySignature",
1451            "computed": false,
1452            "optional": false,
1453            "readonly": false,
1454            "key": {
1455              "type": "Identifier",
1456              "name": "a",
1457              "decorators": [],
1458              "loc": {
1459                "start": {
1460                  "line": 30,
1461                  "column": 5
1462                },
1463                "end": {
1464                  "line": 30,
1465                  "column": 6
1466                }
1467              }
1468            },
1469            "typeAnnotation": {
1470              "type": "TSNumberKeyword",
1471              "loc": {
1472                "start": {
1473                  "line": 30,
1474                  "column": 8
1475                },
1476                "end": {
1477                  "line": 30,
1478                  "column": 14
1479                }
1480              }
1481            },
1482            "loc": {
1483              "start": {
1484                "line": 30,
1485                "column": 5
1486              },
1487              "end": {
1488                "line": 30,
1489                "column": 15
1490              }
1491            }
1492          },
1493          {
1494            "type": "TSIndexSignature",
1495            "parameters": {
1496              "type": "Identifier",
1497              "name": "x",
1498              "typeAnnotation": {
1499                "type": "TSStringKeyword",
1500                "loc": {
1501                  "start": {
1502                    "line": 31,
1503                    "column": 9
1504                  },
1505                  "end": {
1506                    "line": 31,
1507                    "column": 15
1508                  }
1509                }
1510              },
1511              "decorators": [],
1512              "loc": {
1513                "start": {
1514                  "line": 31,
1515                  "column": 6
1516                },
1517                "end": {
1518                  "line": 31,
1519                  "column": 7
1520                }
1521              }
1522            },
1523            "typeAnnotation": {
1524              "type": "TSUnionType",
1525              "types": [
1526                {
1527                  "type": "TSBooleanKeyword",
1528                  "loc": {
1529                    "start": {
1530                      "line": 31,
1531                      "column": 18
1532                    },
1533                    "end": {
1534                      "line": 31,
1535                      "column": 25
1536                    }
1537                  }
1538                },
1539                {
1540                  "type": "TSNumberKeyword",
1541                  "loc": {
1542                    "start": {
1543                      "line": 31,
1544                      "column": 28
1545                    },
1546                    "end": {
1547                      "line": 31,
1548                      "column": 34
1549                    }
1550                  }
1551                }
1552              ],
1553              "loc": {
1554                "start": {
1555                  "line": 31,
1556                  "column": 18
1557                },
1558                "end": {
1559                  "line": 31,
1560                  "column": 34
1561                }
1562              }
1563            },
1564            "readonly": false,
1565            "loc": {
1566              "start": {
1567                "line": 31,
1568                "column": 5
1569              },
1570              "end": {
1571                "line": 31,
1572                "column": 35
1573              }
1574            }
1575          }
1576        ],
1577        "loc": {
1578          "start": {
1579            "line": 29,
1580            "column": 53
1581          },
1582          "end": {
1583            "line": 32,
1584            "column": 2
1585          }
1586        }
1587      },
1588      "id": {
1589        "type": "Identifier",
1590        "name": "R",
1591        "decorators": [],
1592        "loc": {
1593          "start": {
1594            "line": 29,
1595            "column": 11
1596          },
1597          "end": {
1598            "line": 29,
1599            "column": 12
1600          }
1601        }
1602      },
1603      "extends": [],
1604      "typeParameters": {
1605        "type": "TSTypeParameterDeclaration",
1606        "params": [
1607          {
1608            "type": "TSTypeParameter",
1609            "name": {
1610              "type": "Identifier",
1611              "name": "K",
1612              "decorators": [],
1613              "loc": {
1614                "start": {
1615                  "line": 29,
1616                  "column": 13
1617                },
1618                "end": {
1619                  "line": 29,
1620                  "column": 14
1621                }
1622              }
1623            },
1624            "constraint": {
1625              "type": "TSTupleType",
1626              "elementTypes": [
1627                {
1628                  "type": "TSNumberKeyword",
1629                  "loc": {
1630                    "start": {
1631                      "line": 29,
1632                      "column": 24
1633                    },
1634                    "end": {
1635                      "line": 29,
1636                      "column": 31
1637                    }
1638                  }
1639                },
1640                {
1641                  "type": "TSStringKeyword",
1642                  "loc": {
1643                    "start": {
1644                      "line": 29,
1645                      "column": 32
1646                    },
1647                    "end": {
1648                      "line": 29,
1649                      "column": 39
1650                    }
1651                  }
1652                }
1653              ],
1654              "loc": {
1655                "start": {
1656                  "line": 29,
1657                  "column": 23
1658                },
1659                "end": {
1660                  "line": 29,
1661                  "column": 39
1662                }
1663              }
1664            },
1665            "loc": {
1666              "start": {
1667                "line": 29,
1668                "column": 13
1669              },
1670              "end": {
1671                "line": 29,
1672                "column": 40
1673              }
1674            }
1675          },
1676          {
1677            "type": "TSTypeParameter",
1678            "name": {
1679              "type": "Identifier",
1680              "name": "T",
1681              "decorators": [],
1682              "loc": {
1683                "start": {
1684                  "line": 29,
1685                  "column": 41
1686                },
1687                "end": {
1688                  "line": 29,
1689                  "column": 42
1690                }
1691              }
1692            },
1693            "default": {
1694              "type": "TSStringKeyword",
1695              "loc": {
1696                "start": {
1697                  "line": 29,
1698                  "column": 45
1699                },
1700                "end": {
1701                  "line": 29,
1702                  "column": 51
1703                }
1704              }
1705            },
1706            "loc": {
1707              "start": {
1708                "line": 29,
1709                "column": 41
1710              },
1711              "end": {
1712                "line": 29,
1713                "column": 52
1714              }
1715            }
1716          }
1717        ],
1718        "loc": {
1719          "start": {
1720            "line": 29,
1721            "column": 12
1722          },
1723          "end": {
1724            "line": 29,
1725            "column": 52
1726          }
1727        }
1728      },
1729      "loc": {
1730        "start": {
1731          "line": 29,
1732          "column": 1
1733        },
1734        "end": {
1735          "line": 32,
1736          "column": 2
1737        }
1738      }
1739    },
1740    {
1741      "type": "TSInterfaceDeclaration",
1742      "body": {
1743        "type": "TSInterfaceBody",
1744        "body": [
1745          {
1746            "type": "TSCallSignatureDeclaration",
1747            "params": [],
1748            "typeParameters": {
1749              "type": "TSTypeParameterDeclaration",
1750              "params": [
1751                {
1752                  "type": "TSTypeParameter",
1753                  "name": {
1754                    "type": "Identifier",
1755                    "name": "A",
1756                    "decorators": [],
1757                    "loc": {
1758                      "start": {
1759                        "line": 35,
1760                        "column": 6
1761                      },
1762                      "end": {
1763                        "line": 35,
1764                        "column": 7
1765                      }
1766                    }
1767                  },
1768                  "loc": {
1769                    "start": {
1770                      "line": 35,
1771                      "column": 6
1772                    },
1773                    "end": {
1774                      "line": 35,
1775                      "column": 8
1776                    }
1777                  }
1778                }
1779              ],
1780              "loc": {
1781                "start": {
1782                  "line": 35,
1783                  "column": 5
1784                },
1785                "end": {
1786                  "line": 35,
1787                  "column": 8
1788                }
1789              }
1790            },
1791            "returnType": {
1792              "type": "TSNumberKeyword",
1793              "loc": {
1794                "start": {
1795                  "line": 35,
1796                  "column": 12
1797                },
1798                "end": {
1799                  "line": 35,
1800                  "column": 18
1801                }
1802              }
1803            },
1804            "loc": {
1805              "start": {
1806                "line": 35,
1807                "column": 5
1808              },
1809              "end": {
1810                "line": 35,
1811                "column": 19
1812              }
1813            }
1814          },
1815          {
1816            "type": "TSMethodSignature",
1817            "computed": false,
1818            "optional": false,
1819            "key": {
1820              "type": "Identifier",
1821              "name": "o",
1822              "decorators": [],
1823              "loc": {
1824                "start": {
1825                  "line": 36,
1826                  "column": 5
1827                },
1828                "end": {
1829                  "line": 36,
1830                  "column": 6
1831                }
1832              }
1833            },
1834            "params": [],
1835            "typeParameters": {
1836              "type": "TSTypeParameterDeclaration",
1837              "params": [
1838                {
1839                  "type": "TSTypeParameter",
1840                  "name": {
1841                    "type": "Identifier",
1842                    "name": "A",
1843                    "decorators": [],
1844                    "loc": {
1845                      "start": {
1846                        "line": 36,
1847                        "column": 7
1848                      },
1849                      "end": {
1850                        "line": 36,
1851                        "column": 8
1852                      }
1853                    }
1854                  },
1855                  "constraint": {
1856                    "type": "TSNumberKeyword",
1857                    "loc": {
1858                      "start": {
1859                        "line": 36,
1860                        "column": 17
1861                      },
1862                      "end": {
1863                        "line": 36,
1864                        "column": 23
1865                      }
1866                    }
1867                  },
1868                  "loc": {
1869                    "start": {
1870                      "line": 36,
1871                      "column": 7
1872                    },
1873                    "end": {
1874                      "line": 36,
1875                      "column": 24
1876                    }
1877                  }
1878                }
1879              ],
1880              "loc": {
1881                "start": {
1882                  "line": 36,
1883                  "column": 6
1884                },
1885                "end": {
1886                  "line": 36,
1887                  "column": 24
1888                }
1889              }
1890            },
1891            "typeAnnotation": {
1892              "type": "TSTupleType",
1893              "elementTypes": [
1894                {
1895                  "type": "TSBooleanKeyword",
1896                  "loc": {
1897                    "start": {
1898                      "line": 36,
1899                      "column": 29
1900                    },
1901                    "end": {
1902                      "line": 36,
1903                      "column": 37
1904                    }
1905                  }
1906                },
1907                {
1908                  "type": "TSArrayType",
1909                  "elementType": {
1910                    "type": "TSNumberKeyword",
1911                    "loc": {
1912                      "start": {
1913                        "line": 36,
1914                        "column": 38
1915                      },
1916                      "end": {
1917                        "line": 36,
1918                        "column": 44
1919                      }
1920                    }
1921                  },
1922                  "loc": {
1923                    "start": {
1924                      "line": 36,
1925                      "column": 38
1926                    },
1927                    "end": {
1928                      "line": 36,
1929                      "column": 47
1930                    }
1931                  }
1932                }
1933              ],
1934              "loc": {
1935                "start": {
1936                  "line": 36,
1937                  "column": 28
1938                },
1939                "end": {
1940                  "line": 36,
1941                  "column": 47
1942                }
1943              }
1944            },
1945            "loc": {
1946              "start": {
1947                "line": 36,
1948                "column": 5
1949              },
1950              "end": {
1951                "line": 36,
1952                "column": 48
1953              }
1954            }
1955          }
1956        ],
1957        "loc": {
1958          "start": {
1959            "line": 34,
1960            "column": 117
1961          },
1962          "end": {
1963            "line": 37,
1964            "column": 2
1965          }
1966        }
1967      },
1968      "id": {
1969        "type": "Identifier",
1970        "name": "U",
1971        "decorators": [],
1972        "loc": {
1973          "start": {
1974            "line": 34,
1975            "column": 11
1976          },
1977          "end": {
1978            "line": 34,
1979            "column": 12
1980          }
1981        }
1982      },
1983      "extends": [
1984        {
1985          "type": "TSInterfaceHeritage",
1986          "expression": {
1987            "type": "TSTypeReference",
1988            "typeName": {
1989              "type": "Identifier",
1990              "name": "R",
1991              "decorators": [],
1992              "loc": {
1993                "start": {
1994                  "line": 34,
1995                  "column": 97
1996                },
1997                "end": {
1998                  "line": 34,
1999                  "column": 98
2000                }
2001              }
2002            },
2003            "typeParameters": {
2004              "type": "TSTypeParameterInstantiation",
2005              "params": [
2006                {
2007                  "type": "TSTupleType",
2008                  "elementTypes": [
2009                    {
2010                      "type": "TSNumberKeyword",
2011                      "loc": {
2012                        "start": {
2013                          "line": 34,
2014                          "column": 100
2015                        },
2016                        "end": {
2017                          "line": 34,
2018                          "column": 107
2019                        }
2020                      }
2021                    },
2022                    {
2023                      "type": "TSStringKeyword",
2024                      "loc": {
2025                        "start": {
2026                          "line": 34,
2027                          "column": 108
2028                        },
2029                        "end": {
2030                          "line": 34,
2031                          "column": 115
2032                        }
2033                      }
2034                    }
2035                  ],
2036                  "loc": {
2037                    "start": {
2038                      "line": 34,
2039                      "column": 99
2040                    },
2041                    "end": {
2042                      "line": 34,
2043                      "column": 115
2044                    }
2045                  }
2046                }
2047              ],
2048              "loc": {
2049                "start": {
2050                  "line": 34,
2051                  "column": 98
2052                },
2053                "end": {
2054                  "line": 34,
2055                  "column": 116
2056                }
2057              }
2058            },
2059            "loc": {
2060              "start": {
2061                "line": 34,
2062                "column": 117
2063              },
2064              "end": {
2065                "line": 34,
2066                "column": 116
2067              }
2068            }
2069          },
2070          "loc": {
2071            "start": {
2072              "line": 34,
2073              "column": 117
2074            },
2075            "end": {
2076              "line": 34,
2077              "column": 116
2078            }
2079          }
2080        }
2081      ],
2082      "typeParameters": {
2083        "type": "TSTypeParameterDeclaration",
2084        "params": [
2085          {
2086            "type": "TSTypeParameter",
2087            "name": {
2088              "type": "Identifier",
2089              "name": "A",
2090              "decorators": [],
2091              "loc": {
2092                "start": {
2093                  "line": 34,
2094                  "column": 13
2095                },
2096                "end": {
2097                  "line": 34,
2098                  "column": 14
2099                }
2100              }
2101            },
2102            "constraint": {
2103              "type": "TSTypeOperator",
2104              "operator": "readonly",
2105              "typeAnnotation": {
2106                "type": "TSTupleType",
2107                "elementTypes": [
2108                  {
2109                    "type": "TSNumberKeyword",
2110                    "loc": {
2111                      "start": {
2112                        "line": 34,
2113                        "column": 33
2114                      },
2115                      "end": {
2116                        "line": 34,
2117                        "column": 40
2118                      }
2119                    }
2120                  },
2121                  {
2122                    "type": "TSNumberKeyword",
2123                    "loc": {
2124                      "start": {
2125                        "line": 34,
2126                        "column": 41
2127                      },
2128                      "end": {
2129                        "line": 34,
2130                        "column": 48
2131                      }
2132                    }
2133                  },
2134                  {
2135                    "type": "TSTypeLiteral",
2136                    "members": [
2137                      {
2138                        "type": "TSPropertySignature",
2139                        "computed": false,
2140                        "optional": false,
2141                        "readonly": false,
2142                        "key": {
2143                          "type": "Identifier",
2144                          "name": "a",
2145                          "decorators": [],
2146                          "loc": {
2147                            "start": {
2148                              "line": 34,
2149                              "column": 51
2150                            },
2151                            "end": {
2152                              "line": 34,
2153                              "column": 52
2154                            }
2155                          }
2156                        },
2157                        "typeAnnotation": {
2158                          "type": "TSNumberKeyword",
2159                          "loc": {
2160                            "start": {
2161                              "line": 34,
2162                              "column": 54
2163                            },
2164                            "end": {
2165                              "line": 34,
2166                              "column": 60
2167                            }
2168                          }
2169                        },
2170                        "loc": {
2171                          "start": {
2172                            "line": 34,
2173                            "column": 51
2174                          },
2175                          "end": {
2176                            "line": 34,
2177                            "column": 61
2178                          }
2179                        }
2180                      },
2181                      {
2182                        "type": "TSPropertySignature",
2183                        "computed": false,
2184                        "optional": false,
2185                        "readonly": false,
2186                        "key": {
2187                          "type": "Identifier",
2188                          "name": "b",
2189                          "decorators": [],
2190                          "loc": {
2191                            "start": {
2192                              "line": 34,
2193                              "column": 62
2194                            },
2195                            "end": {
2196                              "line": 34,
2197                              "column": 63
2198                            }
2199                          }
2200                        },
2201                        "typeAnnotation": {
2202                          "type": "TSStringKeyword",
2203                          "loc": {
2204                            "start": {
2205                              "line": 34,
2206                              "column": 65
2207                            },
2208                            "end": {
2209                              "line": 34,
2210                              "column": 71
2211                            }
2212                          }
2213                        },
2214                        "loc": {
2215                          "start": {
2216                            "line": 34,
2217                            "column": 62
2218                          },
2219                          "end": {
2220                            "line": 34,
2221                            "column": 73
2222                          }
2223                        }
2224                      }
2225                    ],
2226                    "loc": {
2227                      "start": {
2228                        "line": 34,
2229                        "column": 49
2230                      },
2231                      "end": {
2232                        "line": 34,
2233                        "column": 74
2234                      }
2235                    }
2236                  }
2237                ],
2238                "loc": {
2239                  "start": {
2240                    "line": 34,
2241                    "column": 32
2242                  },
2243                  "end": {
2244                    "line": 34,
2245                    "column": 74
2246                  }
2247                }
2248              },
2249              "loc": {
2250                "start": {
2251                  "line": 34,
2252                  "column": 23
2253                },
2254                "end": {
2255                  "line": 34,
2256                  "column": 74
2257                }
2258              }
2259            },
2260            "loc": {
2261              "start": {
2262                "line": 34,
2263                "column": 13
2264              },
2265              "end": {
2266                "line": 34,
2267                "column": 75
2268              }
2269            }
2270          },
2271          {
2272            "type": "TSTypeParameter",
2273            "name": {
2274              "type": "Identifier",
2275              "name": "Z",
2276              "decorators": [],
2277              "loc": {
2278                "start": {
2279                  "line": 34,
2280                  "column": 76
2281                },
2282                "end": {
2283                  "line": 34,
2284                  "column": 77
2285                }
2286              }
2287            },
2288            "default": {
2289              "type": "TSBooleanKeyword",
2290              "loc": {
2291                "start": {
2292                  "line": 34,
2293                  "column": 80
2294                },
2295                "end": {
2296                  "line": 34,
2297                  "column": 87
2298                }
2299              }
2300            },
2301            "loc": {
2302              "start": {
2303                "line": 34,
2304                "column": 76
2305              },
2306              "end": {
2307                "line": 34,
2308                "column": 88
2309              }
2310            }
2311          }
2312        ],
2313        "loc": {
2314          "start": {
2315            "line": 34,
2316            "column": 12
2317          },
2318          "end": {
2319            "line": 34,
2320            "column": 88
2321          }
2322        }
2323      },
2324      "loc": {
2325        "start": {
2326          "line": 34,
2327          "column": 1
2328        },
2329        "end": {
2330          "line": 37,
2331          "column": 2
2332        }
2333      }
2334    },
2335    {
2336      "type": "ExpressionStatement",
2337      "expression": {
2338        "type": "CallExpression",
2339        "callee": {
2340          "type": "Identifier",
2341          "name": "func1",
2342          "decorators": [],
2343          "loc": {
2344            "start": {
2345              "line": 39,
2346              "column": 1
2347            },
2348            "end": {
2349              "line": 39,
2350              "column": 6
2351            }
2352          }
2353        },
2354        "arguments": [],
2355        "optional": false,
2356        "typeParameters": {
2357          "type": "TSTypeParameterInstantiation",
2358          "params": [
2359            {
2360              "type": "TSNumberKeyword",
2361              "loc": {
2362                "start": {
2363                  "line": 39,
2364                  "column": 7
2365                },
2366                "end": {
2367                  "line": 39,
2368                  "column": 13
2369                }
2370              }
2371            },
2372            {
2373              "type": "TSStringKeyword",
2374              "loc": {
2375                "start": {
2376                  "line": 39,
2377                  "column": 15
2378                },
2379                "end": {
2380                  "line": 39,
2381                  "column": 21
2382                }
2383              }
2384            },
2385            {
2386              "type": "TSTupleType",
2387              "elementTypes": [
2388                {
2389                  "type": "TSLiteralType",
2390                  "literal": {
2391                    "type": "NumberLiteral",
2392                    "value": 1,
2393                    "loc": {
2394                      "start": {
2395                        "line": 39,
2396                        "column": 24
2397                      },
2398                      "end": {
2399                        "line": 39,
2400                        "column": 25
2401                      }
2402                    }
2403                  },
2404                  "loc": {
2405                    "start": {
2406                      "line": 39,
2407                      "column": 24
2408                    },
2409                    "end": {
2410                      "line": 39,
2411                      "column": 26
2412                    }
2413                  }
2414                },
2415                {
2416                  "type": "TSLiteralType",
2417                  "literal": {
2418                    "type": "NumberLiteral",
2419                    "value": 2,
2420                    "loc": {
2421                      "start": {
2422                        "line": 39,
2423                        "column": 27
2424                      },
2425                      "end": {
2426                        "line": 39,
2427                        "column": 28
2428                      }
2429                    }
2430                  },
2431                  "loc": {
2432                    "start": {
2433                      "line": 39,
2434                      "column": 27
2435                    },
2436                    "end": {
2437                      "line": 39,
2438                      "column": 29
2439                    }
2440                  }
2441                },
2442                {
2443                  "type": "TSLiteralType",
2444                  "literal": {
2445                    "type": "NumberLiteral",
2446                    "value": 3,
2447                    "loc": {
2448                      "start": {
2449                        "line": 39,
2450                        "column": 30
2451                      },
2452                      "end": {
2453                        "line": 39,
2454                        "column": 31
2455                      }
2456                    }
2457                  },
2458                  "loc": {
2459                    "start": {
2460                      "line": 39,
2461                      "column": 30
2462                    },
2463                    "end": {
2464                      "line": 39,
2465                      "column": 32
2466                    }
2467                  }
2468                }
2469              ],
2470              "loc": {
2471                "start": {
2472                  "line": 39,
2473                  "column": 23
2474                },
2475                "end": {
2476                  "line": 39,
2477                  "column": 32
2478                }
2479              }
2480            }
2481          ],
2482          "loc": {
2483            "start": {
2484              "line": 39,
2485              "column": 6
2486            },
2487            "end": {
2488              "line": 39,
2489              "column": 33
2490            }
2491          }
2492        },
2493        "loc": {
2494          "start": {
2495            "line": 39,
2496            "column": 1
2497          },
2498          "end": {
2499            "line": 39,
2500            "column": 35
2501          }
2502        }
2503      },
2504      "loc": {
2505        "start": {
2506          "line": 39,
2507          "column": 1
2508        },
2509        "end": {
2510          "line": 39,
2511          "column": 35
2512        }
2513      }
2514    },
2515    {
2516      "type": "ExpressionStatement",
2517      "expression": {
2518        "type": "CallExpression",
2519        "callee": {
2520          "type": "Identifier",
2521          "name": "func2",
2522          "decorators": [],
2523          "loc": {
2524            "start": {
2525              "line": 40,
2526              "column": 1
2527            },
2528            "end": {
2529              "line": 40,
2530              "column": 6
2531            }
2532          }
2533        },
2534        "arguments": [],
2535        "optional": false,
2536        "typeParameters": {
2537          "type": "TSTypeParameterInstantiation",
2538          "params": [
2539            {
2540              "type": "TSFunctionType",
2541              "params": [],
2542              "typeParameters": {
2543                "type": "TSTypeParameterDeclaration",
2544                "params": [
2545                  {
2546                    "type": "TSTypeParameter",
2547                    "name": {
2548                      "type": "Identifier",
2549                      "name": "A",
2550                      "decorators": [],
2551                      "loc": {
2552                        "start": {
2553                          "line": 40,
2554                          "column": 8
2555                        },
2556                        "end": {
2557                          "line": 40,
2558                          "column": 9
2559                        }
2560                      }
2561                    },
2562                    "loc": {
2563                      "start": {
2564                        "line": 40,
2565                        "column": 8
2566                      },
2567                      "end": {
2568                        "line": 40,
2569                        "column": 10
2570                      }
2571                    }
2572                  }
2573                ],
2574                "loc": {
2575                  "start": {
2576                    "line": 40,
2577                    "column": 7
2578                  },
2579                  "end": {
2580                    "line": 40,
2581                    "column": 10
2582                  }
2583                }
2584              },
2585              "returnType": {
2586                "type": "TSTypeLiteral",
2587                "members": [],
2588                "loc": {
2589                  "start": {
2590                    "line": 40,
2591                    "column": 16
2592                  },
2593                  "end": {
2594                    "line": 40,
2595                    "column": 18
2596                  }
2597                }
2598              },
2599              "loc": {
2600                "start": {
2601                  "line": 40,
2602                  "column": 7
2603                },
2604                "end": {
2605                  "line": 40,
2606                  "column": 18
2607                }
2608              }
2609            }
2610          ],
2611          "loc": {
2612            "start": {
2613              "line": 40,
2614              "column": 6
2615            },
2616            "end": {
2617              "line": 40,
2618              "column": 19
2619            }
2620          }
2621        },
2622        "loc": {
2623          "start": {
2624            "line": 40,
2625            "column": 1
2626          },
2627          "end": {
2628            "line": 40,
2629            "column": 21
2630          }
2631        }
2632      },
2633      "loc": {
2634        "start": {
2635          "line": 40,
2636          "column": 1
2637        },
2638        "end": {
2639          "line": 40,
2640          "column": 22
2641        }
2642      }
2643    },
2644    {
2645      "type": "VariableDeclaration",
2646      "declarations": [
2647        {
2648          "type": "VariableDeclarator",
2649          "id": {
2650            "type": "Identifier",
2651            "name": "o",
2652            "decorators": [],
2653            "loc": {
2654              "start": {
2655                "line": 42,
2656                "column": 5
2657              },
2658              "end": {
2659                "line": 42,
2660                "column": 6
2661              }
2662            }
2663          },
2664          "init": {
2665            "type": "ObjectExpression",
2666            "properties": [
2667              {
2668                "type": "Property",
2669                "method": false,
2670                "shorthand": false,
2671                "computed": false,
2672                "key": {
2673                  "type": "Identifier",
2674                  "name": "a",
2675                  "decorators": [],
2676                  "loc": {
2677                    "start": {
2678                      "line": 43,
2679                      "column": 5
2680                    },
2681                    "end": {
2682                      "line": 43,
2683                      "column": 6
2684                    }
2685                  }
2686                },
2687                "value": {
2688                  "type": "FunctionExpression",
2689                  "function": {
2690                    "type": "ScriptFunction",
2691                    "id": null,
2692                    "generator": false,
2693                    "async": false,
2694                    "expression": false,
2695                    "params": [],
2696                    "typeParameters": {
2697                      "type": "TSTypeParameterDeclaration",
2698                      "params": [
2699                        {
2700                          "type": "TSTypeParameter",
2701                          "name": {
2702                            "type": "Identifier",
2703                            "name": "B",
2704                            "decorators": [],
2705                            "loc": {
2706                              "start": {
2707                                "line": 43,
2708                                "column": 18
2709                              },
2710                              "end": {
2711                                "line": 43,
2712                                "column": 19
2713                              }
2714                            }
2715                          },
2716                          "loc": {
2717                            "start": {
2718                              "line": 43,
2719                              "column": 18
2720                            },
2721                            "end": {
2722                              "line": 43,
2723                              "column": 20
2724                            }
2725                          }
2726                        },
2727                        {
2728                          "type": "TSTypeParameter",
2729                          "name": {
2730                            "type": "Identifier",
2731                            "name": "C",
2732                            "decorators": [],
2733                            "loc": {
2734                              "start": {
2735                                "line": 43,
2736                                "column": 21
2737                              },
2738                              "end": {
2739                                "line": 43,
2740                                "column": 22
2741                              }
2742                            }
2743                          },
2744                          "constraint": {
2745                            "type": "TSTypeQuery",
2746                            "exprName": {
2747                              "type": "Identifier",
2748                              "name": "func1",
2749                              "decorators": [],
2750                              "loc": {
2751                                "start": {
2752                                  "line": 43,
2753                                  "column": 38
2754                                },
2755                                "end": {
2756                                  "line": 43,
2757                                  "column": 43
2758                                }
2759                              }
2760                            },
2761                            "loc": {
2762                              "start": {
2763                                "line": 43,
2764                                "column": 31
2765                              },
2766                              "end": {
2767                                "line": 43,
2768                                "column": 43
2769                              }
2770                            }
2771                          },
2772                          "loc": {
2773                            "start": {
2774                              "line": 43,
2775                              "column": 21
2776                            },
2777                            "end": {
2778                              "line": 43,
2779                              "column": 44
2780                            }
2781                          }
2782                        }
2783                      ],
2784                      "loc": {
2785                        "start": {
2786                          "line": 43,
2787                          "column": 17
2788                        },
2789                        "end": {
2790                          "line": 43,
2791                          "column": 44
2792                        }
2793                      }
2794                    },
2795                    "body": {
2796                      "type": "BlockStatement",
2797                      "statements": [],
2798                      "loc": {
2799                        "start": {
2800                          "line": 43,
2801                          "column": 47
2802                        },
2803                        "end": {
2804                          "line": 43,
2805                          "column": 50
2806                        }
2807                      }
2808                    },
2809                    "loc": {
2810                      "start": {
2811                        "line": 43,
2812                        "column": 8
2813                      },
2814                      "end": {
2815                        "line": 43,
2816                        "column": 50
2817                      }
2818                    }
2819                  },
2820                  "loc": {
2821                    "start": {
2822                      "line": 43,
2823                      "column": 8
2824                    },
2825                    "end": {
2826                      "line": 43,
2827                      "column": 50
2828                    }
2829                  }
2830                },
2831                "kind": "init",
2832                "loc": {
2833                  "start": {
2834                    "line": 43,
2835                    "column": 5
2836                  },
2837                  "end": {
2838                    "line": 43,
2839                    "column": 50
2840                  }
2841                }
2842              },
2843              {
2844                "type": "Property",
2845                "method": false,
2846                "shorthand": false,
2847                "computed": false,
2848                "key": {
2849                  "type": "Identifier",
2850                  "name": "b",
2851                  "decorators": [],
2852                  "loc": {
2853                    "start": {
2854                      "line": 44,
2855                      "column": 5
2856                    },
2857                    "end": {
2858                      "line": 44,
2859                      "column": 6
2860                    }
2861                  }
2862                },
2863                "value": {
2864                  "type": "FunctionExpression",
2865                  "function": {
2866                    "type": "ScriptFunction",
2867                    "id": null,
2868                    "generator": false,
2869                    "async": false,
2870                    "expression": false,
2871                    "params": [],
2872                    "typeParameters": {
2873                      "type": "TSTypeParameterDeclaration",
2874                      "params": [
2875                        {
2876                          "type": "TSTypeParameter",
2877                          "name": {
2878                            "type": "Identifier",
2879                            "name": "D",
2880                            "decorators": [],
2881                            "loc": {
2882                              "start": {
2883                                "line": 44,
2884                                "column": 18
2885                              },
2886                              "end": {
2887                                "line": 44,
2888                                "column": 19
2889                              }
2890                            }
2891                          },
2892                          "default": {
2893                            "type": "TSNumberKeyword",
2894                            "loc": {
2895                              "start": {
2896                                "line": 44,
2897                                "column": 22
2898                              },
2899                              "end": {
2900                                "line": 44,
2901                                "column": 28
2902                              }
2903                            }
2904                          },
2905                          "loc": {
2906                            "start": {
2907                              "line": 44,
2908                              "column": 18
2909                            },
2910                            "end": {
2911                              "line": 44,
2912                              "column": 29
2913                            }
2914                          }
2915                        },
2916                        {
2917                          "type": "TSTypeParameter",
2918                          "name": {
2919                            "type": "Identifier",
2920                            "name": "T",
2921                            "decorators": [],
2922                            "loc": {
2923                              "start": {
2924                                "line": 44,
2925                                "column": 30
2926                              },
2927                              "end": {
2928                                "line": 44,
2929                                "column": 31
2930                              }
2931                            }
2932                          },
2933                          "default": {
2934                            "type": "TSStringKeyword",
2935                            "loc": {
2936                              "start": {
2937                                "line": 44,
2938                                "column": 34
2939                              },
2940                              "end": {
2941                                "line": 44,
2942                                "column": 40
2943                              }
2944                            }
2945                          },
2946                          "loc": {
2947                            "start": {
2948                              "line": 44,
2949                              "column": 30
2950                            },
2951                            "end": {
2952                              "line": 44,
2953                              "column": 41
2954                            }
2955                          }
2956                        }
2957                      ],
2958                      "loc": {
2959                        "start": {
2960                          "line": 44,
2961                          "column": 17
2962                        },
2963                        "end": {
2964                          "line": 44,
2965                          "column": 41
2966                        }
2967                      }
2968                    },
2969                    "body": {
2970                      "type": "BlockStatement",
2971                      "statements": [],
2972                      "loc": {
2973                        "start": {
2974                          "line": 44,
2975                          "column": 44
2976                        },
2977                        "end": {
2978                          "line": 44,
2979                          "column": 47
2980                        }
2981                      }
2982                    },
2983                    "loc": {
2984                      "start": {
2985                        "line": 44,
2986                        "column": 8
2987                      },
2988                      "end": {
2989                        "line": 44,
2990                        "column": 47
2991                      }
2992                    }
2993                  },
2994                  "loc": {
2995                    "start": {
2996                      "line": 44,
2997                      "column": 8
2998                    },
2999                    "end": {
3000                      "line": 44,
3001                      "column": 47
3002                    }
3003                  }
3004                },
3005                "kind": "init",
3006                "loc": {
3007                  "start": {
3008                    "line": 44,
3009                    "column": 5
3010                  },
3011                  "end": {
3012                    "line": 44,
3013                    "column": 47
3014                  }
3015                }
3016              },
3017              {
3018                "type": "Property",
3019                "method": true,
3020                "shorthand": false,
3021                "computed": false,
3022                "key": {
3023                  "type": "Identifier",
3024                  "name": "c",
3025                  "decorators": [],
3026                  "loc": {
3027                    "start": {
3028                      "line": 45,
3029                      "column": 5
3030                    },
3031                    "end": {
3032                      "line": 45,
3033                      "column": 6
3034                    }
3035                  }
3036                },
3037                "value": {
3038                  "type": "FunctionExpression",
3039                  "function": {
3040                    "type": "ScriptFunction",
3041                    "id": null,
3042                    "generator": false,
3043                    "async": false,
3044                    "expression": false,
3045                    "params": [],
3046                    "typeParameters": {
3047                      "type": "TSTypeParameterDeclaration",
3048                      "params": [
3049                        {
3050                          "type": "TSTypeParameter",
3051                          "name": {
3052                            "type": "Identifier",
3053                            "name": "E",
3054                            "decorators": [],
3055                            "loc": {
3056                              "start": {
3057                                "line": 45,
3058                                "column": 7
3059                              },
3060                              "end": {
3061                                "line": 45,
3062                                "column": 8
3063                              }
3064                            }
3065                          },
3066                          "loc": {
3067                            "start": {
3068                              "line": 45,
3069                              "column": 7
3070                            },
3071                            "end": {
3072                              "line": 45,
3073                              "column": 9
3074                            }
3075                          }
3076                        },
3077                        {
3078                          "type": "TSTypeParameter",
3079                          "name": {
3080                            "type": "Identifier",
3081                            "name": "F",
3082                            "decorators": [],
3083                            "loc": {
3084                              "start": {
3085                                "line": 45,
3086                                "column": 10
3087                              },
3088                              "end": {
3089                                "line": 45,
3090                                "column": 11
3091                              }
3092                            }
3093                          },
3094                          "constraint": {
3095                            "type": "TSTypeOperator",
3096                            "operator": "readonly",
3097                            "typeAnnotation": {
3098                              "type": "TSTupleType",
3099                              "elementTypes": [],
3100                              "loc": {
3101                                "start": {
3102                                  "line": 45,
3103                                  "column": 29
3104                                },
3105                                "end": {
3106                                  "line": 45,
3107                                  "column": 31
3108                                }
3109                              }
3110                            },
3111                            "loc": {
3112                              "start": {
3113                                "line": 45,
3114                                "column": 20
3115                              },
3116                              "end": {
3117                                "line": 45,
3118                                "column": 31
3119                              }
3120                            }
3121                          },
3122                          "loc": {
3123                            "start": {
3124                              "line": 45,
3125                              "column": 10
3126                            },
3127                            "end": {
3128                              "line": 45,
3129                              "column": 32
3130                            }
3131                          }
3132                        }
3133                      ],
3134                      "loc": {
3135                        "start": {
3136                          "line": 45,
3137                          "column": 6
3138                        },
3139                        "end": {
3140                          "line": 45,
3141                          "column": 32
3142                        }
3143                      }
3144                    },
3145                    "body": {
3146                      "type": "BlockStatement",
3147                      "statements": [],
3148                      "loc": {
3149                        "start": {
3150                          "line": 45,
3151                          "column": 35
3152                        },
3153                        "end": {
3154                          "line": 45,
3155                          "column": 38
3156                        }
3157                      }
3158                    },
3159                    "loc": {
3160                      "start": {
3161                        "line": 45,
3162                        "column": 6
3163                      },
3164                      "end": {
3165                        "line": 45,
3166                        "column": 38
3167                      }
3168                    }
3169                  },
3170                  "loc": {
3171                    "start": {
3172                      "line": 45,
3173                      "column": 6
3174                    },
3175                    "end": {
3176                      "line": 45,
3177                      "column": 38
3178                    }
3179                  }
3180                },
3181                "kind": "init",
3182                "loc": {
3183                  "start": {
3184                    "line": 45,
3185                    "column": 5
3186                  },
3187                  "end": {
3188                    "line": 45,
3189                    "column": 38
3190                  }
3191                }
3192              }
3193            ],
3194            "loc": {
3195              "start": {
3196                "line": 42,
3197                "column": 9
3198              },
3199              "end": {
3200                "line": 46,
3201                "column": 2
3202              }
3203            }
3204          },
3205          "loc": {
3206            "start": {
3207              "line": 42,
3208              "column": 5
3209            },
3210            "end": {
3211              "line": 46,
3212              "column": 2
3213            }
3214          }
3215        }
3216      ],
3217      "kind": "var",
3218      "loc": {
3219        "start": {
3220          "line": 42,
3221          "column": 1
3222        },
3223        "end": {
3224          "line": 46,
3225          "column": 2
3226        }
3227      }
3228    },
3229    {
3230      "type": "ClassDeclaration",
3231      "definition": {
3232        "id": {
3233          "type": "Identifier",
3234          "name": "A",
3235          "decorators": [],
3236          "loc": {
3237            "start": {
3238              "line": 48,
3239              "column": 7
3240            },
3241            "end": {
3242              "line": 48,
3243              "column": 8
3244            }
3245          }
3246        },
3247        "typeParameters": {
3248          "type": "TSTypeParameterDeclaration",
3249          "params": [
3250            {
3251              "type": "TSTypeParameter",
3252              "name": {
3253                "type": "Identifier",
3254                "name": "T",
3255                "decorators": [],
3256                "loc": {
3257                  "start": {
3258                    "line": 48,
3259                    "column": 9
3260                  },
3261                  "end": {
3262                    "line": 48,
3263                    "column": 10
3264                  }
3265                }
3266              },
3267              "constraint": {
3268                "type": "TSTypeReference",
3269                "typeName": {
3270                  "type": "Identifier",
3271                  "name": "B",
3272                  "decorators": [],
3273                  "loc": {
3274                    "start": {
3275                      "line": 48,
3276                      "column": 19
3277                    },
3278                    "end": {
3279                      "line": 48,
3280                      "column": 20
3281                    }
3282                  }
3283                },
3284                "loc": {
3285                  "start": {
3286                    "line": 48,
3287                    "column": 19
3288                  },
3289                  "end": {
3290                    "line": 48,
3291                    "column": 20
3292                  }
3293                }
3294              },
3295              "loc": {
3296                "start": {
3297                  "line": 48,
3298                  "column": 9
3299                },
3300                "end": {
3301                  "line": 48,
3302                  "column": 21
3303                }
3304              }
3305            },
3306            {
3307              "type": "TSTypeParameter",
3308              "name": {
3309                "type": "Identifier",
3310                "name": "Z",
3311                "decorators": [],
3312                "loc": {
3313                  "start": {
3314                    "line": 48,
3315                    "column": 22
3316                  },
3317                  "end": {
3318                    "line": 48,
3319                    "column": 23
3320                  }
3321                }
3322              },
3323              "default": {
3324                "type": "TSTypeLiteral",
3325                "members": [
3326                  {
3327                    "type": "TSPropertySignature",
3328                    "computed": false,
3329                    "optional": false,
3330                    "readonly": false,
3331                    "key": {
3332                      "type": "Identifier",
3333                      "name": "a",
3334                      "decorators": [],
3335                      "loc": {
3336                        "start": {
3337                          "line": 48,
3338                          "column": 28
3339                        },
3340                        "end": {
3341                          "line": 48,
3342                          "column": 29
3343                        }
3344                      }
3345                    },
3346                    "typeAnnotation": {
3347                      "type": "TSNumberKeyword",
3348                      "loc": {
3349                        "start": {
3350                          "line": 48,
3351                          "column": 31
3352                        },
3353                        "end": {
3354                          "line": 48,
3355                          "column": 37
3356                        }
3357                      }
3358                    },
3359                    "loc": {
3360                      "start": {
3361                        "line": 48,
3362                        "column": 28
3363                      },
3364                      "end": {
3365                        "line": 48,
3366                        "column": 38
3367                      }
3368                    }
3369                  },
3370                  {
3371                    "type": "TSPropertySignature",
3372                    "computed": false,
3373                    "optional": false,
3374                    "readonly": false,
3375                    "key": {
3376                      "type": "Identifier",
3377                      "name": "b",
3378                      "decorators": [],
3379                      "loc": {
3380                        "start": {
3381                          "line": 48,
3382                          "column": 39
3383                        },
3384                        "end": {
3385                          "line": 48,
3386                          "column": 40
3387                        }
3388                      }
3389                    },
3390                    "typeAnnotation": {
3391                      "type": "TSStringKeyword",
3392                      "loc": {
3393                        "start": {
3394                          "line": 48,
3395                          "column": 42
3396                        },
3397                        "end": {
3398                          "line": 48,
3399                          "column": 48
3400                        }
3401                      }
3402                    },
3403                    "loc": {
3404                      "start": {
3405                        "line": 48,
3406                        "column": 39
3407                      },
3408                      "end": {
3409                        "line": 48,
3410                        "column": 50
3411                      }
3412                    }
3413                  }
3414                ],
3415                "loc": {
3416                  "start": {
3417                    "line": 48,
3418                    "column": 26
3419                  },
3420                  "end": {
3421                    "line": 48,
3422                    "column": 50
3423                  }
3424                }
3425              },
3426              "loc": {
3427                "start": {
3428                  "line": 48,
3429                  "column": 22
3430                },
3431                "end": {
3432                  "line": 48,
3433                  "column": 51
3434                }
3435              }
3436            }
3437          ],
3438          "loc": {
3439            "start": {
3440              "line": 48,
3441              "column": 8
3442            },
3443            "end": {
3444              "line": 48,
3445              "column": 51
3446            }
3447          }
3448        },
3449        "superClass": null,
3450        "implements": [],
3451        "constructor": {
3452          "type": "MethodDefinition",
3453          "key": {
3454            "type": "Identifier",
3455            "name": "constructor",
3456            "decorators": [],
3457            "loc": {
3458              "start": {
3459                "line": 1,
3460                "column": 1
3461              },
3462              "end": {
3463                "line": 1,
3464                "column": 1
3465              }
3466            }
3467          },
3468          "kind": "constructor",
3469          "static": false,
3470          "optional": false,
3471          "computed": false,
3472          "value": {
3473            "type": "FunctionExpression",
3474            "function": {
3475              "type": "ScriptFunction",
3476              "id": null,
3477              "generator": false,
3478              "async": false,
3479              "expression": false,
3480              "params": [],
3481              "body": {
3482                "type": "BlockStatement",
3483                "statements": [],
3484                "loc": {
3485                  "start": {
3486                    "line": 1,
3487                    "column": 1
3488                  },
3489                  "end": {
3490                    "line": 1,
3491                    "column": 1
3492                  }
3493                }
3494              },
3495              "loc": {
3496                "start": {
3497                  "line": 1,
3498                  "column": 1
3499                },
3500                "end": {
3501                  "line": 1,
3502                  "column": 1
3503                }
3504              }
3505            },
3506            "loc": {
3507              "start": {
3508                "line": 1,
3509                "column": 1
3510              },
3511              "end": {
3512                "line": 1,
3513                "column": 1
3514              }
3515            }
3516          },
3517          "overloads": [],
3518          "decorators": [],
3519          "loc": {
3520            "start": {
3521              "line": 51,
3522              "column": 2
3523            },
3524            "end": {
3525              "line": 51,
3526              "column": 2
3527            }
3528          }
3529        },
3530        "body": [
3531          {
3532            "type": "MethodDefinition",
3533            "key": {
3534              "type": "Identifier",
3535              "name": "a",
3536              "decorators": [],
3537              "loc": {
3538                "start": {
3539                  "line": 49,
3540                  "column": 12
3541                },
3542                "end": {
3543                  "line": 49,
3544                  "column": 13
3545                }
3546              }
3547            },
3548            "kind": "method",
3549            "accessibility": "public",
3550            "static": false,
3551            "optional": false,
3552            "computed": false,
3553            "value": {
3554              "type": "FunctionExpression",
3555              "function": {
3556                "type": "ScriptFunction",
3557                "id": null,
3558                "generator": false,
3559                "async": false,
3560                "expression": false,
3561                "params": [],
3562                "typeParameters": {
3563                  "type": "TSTypeParameterDeclaration",
3564                  "params": [
3565                    {
3566                      "type": "TSTypeParameter",
3567                      "name": {
3568                        "type": "Identifier",
3569                        "name": "T",
3570                        "decorators": [],
3571                        "loc": {
3572                          "start": {
3573                            "line": 49,
3574                            "column": 14
3575                          },
3576                          "end": {
3577                            "line": 49,
3578                            "column": 15
3579                          }
3580                        }
3581                      },
3582                      "loc": {
3583                        "start": {
3584                          "line": 49,
3585                          "column": 14
3586                        },
3587                        "end": {
3588                          "line": 49,
3589                          "column": 16
3590                        }
3591                      }
3592                    },
3593                    {
3594                      "type": "TSTypeParameter",
3595                      "name": {
3596                        "type": "Identifier",
3597                        "name": "R",
3598                        "decorators": [],
3599                        "loc": {
3600                          "start": {
3601                            "line": 49,
3602                            "column": 17
3603                          },
3604                          "end": {
3605                            "line": 49,
3606                            "column": 18
3607                          }
3608                        }
3609                      },
3610                      "loc": {
3611                        "start": {
3612                          "line": 49,
3613                          "column": 17
3614                        },
3615                        "end": {
3616                          "line": 49,
3617                          "column": 19
3618                        }
3619                      }
3620                    }
3621                  ],
3622                  "loc": {
3623                    "start": {
3624                      "line": 49,
3625                      "column": 13
3626                    },
3627                    "end": {
3628                      "line": 49,
3629                      "column": 19
3630                    }
3631                  }
3632                },
3633                "body": {
3634                  "type": "BlockStatement",
3635                  "statements": [],
3636                  "loc": {
3637                    "start": {
3638                      "line": 49,
3639                      "column": 22
3640                    },
3641                    "end": {
3642                      "line": 49,
3643                      "column": 25
3644                    }
3645                  }
3646                },
3647                "loc": {
3648                  "start": {
3649                    "line": 49,
3650                    "column": 13
3651                  },
3652                  "end": {
3653                    "line": 49,
3654                    "column": 25
3655                  }
3656                }
3657              },
3658              "loc": {
3659                "start": {
3660                  "line": 49,
3661                  "column": 13
3662                },
3663                "end": {
3664                  "line": 49,
3665                  "column": 25
3666                }
3667              }
3668            },
3669            "overloads": [],
3670            "decorators": [],
3671            "loc": {
3672              "start": {
3673                "line": 49,
3674                "column": 5
3675              },
3676              "end": {
3677                "line": 49,
3678                "column": 25
3679              }
3680            }
3681          },
3682          {
3683            "type": "MethodDefinition",
3684            "key": {
3685              "type": "Identifier",
3686              "name": "b",
3687              "decorators": [],
3688              "loc": {
3689                "start": {
3690                  "line": 50,
3691                  "column": 13
3692                },
3693                "end": {
3694                  "line": 50,
3695                  "column": 14
3696                }
3697              }
3698            },
3699            "kind": "method",
3700            "accessibility": "private",
3701            "static": false,
3702            "optional": false,
3703            "computed": false,
3704            "value": {
3705              "type": "FunctionExpression",
3706              "function": {
3707                "type": "ScriptFunction",
3708                "id": null,
3709                "generator": false,
3710                "async": false,
3711                "expression": false,
3712                "params": [],
3713                "typeParameters": {
3714                  "type": "TSTypeParameterDeclaration",
3715                  "params": [
3716                    {
3717                      "type": "TSTypeParameter",
3718                      "name": {
3719                        "type": "Identifier",
3720                        "name": "E",
3721                        "decorators": [],
3722                        "loc": {
3723                          "start": {
3724                            "line": 50,
3725                            "column": 15
3726                          },
3727                          "end": {
3728                            "line": 50,
3729                            "column": 16
3730                          }
3731                        }
3732                      },
3733                      "constraint": {
3734                        "type": "TSFunctionType",
3735                        "params": [
3736                          {
3737                            "type": "Identifier",
3738                            "name": "a",
3739                            "typeAnnotation": {
3740                              "type": "TSNumberKeyword",
3741                              "loc": {
3742                                "start": {
3743                                  "line": 50,
3744                                  "column": 29
3745                                },
3746                                "end": {
3747                                  "line": 50,
3748                                  "column": 35
3749                                }
3750                              }
3751                            },
3752                            "decorators": [],
3753                            "loc": {
3754                              "start": {
3755                                "line": 50,
3756                                "column": 26
3757                              },
3758                              "end": {
3759                                "line": 50,
3760                                "column": 27
3761                              }
3762                            }
3763                          },
3764                          {
3765                            "type": "Identifier",
3766                            "name": "b",
3767                            "typeAnnotation": {
3768                              "type": "TSStringKeyword",
3769                              "loc": {
3770                                "start": {
3771                                  "line": 50,
3772                                  "column": 40
3773                                },
3774                                "end": {
3775                                  "line": 50,
3776                                  "column": 46
3777                                }
3778                              }
3779                            },
3780                            "decorators": [],
3781                            "loc": {
3782                              "start": {
3783                                "line": 50,
3784                                "column": 37
3785                              },
3786                              "end": {
3787                                "line": 50,
3788                                "column": 38
3789                              }
3790                            }
3791                          }
3792                        ],
3793                        "returnType": {
3794                          "type": "TSArrayType",
3795                          "elementType": {
3796                            "type": "TSAnyKeyword",
3797                            "loc": {
3798                              "start": {
3799                                "line": 50,
3800                                "column": 51
3801                              },
3802                              "end": {
3803                                "line": 50,
3804                                "column": 54
3805                              }
3806                            }
3807                          },
3808                          "loc": {
3809                            "start": {
3810                              "line": 50,
3811                              "column": 51
3812                            },
3813                            "end": {
3814                              "line": 50,
3815                              "column": 56
3816                            }
3817                          }
3818                        },
3819                        "loc": {
3820                          "start": {
3821                            "line": 50,
3822                            "column": 25
3823                          },
3824                          "end": {
3825                            "line": 50,
3826                            "column": 56
3827                          }
3828                        }
3829                      },
3830                      "loc": {
3831                        "start": {
3832                          "line": 50,
3833                          "column": 15
3834                        },
3835                        "end": {
3836                          "line": 50,
3837                          "column": 57
3838                        }
3839                      }
3840                    }
3841                  ],
3842                  "loc": {
3843                    "start": {
3844                      "line": 50,
3845                      "column": 14
3846                    },
3847                    "end": {
3848                      "line": 50,
3849                      "column": 57
3850                    }
3851                  }
3852                },
3853                "body": {
3854                  "type": "BlockStatement",
3855                  "statements": [],
3856                  "loc": {
3857                    "start": {
3858                      "line": 50,
3859                      "column": 60
3860                    },
3861                    "end": {
3862                      "line": 50,
3863                      "column": 63
3864                    }
3865                  }
3866                },
3867                "loc": {
3868                  "start": {
3869                    "line": 50,
3870                    "column": 14
3871                  },
3872                  "end": {
3873                    "line": 50,
3874                    "column": 63
3875                  }
3876                }
3877              },
3878              "loc": {
3879                "start": {
3880                  "line": 50,
3881                  "column": 14
3882                },
3883                "end": {
3884                  "line": 50,
3885                  "column": 63
3886                }
3887              }
3888            },
3889            "overloads": [],
3890            "decorators": [],
3891            "loc": {
3892              "start": {
3893                "line": 50,
3894                "column": 5
3895              },
3896              "end": {
3897                "line": 50,
3898                "column": 63
3899              }
3900            }
3901          }
3902        ],
3903        "loc": {
3904          "start": {
3905            "line": 48,
3906            "column": 52
3907          },
3908          "end": {
3909            "line": 51,
3910            "column": 2
3911          }
3912        }
3913      },
3914      "loc": {
3915        "start": {
3916          "line": 48,
3917          "column": 1
3918        },
3919        "end": {
3920          "line": 51,
3921          "column": 2
3922        }
3923      }
3924    },
3925    {
3926      "type": "ClassDeclaration",
3927      "definition": {
3928        "id": {
3929          "type": "Identifier",
3930          "name": "W",
3931          "decorators": [],
3932          "loc": {
3933            "start": {
3934              "line": 53,
3935              "column": 7
3936            },
3937            "end": {
3938              "line": 53,
3939              "column": 8
3940            }
3941          }
3942        },
3943        "superClass": {
3944          "type": "Identifier",
3945          "name": "T",
3946          "decorators": [],
3947          "loc": {
3948            "start": {
3949              "line": 53,
3950              "column": 17
3951            },
3952            "end": {
3953              "line": 53,
3954              "column": 18
3955            }
3956          }
3957        },
3958        "superTypeParameters": {
3959          "type": "TSTypeParameterInstantiation",
3960          "params": [
3961            {
3962              "type": "TSFunctionType",
3963              "params": [],
3964              "typeParameters": {
3965                "type": "TSTypeParameterDeclaration",
3966                "params": [
3967                  {
3968                    "type": "TSTypeParameter",
3969                    "name": {
3970                      "type": "Identifier",
3971                      "name": "B",
3972                      "decorators": [],
3973                      "loc": {
3974                        "start": {
3975                          "line": 53,
3976                          "column": 20
3977                        },
3978                        "end": {
3979                          "line": 53,
3980                          "column": 21
3981                        }
3982                      }
3983                    },
3984                    "loc": {
3985                      "start": {
3986                        "line": 53,
3987                        "column": 20
3988                      },
3989                      "end": {
3990                        "line": 53,
3991                        "column": 22
3992                      }
3993                    }
3994                  }
3995                ],
3996                "loc": {
3997                  "start": {
3998                    "line": 53,
3999                    "column": 19
4000                  },
4001                  "end": {
4002                    "line": 53,
4003                    "column": 22
4004                  }
4005                }
4006              },
4007              "returnType": {
4008                "type": "TSNumberKeyword",
4009                "loc": {
4010                  "start": {
4011                    "line": 53,
4012                    "column": 29
4013                  },
4014                  "end": {
4015                    "line": 53,
4016                    "column": 35
4017                  }
4018                }
4019              },
4020              "loc": {
4021                "start": {
4022                  "line": 53,
4023                  "column": 19
4024                },
4025                "end": {
4026                  "line": 53,
4027                  "column": 35
4028                }
4029              }
4030            },
4031            {
4032              "type": "TSArrayType",
4033              "elementType": {
4034                "type": "TSTupleType",
4035                "elementTypes": [
4036                  {
4037                    "type": "TSUnionType",
4038                    "types": [
4039                      {
4040                        "type": "TSNumberKeyword",
4041                        "loc": {
4042                          "start": {
4043                            "line": 53,
4044                            "column": 38
4045                          },
4046                          "end": {
4047                            "line": 53,
4048                            "column": 44
4049                          }
4050                        }
4051                      },
4052                      {
4053                        "type": "TSStringKeyword",
4054                        "loc": {
4055                          "start": {
4056                            "line": 53,
4057                            "column": 47
4058                          },
4059                          "end": {
4060                            "line": 53,
4061                            "column": 53
4062                          }
4063                        }
4064                      }
4065                    ],
4066                    "loc": {
4067                      "start": {
4068                        "line": 53,
4069                        "column": 38
4070                      },
4071                      "end": {
4072                        "line": 53,
4073                        "column": 54
4074                      }
4075                    }
4076                  }
4077                ],
4078                "loc": {
4079                  "start": {
4080                    "line": 53,
4081                    "column": 37
4082                  },
4083                  "end": {
4084                    "line": 53,
4085                    "column": 54
4086                  }
4087                }
4088              },
4089              "loc": {
4090                "start": {
4091                  "line": 53,
4092                  "column": 37
4093                },
4094                "end": {
4095                  "line": 53,
4096                  "column": 56
4097                }
4098              }
4099            }
4100          ],
4101          "loc": {
4102            "start": {
4103              "line": 53,
4104              "column": 18
4105            },
4106            "end": {
4107              "line": 53,
4108              "column": 57
4109            }
4110          }
4111        },
4112        "implements": [],
4113        "constructor": {
4114          "type": "MethodDefinition",
4115          "key": {
4116            "type": "Identifier",
4117            "name": "constructor",
4118            "decorators": [],
4119            "loc": {
4120              "start": {
4121                "line": 1,
4122                "column": 1
4123              },
4124              "end": {
4125                "line": 1,
4126                "column": 1
4127              }
4128            }
4129          },
4130          "kind": "constructor",
4131          "static": false,
4132          "optional": false,
4133          "computed": false,
4134          "value": {
4135            "type": "FunctionExpression",
4136            "function": {
4137              "type": "ScriptFunction",
4138              "id": null,
4139              "generator": false,
4140              "async": false,
4141              "expression": false,
4142              "params": [
4143                {
4144                  "type": "RestElement",
4145                  "argument": {
4146                    "type": "Identifier",
4147                    "name": "args",
4148                    "decorators": [],
4149                    "loc": {
4150                      "start": {
4151                        "line": 1,
4152                        "column": 1
4153                      },
4154                      "end": {
4155                        "line": 1,
4156                        "column": 1
4157                      }
4158                    }
4159                  },
4160                  "loc": {
4161                    "start": {
4162                      "line": 1,
4163                      "column": 1
4164                    },
4165                    "end": {
4166                      "line": 1,
4167                      "column": 1
4168                    }
4169                  }
4170                }
4171              ],
4172              "body": {
4173                "type": "BlockStatement",
4174                "statements": [
4175                  {
4176                    "type": "ExpressionStatement",
4177                    "expression": {
4178                      "type": "CallExpression",
4179                      "callee": {
4180                        "type": "Super",
4181                        "loc": {
4182                          "start": {
4183                            "line": 1,
4184                            "column": 1
4185                          },
4186                          "end": {
4187                            "line": 1,
4188                            "column": 1
4189                          }
4190                        }
4191                      },
4192                      "arguments": [
4193                        {
4194                          "type": "SpreadElement",
4195                          "argument": {
4196                            "type": "Identifier",
4197                            "name": "args",
4198                            "decorators": [],
4199                            "loc": {
4200                              "start": {
4201                                "line": 1,
4202                                "column": 1
4203                              },
4204                              "end": {
4205                                "line": 1,
4206                                "column": 1
4207                              }
4208                            }
4209                          },
4210                          "loc": {
4211                            "start": {
4212                              "line": 1,
4213                              "column": 1
4214                            },
4215                            "end": {
4216                              "line": 1,
4217                              "column": 1
4218                            }
4219                          }
4220                        }
4221                      ],
4222                      "optional": false,
4223                      "loc": {
4224                        "start": {
4225                          "line": 1,
4226                          "column": 1
4227                        },
4228                        "end": {
4229                          "line": 1,
4230                          "column": 1
4231                        }
4232                      }
4233                    },
4234                    "loc": {
4235                      "start": {
4236                        "line": 1,
4237                        "column": 1
4238                      },
4239                      "end": {
4240                        "line": 1,
4241                        "column": 1
4242                      }
4243                    }
4244                  }
4245                ],
4246                "loc": {
4247                  "start": {
4248                    "line": 1,
4249                    "column": 1
4250                  },
4251                  "end": {
4252                    "line": 1,
4253                    "column": 1
4254                  }
4255                }
4256              },
4257              "loc": {
4258                "start": {
4259                  "line": 1,
4260                  "column": 1
4261                },
4262                "end": {
4263                  "line": 1,
4264                  "column": 1
4265                }
4266              }
4267            },
4268            "loc": {
4269              "start": {
4270                "line": 1,
4271                "column": 1
4272              },
4273              "end": {
4274                "line": 1,
4275                "column": 1
4276              }
4277            }
4278          },
4279          "overloads": [],
4280          "decorators": [],
4281          "loc": {
4282            "start": {
4283              "line": 55,
4284              "column": 2
4285            },
4286            "end": {
4287              "line": 55,
4288              "column": 2
4289            }
4290          }
4291        },
4292        "body": [],
4293        "loc": {
4294          "start": {
4295            "line": 53,
4296            "column": 58
4297          },
4298          "end": {
4299            "line": 55,
4300            "column": 2
4301          }
4302        }
4303      },
4304      "loc": {
4305        "start": {
4306          "line": 53,
4307          "column": 1
4308        },
4309        "end": {
4310          "line": 55,
4311          "column": 2
4312        }
4313      }
4314    },
4315    {
4316      "type": "ClassDeclaration",
4317      "definition": {
4318        "id": {
4319          "type": "Identifier",
4320          "name": "X",
4321          "decorators": [],
4322          "loc": {
4323            "start": {
4324              "line": 57,
4325              "column": 7
4326            },
4327            "end": {
4328              "line": 57,
4329              "column": 8
4330            }
4331          }
4332        },
4333        "superClass": {
4334          "type": "Identifier",
4335          "name": "Q",
4336          "decorators": [],
4337          "loc": {
4338            "start": {
4339              "line": 57,
4340              "column": 17
4341            },
4342            "end": {
4343              "line": 57,
4344              "column": 18
4345            }
4346          }
4347        },
4348        "superTypeParameters": {
4349          "type": "TSTypeParameterInstantiation",
4350          "params": [
4351            {
4352              "type": "TSNumberKeyword",
4353              "loc": {
4354                "start": {
4355                  "line": 57,
4356                  "column": 19
4357                },
4358                "end": {
4359                  "line": 57,
4360                  "column": 25
4361                }
4362              }
4363            }
4364          ],
4365          "loc": {
4366            "start": {
4367              "line": 57,
4368              "column": 18
4369            },
4370            "end": {
4371              "line": 57,
4372              "column": 26
4373            }
4374          }
4375        },
4376        "implements": [
4377          {
4378            "type": "TSClassImplements",
4379            "expression": {
4380              "type": "Identifier",
4381              "name": "S",
4382              "decorators": [],
4383              "loc": {
4384                "start": {
4385                  "line": 57,
4386                  "column": 38
4387                },
4388                "end": {
4389                  "line": 57,
4390                  "column": 39
4391                }
4392              }
4393            },
4394            "typeParameters": {
4395              "type": "TSTypeParameterInstantiation",
4396              "params": [
4397                {
4398                  "type": "TSFunctionType",
4399                  "params": [
4400                    {
4401                      "type": "Identifier",
4402                      "name": "a",
4403                      "typeAnnotation": {
4404                        "type": "TSNumberKeyword",
4405                        "loc": {
4406                          "start": {
4407                            "line": 57,
4408                            "column": 46
4409                          },
4410                          "end": {
4411                            "line": 57,
4412                            "column": 52
4413                          }
4414                        }
4415                      },
4416                      "decorators": [],
4417                      "loc": {
4418                        "start": {
4419                          "line": 57,
4420                          "column": 44
4421                        },
4422                        "end": {
4423                          "line": 57,
4424                          "column": 45
4425                        }
4426                      }
4427                    },
4428                    {
4429                      "type": "Identifier",
4430                      "name": "b",
4431                      "typeAnnotation": {
4432                        "type": "TSStringKeyword",
4433                        "loc": {
4434                          "start": {
4435                            "line": 57,
4436                            "column": 56
4437                          },
4438                          "end": {
4439                            "line": 57,
4440                            "column": 62
4441                          }
4442                        }
4443                      },
4444                      "decorators": [],
4445                      "loc": {
4446                        "start": {
4447                          "line": 57,
4448                          "column": 54
4449                        },
4450                        "end": {
4451                          "line": 57,
4452                          "column": 55
4453                        }
4454                      }
4455                    }
4456                  ],
4457                  "typeParameters": {
4458                    "type": "TSTypeParameterDeclaration",
4459                    "params": [
4460                      {
4461                        "type": "TSTypeParameter",
4462                        "name": {
4463                          "type": "Identifier",
4464                          "name": "R",
4465                          "decorators": [],
4466                          "loc": {
4467                            "start": {
4468                              "line": 57,
4469                              "column": 41
4470                            },
4471                            "end": {
4472                              "line": 57,
4473                              "column": 42
4474                            }
4475                          }
4476                        },
4477                        "loc": {
4478                          "start": {
4479                            "line": 57,
4480                            "column": 41
4481                          },
4482                          "end": {
4483                            "line": 57,
4484                            "column": 43
4485                          }
4486                        }
4487                      }
4488                    ],
4489                    "loc": {
4490                      "start": {
4491                        "line": 57,
4492                        "column": 40
4493                      },
4494                      "end": {
4495                        "line": 57,
4496                        "column": 43
4497                      }
4498                    }
4499                  },
4500                  "returnType": {
4501                    "type": "TSTupleType",
4502                    "elementTypes": [
4503                      {
4504                        "type": "TSNumberKeyword",
4505                        "loc": {
4506                          "start": {
4507                            "line": 57,
4508                            "column": 68
4509                          },
4510                          "end": {
4511                            "line": 57,
4512                            "column": 75
4513                          }
4514                        }
4515                      }
4516                    ],
4517                    "loc": {
4518                      "start": {
4519                        "line": 57,
4520                        "column": 67
4521                      },
4522                      "end": {
4523                        "line": 57,
4524                        "column": 75
4525                      }
4526                    }
4527                  },
4528                  "loc": {
4529                    "start": {
4530                      "line": 57,
4531                      "column": 40
4532                    },
4533                    "end": {
4534                      "line": 57,
4535                      "column": 75
4536                    }
4537                  }
4538                }
4539              ],
4540              "loc": {
4541                "start": {
4542                  "line": 57,
4543                  "column": 39
4544                },
4545                "end": {
4546                  "line": 57,
4547                  "column": 76
4548                }
4549              }
4550            },
4551            "loc": {
4552              "start": {
4553                "line": 57,
4554                "column": 38
4555              },
4556              "end": {
4557                "line": 57,
4558                "column": 77
4559              }
4560            }
4561          },
4562          {
4563            "type": "TSClassImplements",
4564            "expression": {
4565              "type": "Identifier",
4566              "name": "A",
4567              "decorators": [],
4568              "loc": {
4569                "start": {
4570                  "line": 57,
4571                  "column": 78
4572                },
4573                "end": {
4574                  "line": 57,
4575                  "column": 79
4576                }
4577              }
4578            },
4579            "loc": {
4580              "start": {
4581                "line": 57,
4582                "column": 78
4583              },
4584              "end": {
4585                "line": 57,
4586                "column": 81
4587              }
4588            }
4589          }
4590        ],
4591        "constructor": {
4592          "type": "MethodDefinition",
4593          "key": {
4594            "type": "Identifier",
4595            "name": "constructor",
4596            "decorators": [],
4597            "loc": {
4598              "start": {
4599                "line": 1,
4600                "column": 1
4601              },
4602              "end": {
4603                "line": 1,
4604                "column": 1
4605              }
4606            }
4607          },
4608          "kind": "constructor",
4609          "static": false,
4610          "optional": false,
4611          "computed": false,
4612          "value": {
4613            "type": "FunctionExpression",
4614            "function": {
4615              "type": "ScriptFunction",
4616              "id": null,
4617              "generator": false,
4618              "async": false,
4619              "expression": false,
4620              "params": [
4621                {
4622                  "type": "RestElement",
4623                  "argument": {
4624                    "type": "Identifier",
4625                    "name": "args",
4626                    "decorators": [],
4627                    "loc": {
4628                      "start": {
4629                        "line": 1,
4630                        "column": 1
4631                      },
4632                      "end": {
4633                        "line": 1,
4634                        "column": 1
4635                      }
4636                    }
4637                  },
4638                  "loc": {
4639                    "start": {
4640                      "line": 1,
4641                      "column": 1
4642                    },
4643                    "end": {
4644                      "line": 1,
4645                      "column": 1
4646                    }
4647                  }
4648                }
4649              ],
4650              "body": {
4651                "type": "BlockStatement",
4652                "statements": [
4653                  {
4654                    "type": "ExpressionStatement",
4655                    "expression": {
4656                      "type": "CallExpression",
4657                      "callee": {
4658                        "type": "Super",
4659                        "loc": {
4660                          "start": {
4661                            "line": 1,
4662                            "column": 1
4663                          },
4664                          "end": {
4665                            "line": 1,
4666                            "column": 1
4667                          }
4668                        }
4669                      },
4670                      "arguments": [
4671                        {
4672                          "type": "SpreadElement",
4673                          "argument": {
4674                            "type": "Identifier",
4675                            "name": "args",
4676                            "decorators": [],
4677                            "loc": {
4678                              "start": {
4679                                "line": 1,
4680                                "column": 1
4681                              },
4682                              "end": {
4683                                "line": 1,
4684                                "column": 1
4685                              }
4686                            }
4687                          },
4688                          "loc": {
4689                            "start": {
4690                              "line": 1,
4691                              "column": 1
4692                            },
4693                            "end": {
4694                              "line": 1,
4695                              "column": 1
4696                            }
4697                          }
4698                        }
4699                      ],
4700                      "optional": false,
4701                      "loc": {
4702                        "start": {
4703                          "line": 1,
4704                          "column": 1
4705                        },
4706                        "end": {
4707                          "line": 1,
4708                          "column": 1
4709                        }
4710                      }
4711                    },
4712                    "loc": {
4713                      "start": {
4714                        "line": 1,
4715                        "column": 1
4716                      },
4717                      "end": {
4718                        "line": 1,
4719                        "column": 1
4720                      }
4721                    }
4722                  }
4723                ],
4724                "loc": {
4725                  "start": {
4726                    "line": 1,
4727                    "column": 1
4728                  },
4729                  "end": {
4730                    "line": 1,
4731                    "column": 1
4732                  }
4733                }
4734              },
4735              "loc": {
4736                "start": {
4737                  "line": 1,
4738                  "column": 1
4739                },
4740                "end": {
4741                  "line": 1,
4742                  "column": 1
4743                }
4744              }
4745            },
4746            "loc": {
4747              "start": {
4748                "line": 1,
4749                "column": 1
4750              },
4751              "end": {
4752                "line": 1,
4753                "column": 1
4754              }
4755            }
4756          },
4757          "overloads": [],
4758          "decorators": [],
4759          "loc": {
4760            "start": {
4761              "line": 59,
4762              "column": 2
4763            },
4764            "end": {
4765              "line": 59,
4766              "column": 2
4767            }
4768          }
4769        },
4770        "body": [],
4771        "loc": {
4772          "start": {
4773            "line": 57,
4774            "column": 80
4775          },
4776          "end": {
4777            "line": 59,
4778            "column": 2
4779          }
4780        }
4781      },
4782      "loc": {
4783        "start": {
4784          "line": 57,
4785          "column": 1
4786        },
4787        "end": {
4788          "line": 59,
4789          "column": 2
4790        }
4791      }
4792    },
4793    {
4794      "type": "VariableDeclaration",
4795      "declarations": [
4796        {
4797          "type": "VariableDeclarator",
4798          "id": {
4799            "type": "Identifier",
4800            "name": "a",
4801            "typeAnnotation": {
4802              "type": "TSConstructorType",
4803              "params": [],
4804              "typeParameters": {
4805                "type": "TSTypeParameterDeclaration",
4806                "params": [
4807                  {
4808                    "type": "TSTypeParameter",
4809                    "name": {
4810                      "type": "Identifier",
4811                      "name": "A",
4812                      "decorators": [],
4813                      "loc": {
4814                        "start": {
4815                          "line": 61,
4816                          "column": 13
4817                        },
4818                        "end": {
4819                          "line": 61,
4820                          "column": 14
4821                        }
4822                      }
4823                    },
4824                    "loc": {
4825                      "start": {
4826                        "line": 61,
4827                        "column": 13
4828                      },
4829                      "end": {
4830                        "line": 61,
4831                        "column": 15
4832                      }
4833                    }
4834                  }
4835                ],
4836                "loc": {
4837                  "start": {
4838                    "line": 61,
4839                    "column": 12
4840                  },
4841                  "end": {
4842                    "line": 61,
4843                    "column": 15
4844                  }
4845                }
4846              },
4847              "returnType": {
4848                "type": "TSFunctionType",
4849                "params": [],
4850                "typeParameters": {
4851                  "type": "TSTypeParameterDeclaration",
4852                  "params": [
4853                    {
4854                      "type": "TSTypeParameter",
4855                      "name": {
4856                        "type": "Identifier",
4857                        "name": "B",
4858                        "decorators": [],
4859                        "loc": {
4860                          "start": {
4861                            "line": 61,
4862                            "column": 22
4863                          },
4864                          "end": {
4865                            "line": 61,
4866                            "column": 23
4867                          }
4868                        }
4869                      },
4870                      "loc": {
4871                        "start": {
4872                          "line": 61,
4873                          "column": 22
4874                        },
4875                        "end": {
4876                          "line": 61,
4877                          "column": 24
4878                        }
4879                      }
4880                    }
4881                  ],
4882                  "loc": {
4883                    "start": {
4884                      "line": 61,
4885                      "column": 21
4886                    },
4887                    "end": {
4888                      "line": 61,
4889                      "column": 24
4890                    }
4891                  }
4892                },
4893                "returnType": {
4894                  "type": "TSStringKeyword",
4895                  "loc": {
4896                    "start": {
4897                      "line": 61,
4898                      "column": 30
4899                    },
4900                    "end": {
4901                      "line": 61,
4902                      "column": 36
4903                    }
4904                  }
4905                },
4906                "loc": {
4907                  "start": {
4908                    "line": 61,
4909                    "column": 21
4910                  },
4911                  "end": {
4912                    "line": 61,
4913                    "column": 36
4914                  }
4915                }
4916              },
4917              "loc": {
4918                "start": {
4919                  "line": 61,
4920                  "column": 8
4921                },
4922                "end": {
4923                  "line": 61,
4924                  "column": 36
4925                }
4926              }
4927            },
4928            "decorators": [],
4929            "loc": {
4930              "start": {
4931                "line": 61,
4932                "column": 5
4933              },
4934              "end": {
4935                "line": 61,
4936                "column": 6
4937              }
4938            }
4939          },
4940          "init": null,
4941          "loc": {
4942            "start": {
4943              "line": 61,
4944              "column": 5
4945            },
4946            "end": {
4947              "line": 61,
4948              "column": 6
4949            }
4950          }
4951        }
4952      ],
4953      "kind": "var",
4954      "loc": {
4955        "start": {
4956          "line": 61,
4957          "column": 1
4958        },
4959        "end": {
4960          "line": 61,
4961          "column": 37
4962        }
4963      }
4964    },
4965    {
4966      "type": "VariableDeclaration",
4967      "declarations": [
4968        {
4969          "type": "VariableDeclarator",
4970          "id": {
4971            "type": "Identifier",
4972            "name": "b",
4973            "typeAnnotation": {
4974              "type": "TSFunctionType",
4975              "params": [
4976                {
4977                  "type": "Identifier",
4978                  "name": "a",
4979                  "typeAnnotation": {
4980                    "type": "TSUnionType",
4981                    "types": [
4982                      {
4983                        "type": "TSNumberKeyword",
4984                        "loc": {
4985                          "start": {
4986                            "line": 62,
4987                            "column": 32
4988                          },
4989                          "end": {
4990                            "line": 62,
4991                            "column": 38
4992                          }
4993                        }
4994                      },
4995                      {
4996                        "type": "TSStringKeyword",
4997                        "loc": {
4998                          "start": {
4999                            "line": 62,
5000                            "column": 41
5001                          },
5002                          "end": {
5003                            "line": 62,
5004                            "column": 47
5005                          }
5006                        }
5007                      }
5008                    ],
5009                    "loc": {
5010                      "start": {
5011                        "line": 62,
5012                        "column": 32
5013                      },
5014                      "end": {
5015                        "line": 62,
5016                        "column": 47
5017                      }
5018                    }
5019                  },
5020                  "decorators": [],
5021                  "loc": {
5022                    "start": {
5023                      "line": 62,
5024                      "column": 29
5025                    },
5026                    "end": {
5027                      "line": 62,
5028                      "column": 30
5029                    }
5030                  }
5031                }
5032              ],
5033              "typeParameters": {
5034                "type": "TSTypeParameterDeclaration",
5035                "params": [
5036                  {
5037                    "type": "TSTypeParameter",
5038                    "name": {
5039                      "type": "Identifier",
5040                      "name": "A",
5041                      "decorators": [],
5042                      "loc": {
5043                        "start": {
5044                          "line": 62,
5045                          "column": 9
5046                        },
5047                        "end": {
5048                          "line": 62,
5049                          "column": 10
5050                        }
5051                      }
5052                    },
5053                    "constraint": {
5054                      "type": "TSTypeReference",
5055                      "typeName": {
5056                        "type": "Identifier",
5057                        "name": "T",
5058                        "decorators": [],
5059                        "loc": {
5060                          "start": {
5061                            "line": 62,
5062                            "column": 19
5063                          },
5064                          "end": {
5065                            "line": 62,
5066                            "column": 20
5067                          }
5068                        }
5069                      },
5070                      "loc": {
5071                        "start": {
5072                          "line": 62,
5073                          "column": 19
5074                        },
5075                        "end": {
5076                          "line": 62,
5077                          "column": 20
5078                        }
5079                      }
5080                    },
5081                    "loc": {
5082                      "start": {
5083                        "line": 62,
5084                        "column": 9
5085                      },
5086                      "end": {
5087                        "line": 62,
5088                        "column": 21
5089                      }
5090                    }
5091                  },
5092                  {
5093                    "type": "TSTypeParameter",
5094                    "name": {
5095                      "type": "Identifier",
5096                      "name": "U",
5097                      "decorators": [],
5098                      "loc": {
5099                        "start": {
5100                          "line": 62,
5101                          "column": 22
5102                        },
5103                        "end": {
5104                          "line": 62,
5105                          "column": 23
5106                        }
5107                      }
5108                    },
5109                    "default": {
5110                      "type": "TSLiteralType",
5111                      "literal": {
5112                        "type": "NumberLiteral",
5113                        "value": 5,
5114                        "loc": {
5115                          "start": {
5116                            "line": 62,
5117                            "column": 26
5118                          },
5119                          "end": {
5120                            "line": 62,
5121                            "column": 27
5122                          }
5123                        }
5124                      },
5125                      "loc": {
5126                        "start": {
5127                          "line": 62,
5128                          "column": 26
5129                        },
5130                        "end": {
5131                          "line": 62,
5132                          "column": 27
5133                        }
5134                      }
5135                    },
5136                    "loc": {
5137                      "start": {
5138                        "line": 62,
5139                        "column": 22
5140                      },
5141                      "end": {
5142                        "line": 62,
5143                        "column": 28
5144                      }
5145                    }
5146                  }
5147                ],
5148                "loc": {
5149                  "start": {
5150                    "line": 62,
5151                    "column": 8
5152                  },
5153                  "end": {
5154                    "line": 62,
5155                    "column": 28
5156                  }
5157                }
5158              },
5159              "returnType": {
5160                "type": "TSTypeLiteral",
5161                "members": [
5162                  {
5163                    "type": "TSPropertySignature",
5164                    "computed": false,
5165                    "optional": false,
5166                    "readonly": false,
5167                    "key": {
5168                      "type": "Identifier",
5169                      "name": "a",
5170                      "decorators": [],
5171                      "loc": {
5172                        "start": {
5173                          "line": 62,
5174                          "column": 54
5175                        },
5176                        "end": {
5177                          "line": 62,
5178                          "column": 55
5179                        }
5180                      }
5181                    },
5182                    "typeAnnotation": {
5183                      "type": "TSNumberKeyword",
5184                      "loc": {
5185                        "start": {
5186                          "line": 62,
5187                          "column": 57
5188                        },
5189                        "end": {
5190                          "line": 62,
5191                          "column": 63
5192                        }
5193                      }
5194                    },
5195                    "loc": {
5196                      "start": {
5197                        "line": 62,
5198                        "column": 54
5199                      },
5200                      "end": {
5201                        "line": 62,
5202                        "column": 65
5203                      }
5204                    }
5205                  }
5206                ],
5207                "loc": {
5208                  "start": {
5209                    "line": 62,
5210                    "column": 52
5211                  },
5212                  "end": {
5213                    "line": 62,
5214                    "column": 65
5215                  }
5216                }
5217              },
5218              "loc": {
5219                "start": {
5220                  "line": 62,
5221                  "column": 8
5222                },
5223                "end": {
5224                  "line": 62,
5225                  "column": 65
5226                }
5227              }
5228            },
5229            "decorators": [],
5230            "loc": {
5231              "start": {
5232                "line": 62,
5233                "column": 5
5234              },
5235              "end": {
5236                "line": 62,
5237                "column": 6
5238              }
5239            }
5240          },
5241          "init": null,
5242          "loc": {
5243            "start": {
5244              "line": 62,
5245              "column": 5
5246            },
5247            "end": {
5248              "line": 62,
5249              "column": 6
5250            }
5251          }
5252        }
5253      ],
5254      "kind": "var",
5255      "loc": {
5256        "start": {
5257          "line": 62,
5258          "column": 1
5259        },
5260        "end": {
5261          "line": 62,
5262          "column": 66
5263        }
5264      }
5265    },
5266    {
5267      "type": "VariableDeclaration",
5268      "declarations": [
5269        {
5270          "type": "VariableDeclarator",
5271          "id": {
5272            "type": "Identifier",
5273            "name": "c",
5274            "typeAnnotation": {
5275              "type": "TSIndexedAccessType",
5276              "objectType": {
5277                "type": "TSTypeReference",
5278                "typeName": {
5279                  "type": "TSQualifiedName",
5280                  "left": {
5281                    "type": "Identifier",
5282                    "name": "B",
5283                    "decorators": [],
5284                    "loc": {
5285                      "start": {
5286                        "line": 64,
5287                        "column": 8
5288                      },
5289                      "end": {
5290                        "line": 64,
5291                        "column": 9
5292                      }
5293                    }
5294                  },
5295                  "right": {
5296                    "type": "Identifier",
5297                    "name": "T",
5298                    "decorators": [],
5299                    "loc": {
5300                      "start": {
5301                        "line": 64,
5302                        "column": 10
5303                      },
5304                      "end": {
5305                        "line": 64,
5306                        "column": 11
5307                      }
5308                    }
5309                  },
5310                  "loc": {
5311                    "start": {
5312                      "line": 64,
5313                      "column": 8
5314                    },
5315                    "end": {
5316                      "line": 64,
5317                      "column": 12
5318                    }
5319                  }
5320                },
5321                "typeParameters": {
5322                  "type": "TSTypeParameterInstantiation",
5323                  "params": [
5324                    {
5325                      "type": "TSTypeReference",
5326                      "typeName": {
5327                        "type": "Identifier",
5328                        "name": "A",
5329                        "decorators": [],
5330                        "loc": {
5331                          "start": {
5332                            "line": 64,
5333                            "column": 12
5334                          },
5335                          "end": {
5336                            "line": 64,
5337                            "column": 13
5338                          }
5339                        }
5340                      },
5341                      "typeParameters": {
5342                        "type": "TSTypeParameterInstantiation",
5343                        "params": [
5344                          {
5345                            "type": "TSTypeReference",
5346                            "typeName": {
5347                              "type": "Identifier",
5348                              "name": "C",
5349                              "decorators": [],
5350                              "loc": {
5351                                "start": {
5352                                  "line": 64,
5353                                  "column": 14
5354                                },
5355                                "end": {
5356                                  "line": 64,
5357                                  "column": 15
5358                                }
5359                              }
5360                            },
5361                            "typeParameters": {
5362                              "type": "TSTypeParameterInstantiation",
5363                              "params": [
5364                                {
5365                                  "type": "TSNumberKeyword",
5366                                  "loc": {
5367                                    "start": {
5368                                      "line": 64,
5369                                      "column": 16
5370                                    },
5371                                    "end": {
5372                                      "line": 64,
5373                                      "column": 22
5374                                    }
5375                                  }
5376                                }
5377                              ],
5378                              "loc": {
5379                                "start": {
5380                                  "line": 64,
5381                                  "column": 14
5382                                },
5383                                "end": {
5384                                  "line": 64,
5385                                  "column": 25
5386                                }
5387                              }
5388                            },
5389                            "loc": {
5390                              "start": {
5391                                "line": 64,
5392                                "column": 14
5393                              },
5394                              "end": {
5395                                "line": 64,
5396                                "column": 15
5397                              }
5398                            }
5399                          }
5400                        ],
5401                        "loc": {
5402                          "start": {
5403                            "line": 64,
5404                            "column": 12
5405                          },
5406                          "end": {
5407                            "line": 64,
5408                            "column": 25
5409                          }
5410                        }
5411                      },
5412                      "loc": {
5413                        "start": {
5414                          "line": 64,
5415                          "column": 12
5416                        },
5417                        "end": {
5418                          "line": 64,
5419                          "column": 13
5420                        }
5421                      }
5422                    }
5423                  ],
5424                  "loc": {
5425                    "start": {
5426                      "line": 64,
5427                      "column": 11
5428                    },
5429                    "end": {
5430                      "line": 64,
5431                      "column": 25
5432                    }
5433                  }
5434                },
5435                "loc": {
5436                  "start": {
5437                    "line": 64,
5438                    "column": 8
5439                  },
5440                  "end": {
5441                    "line": 64,
5442                    "column": 26
5443                  }
5444                }
5445              },
5446              "indexType": {
5447                "type": "TSLiteralType",
5448                "literal": {
5449                  "type": "NumberLiteral",
5450                  "value": 0,
5451                  "loc": {
5452                    "start": {
5453                      "line": 64,
5454                      "column": 26
5455                    },
5456                    "end": {
5457                      "line": 64,
5458                      "column": 27
5459                    }
5460                  }
5461                },
5462                "loc": {
5463                  "start": {
5464                    "line": 64,
5465                    "column": 26
5466                  },
5467                  "end": {
5468                    "line": 64,
5469                    "column": 27
5470                  }
5471                }
5472              },
5473              "loc": {
5474                "start": {
5475                  "line": 64,
5476                  "column": 8
5477                },
5478                "end": {
5479                  "line": 64,
5480                  "column": 29
5481                }
5482              }
5483            },
5484            "decorators": [],
5485            "loc": {
5486              "start": {
5487                "line": 64,
5488                "column": 5
5489              },
5490              "end": {
5491                "line": 64,
5492                "column": 6
5493              }
5494            }
5495          },
5496          "init": null,
5497          "loc": {
5498            "start": {
5499              "line": 64,
5500              "column": 5
5501            },
5502            "end": {
5503              "line": 64,
5504              "column": 6
5505            }
5506          }
5507        }
5508      ],
5509      "kind": "var",
5510      "loc": {
5511        "start": {
5512          "line": 64,
5513          "column": 1
5514        },
5515        "end": {
5516          "line": 64,
5517          "column": 29
5518        }
5519      }
5520    },
5521    {
5522      "type": "VariableDeclaration",
5523      "declarations": [
5524        {
5525          "type": "VariableDeclarator",
5526          "id": {
5527            "type": "Identifier",
5528            "name": "d",
5529            "typeAnnotation": {
5530              "type": "TSTypeReference",
5531              "typeName": {
5532                "type": "Identifier",
5533                "name": "A",
5534                "decorators": [],
5535                "loc": {
5536                  "start": {
5537                    "line": 65,
5538                    "column": 8
5539                  },
5540                  "end": {
5541                    "line": 65,
5542                    "column": 9
5543                  }
5544                }
5545              },
5546              "typeParameters": {
5547                "type": "TSTypeParameterInstantiation",
5548                "params": [
5549                  {
5550                    "type": "TSNumberKeyword",
5551                    "loc": {
5552                      "start": {
5553                        "line": 65,
5554                        "column": 10
5555                      },
5556                      "end": {
5557                        "line": 65,
5558                        "column": 16
5559                      }
5560                    }
5561                  },
5562                  {
5563                    "type": "TSTypeLiteral",
5564                    "members": [
5565                      {
5566                        "type": "TSPropertySignature",
5567                        "computed": false,
5568                        "optional": false,
5569                        "readonly": false,
5570                        "key": {
5571                          "type": "Identifier",
5572                          "name": "a",
5573                          "decorators": [],
5574                          "loc": {
5575                            "start": {
5576                              "line": 65,
5577                              "column": 20
5578                            },
5579                            "end": {
5580                              "line": 65,
5581                              "column": 21
5582                            }
5583                          }
5584                        },
5585                        "typeAnnotation": {
5586                          "type": "TSNumberKeyword",
5587                          "loc": {
5588                            "start": {
5589                              "line": 65,
5590                              "column": 23
5591                            },
5592                            "end": {
5593                              "line": 65,
5594                              "column": 29
5595                            }
5596                          }
5597                        },
5598                        "loc": {
5599                          "start": {
5600                            "line": 65,
5601                            "column": 20
5602                          },
5603                          "end": {
5604                            "line": 65,
5605                            "column": 30
5606                          }
5607                        }
5608                      },
5609                      {
5610                        "type": "TSPropertySignature",
5611                        "computed": false,
5612                        "optional": false,
5613                        "readonly": false,
5614                        "key": {
5615                          "type": "Identifier",
5616                          "name": "b",
5617                          "decorators": [],
5618                          "loc": {
5619                            "start": {
5620                              "line": 65,
5621                              "column": 31
5622                            },
5623                            "end": {
5624                              "line": 65,
5625                              "column": 32
5626                            }
5627                          }
5628                        },
5629                        "typeAnnotation": {
5630                          "type": "TSStringKeyword",
5631                          "loc": {
5632                            "start": {
5633                              "line": 65,
5634                              "column": 34
5635                            },
5636                            "end": {
5637                              "line": 65,
5638                              "column": 40
5639                            }
5640                          }
5641                        },
5642                        "loc": {
5643                          "start": {
5644                            "line": 65,
5645                            "column": 31
5646                          },
5647                          "end": {
5648                            "line": 65,
5649                            "column": 42
5650                          }
5651                        }
5652                      }
5653                    ],
5654                    "loc": {
5655                      "start": {
5656                        "line": 65,
5657                        "column": 18
5658                      },
5659                      "end": {
5660                        "line": 65,
5661                        "column": 42
5662                      }
5663                    }
5664                  },
5665                  {
5666                    "type": "TSTupleType",
5667                    "elementTypes": [
5668                      {
5669                        "type": "TSNumberKeyword",
5670                        "loc": {
5671                          "start": {
5672                            "line": 65,
5673                            "column": 45
5674                          },
5675                          "end": {
5676                            "line": 65,
5677                            "column": 52
5678                          }
5679                        }
5680                      },
5681                      {
5682                        "type": "TSStringKeyword",
5683                        "loc": {
5684                          "start": {
5685                            "line": 65,
5686                            "column": 53
5687                          },
5688                          "end": {
5689                            "line": 65,
5690                            "column": 60
5691                          }
5692                        }
5693                      }
5694                    ],
5695                    "loc": {
5696                      "start": {
5697                        "line": 65,
5698                        "column": 44
5699                      },
5700                      "end": {
5701                        "line": 65,
5702                        "column": 60
5703                      }
5704                    }
5705                  }
5706                ],
5707                "loc": {
5708                  "start": {
5709                    "line": 65,
5710                    "column": 8
5711                  },
5712                  "end": {
5713                    "line": 65,
5714                    "column": 61
5715                  }
5716                }
5717              },
5718              "loc": {
5719                "start": {
5720                  "line": 65,
5721                  "column": 8
5722                },
5723                "end": {
5724                  "line": 65,
5725                  "column": 9
5726                }
5727              }
5728            },
5729            "decorators": [],
5730            "loc": {
5731              "start": {
5732                "line": 65,
5733                "column": 5
5734              },
5735              "end": {
5736                "line": 65,
5737                "column": 6
5738              }
5739            }
5740          },
5741          "init": null,
5742          "loc": {
5743            "start": {
5744              "line": 65,
5745              "column": 5
5746            },
5747            "end": {
5748              "line": 65,
5749              "column": 6
5750            }
5751          }
5752        }
5753      ],
5754      "kind": "var",
5755      "loc": {
5756        "start": {
5757          "line": 65,
5758          "column": 1
5759        },
5760        "end": {
5761          "line": 65,
5762          "column": 62
5763        }
5764      }
5765    },
5766    {
5767      "type": "VariableDeclaration",
5768      "declarations": [
5769        {
5770          "type": "VariableDeclarator",
5771          "id": {
5772            "type": "Identifier",
5773            "name": "e",
5774            "typeAnnotation": {
5775              "type": "TSTypeReference",
5776              "typeName": {
5777                "type": "Identifier",
5778                "name": "T",
5779                "decorators": [],
5780                "loc": {
5781                  "start": {
5782                    "line": 66,
5783                    "column": 8
5784                  },
5785                  "end": {
5786                    "line": 66,
5787                    "column": 9
5788                  }
5789                }
5790              },
5791              "typeParameters": {
5792                "type": "TSTypeParameterInstantiation",
5793                "params": [
5794                  {
5795                    "type": "TSFunctionType",
5796                    "params": [],
5797                    "typeParameters": {
5798                      "type": "TSTypeParameterDeclaration",
5799                      "params": [
5800                        {
5801                          "type": "TSTypeParameter",
5802                          "name": {
5803                            "type": "Identifier",
5804                            "name": "A",
5805                            "decorators": [],
5806                            "loc": {
5807                              "start": {
5808                                "line": 66,
5809                                "column": 11
5810                              },
5811                              "end": {
5812                                "line": 66,
5813                                "column": 12
5814                              }
5815                            }
5816                          },
5817                          "loc": {
5818                            "start": {
5819                              "line": 66,
5820                              "column": 11
5821                            },
5822                            "end": {
5823                              "line": 66,
5824                              "column": 13
5825                            }
5826                          }
5827                        }
5828                      ],
5829                      "loc": {
5830                        "start": {
5831                          "line": 66,
5832                          "column": 10
5833                        },
5834                        "end": {
5835                          "line": 66,
5836                          "column": 13
5837                        }
5838                      }
5839                    },
5840                    "returnType": {
5841                      "type": "TSTypeLiteral",
5842                      "members": [],
5843                      "loc": {
5844                        "start": {
5845                          "line": 66,
5846                          "column": 19
5847                        },
5848                        "end": {
5849                          "line": 66,
5850                          "column": 21
5851                        }
5852                      }
5853                    },
5854                    "loc": {
5855                      "start": {
5856                        "line": 66,
5857                        "column": 10
5858                      },
5859                      "end": {
5860                        "line": 66,
5861                        "column": 21
5862                      }
5863                    }
5864                  }
5865                ],
5866                "loc": {
5867                  "start": {
5868                    "line": 66,
5869                    "column": 8
5870                  },
5871                  "end": {
5872                    "line": 66,
5873                    "column": 22
5874                  }
5875                }
5876              },
5877              "loc": {
5878                "start": {
5879                  "line": 66,
5880                  "column": 8
5881                },
5882                "end": {
5883                  "line": 66,
5884                  "column": 9
5885                }
5886              }
5887            },
5888            "decorators": [],
5889            "loc": {
5890              "start": {
5891                "line": 66,
5892                "column": 5
5893              },
5894              "end": {
5895                "line": 66,
5896                "column": 6
5897              }
5898            }
5899          },
5900          "init": null,
5901          "loc": {
5902            "start": {
5903              "line": 66,
5904              "column": 5
5905            },
5906            "end": {
5907              "line": 66,
5908              "column": 6
5909            }
5910          }
5911        }
5912      ],
5913      "kind": "var",
5914      "loc": {
5915        "start": {
5916          "line": 66,
5917          "column": 1
5918        },
5919        "end": {
5920          "line": 66,
5921          "column": 23
5922        }
5923      }
5924    },
5925    {
5926      "type": "TSTypeAliasDeclaration",
5927      "id": {
5928        "type": "Identifier",
5929        "name": "E",
5930        "decorators": [],
5931        "loc": {
5932          "start": {
5933            "line": 68,
5934            "column": 6
5935          },
5936          "end": {
5937            "line": 68,
5938            "column": 7
5939          }
5940        }
5941      },
5942      "typeAnnotation": {
5943        "type": "TSUnionType",
5944        "types": [
5945          {
5946            "type": "TSNumberKeyword",
5947            "loc": {
5948              "start": {
5949                "line": 68,
5950                "column": 38
5951              },
5952              "end": {
5953                "line": 68,
5954                "column": 44
5955              }
5956            }
5957          },
5958          {
5959            "type": "TSTypeReference",
5960            "typeName": {
5961              "type": "Identifier",
5962              "name": "T",
5963              "decorators": [],
5964              "loc": {
5965                "start": {
5966                  "line": 68,
5967                  "column": 47
5968                },
5969                "end": {
5970                  "line": 68,
5971                  "column": 48
5972                }
5973              }
5974            },
5975            "loc": {
5976              "start": {
5977                "line": 68,
5978                "column": 47
5979              },
5980              "end": {
5981                "line": 68,
5982                "column": 48
5983              }
5984            }
5985          },
5986          {
5987            "type": "TSStringKeyword",
5988            "loc": {
5989              "start": {
5990                "line": 68,
5991                "column": 51
5992              },
5993              "end": {
5994                "line": 68,
5995                "column": 57
5996              }
5997            }
5998          }
5999        ],
6000        "loc": {
6001          "start": {
6002            "line": 68,
6003            "column": 38
6004          },
6005          "end": {
6006            "line": 68,
6007            "column": 57
6008          }
6009        }
6010      },
6011      "typeParameters": {
6012        "type": "TSTypeParameterDeclaration",
6013        "params": [
6014          {
6015            "type": "TSTypeParameter",
6016            "name": {
6017              "type": "Identifier",
6018              "name": "R",
6019              "decorators": [],
6020              "loc": {
6021                "start": {
6022                  "line": 68,
6023                  "column": 8
6024                },
6025                "end": {
6026                  "line": 68,
6027                  "column": 9
6028                }
6029              }
6030            },
6031            "constraint": {
6032              "type": "TSTypeReference",
6033              "typeName": {
6034                "type": "Identifier",
6035                "name": "B",
6036                "decorators": [],
6037                "loc": {
6038                  "start": {
6039                    "line": 68,
6040                    "column": 18
6041                  },
6042                  "end": {
6043                    "line": 68,
6044                    "column": 19
6045                  }
6046                }
6047              },
6048              "loc": {
6049                "start": {
6050                  "line": 68,
6051                  "column": 18
6052                },
6053                "end": {
6054                  "line": 68,
6055                  "column": 19
6056                }
6057              }
6058            },
6059            "loc": {
6060              "start": {
6061                "line": 68,
6062                "column": 8
6063              },
6064              "end": {
6065                "line": 68,
6066                "column": 20
6067              }
6068            }
6069          },
6070          {
6071            "type": "TSTypeParameter",
6072            "name": {
6073              "type": "Identifier",
6074              "name": "C",
6075              "decorators": [],
6076              "loc": {
6077                "start": {
6078                  "line": 68,
6079                  "column": 21
6080                },
6081                "end": {
6082                  "line": 68,
6083                  "column": 22
6084                }
6085              }
6086            },
6087            "loc": {
6088              "start": {
6089                "line": 68,
6090                "column": 21
6091              },
6092              "end": {
6093                "line": 68,
6094                "column": 23
6095              }
6096            }
6097          },
6098          {
6099            "type": "TSTypeParameter",
6100            "name": {
6101              "type": "Identifier",
6102              "name": "T",
6103              "decorators": [],
6104              "loc": {
6105                "start": {
6106                  "line": 68,
6107                  "column": 24
6108                },
6109                "end": {
6110                  "line": 68,
6111                  "column": 25
6112                }
6113              }
6114            },
6115            "default": {
6116              "type": "TSNumberKeyword",
6117              "loc": {
6118                "start": {
6119                  "line": 68,
6120                  "column": 28
6121                },
6122                "end": {
6123                  "line": 68,
6124                  "column": 34
6125                }
6126              }
6127            },
6128            "loc": {
6129              "start": {
6130                "line": 68,
6131                "column": 24
6132              },
6133              "end": {
6134                "line": 68,
6135                "column": 35
6136              }
6137            }
6138          }
6139        ],
6140        "loc": {
6141          "start": {
6142            "line": 68,
6143            "column": 7
6144          },
6145          "end": {
6146            "line": 68,
6147            "column": 35
6148          }
6149        }
6150      },
6151      "loc": {
6152        "start": {
6153          "line": 68,
6154          "column": 1
6155        },
6156        "end": {
6157          "line": 68,
6158          "column": 58
6159        }
6160      }
6161    },
6162    {
6163      "type": "EmptyStatement",
6164      "loc": {
6165        "start": {
6166          "line": 68,
6167          "column": 57
6168        },
6169        "end": {
6170          "line": 68,
6171          "column": 58
6172        }
6173      }
6174    },
6175    {
6176      "type": "TSTypeAliasDeclaration",
6177      "id": {
6178        "type": "Identifier",
6179        "name": "P",
6180        "decorators": [],
6181        "loc": {
6182          "start": {
6183            "line": 69,
6184            "column": 6
6185          },
6186          "end": {
6187            "line": 69,
6188            "column": 7
6189          }
6190        }
6191      },
6192      "typeAnnotation": {
6193        "type": "TSTypeLiteral",
6194        "members": [
6195          {
6196            "type": "TSPropertySignature",
6197            "computed": false,
6198            "optional": false,
6199            "readonly": false,
6200            "key": {
6201              "type": "Identifier",
6202              "name": "a",
6203              "decorators": [],
6204              "loc": {
6205                "start": {
6206                  "line": 69,
6207                  "column": 52
6208                },
6209                "end": {
6210                  "line": 69,
6211                  "column": 53
6212                }
6213              }
6214            },
6215            "typeAnnotation": {
6216              "type": "TSTypeReference",
6217              "typeName": {
6218                "type": "Identifier",
6219                "name": "K",
6220                "decorators": [],
6221                "loc": {
6222                  "start": {
6223                    "line": 69,
6224                    "column": 54
6225                  },
6226                  "end": {
6227                    "line": 69,
6228                    "column": 55
6229                  }
6230                }
6231              },
6232              "loc": {
6233                "start": {
6234                  "line": 69,
6235                  "column": 54
6236                },
6237                "end": {
6238                  "line": 69,
6239                  "column": 55
6240                }
6241              }
6242            },
6243            "loc": {
6244              "start": {
6245                "line": 69,
6246                "column": 52
6247              },
6248              "end": {
6249                "line": 69,
6250                "column": 56
6251              }
6252            }
6253          },
6254          {
6255            "type": "TSPropertySignature",
6256            "computed": false,
6257            "optional": false,
6258            "readonly": false,
6259            "key": {
6260              "type": "Identifier",
6261              "name": "b",
6262              "decorators": [],
6263              "loc": {
6264                "start": {
6265                  "line": 69,
6266                  "column": 57
6267                },
6268                "end": {
6269                  "line": 69,
6270                  "column": 58
6271                }
6272              }
6273            },
6274            "typeAnnotation": {
6275              "type": "TSTypeReference",
6276              "typeName": {
6277                "type": "Identifier",
6278                "name": "Q",
6279                "decorators": [],
6280                "loc": {
6281                  "start": {
6282                    "line": 69,
6283                    "column": 59
6284                  },
6285                  "end": {
6286                    "line": 69,
6287                    "column": 60
6288                  }
6289                }
6290              },
6291              "loc": {
6292                "start": {
6293                  "line": 69,
6294                  "column": 59
6295                },
6296                "end": {
6297                  "line": 69,
6298                  "column": 60
6299                }
6300              }
6301            },
6302            "loc": {
6303              "start": {
6304                "line": 69,
6305                "column": 57
6306              },
6307              "end": {
6308                "line": 69,
6309                "column": 61
6310              }
6311            }
6312          }
6313        ],
6314        "loc": {
6315          "start": {
6316            "line": 69,
6317            "column": 51
6318          },
6319          "end": {
6320            "line": 69,
6321            "column": 61
6322          }
6323        }
6324      },
6325      "typeParameters": {
6326        "type": "TSTypeParameterDeclaration",
6327        "params": [
6328          {
6329            "type": "TSTypeParameter",
6330            "name": {
6331              "type": "Identifier",
6332              "name": "K",
6333              "decorators": [],
6334              "loc": {
6335                "start": {
6336                  "line": 69,
6337                  "column": 8
6338                },
6339                "end": {
6340                  "line": 69,
6341                  "column": 9
6342                }
6343              }
6344            },
6345            "loc": {
6346              "start": {
6347                "line": 69,
6348                "column": 8
6349              },
6350              "end": {
6351                "line": 69,
6352                "column": 10
6353              }
6354            }
6355          },
6356          {
6357            "type": "TSTypeParameter",
6358            "name": {
6359              "type": "Identifier",
6360              "name": "Q",
6361              "decorators": [],
6362              "loc": {
6363                "start": {
6364                  "line": 69,
6365                  "column": 11
6366                },
6367                "end": {
6368                  "line": 69,
6369                  "column": 12
6370                }
6371              }
6372            },
6373            "default": {
6374              "type": "TSUnionType",
6375              "types": [
6376                {
6377                  "type": "TSTupleType",
6378                  "elementTypes": [
6379                    {
6380                      "type": "TSNumberKeyword",
6381                      "loc": {
6382                        "start": {
6383                          "line": 69,
6384                          "column": 16
6385                        },
6386                        "end": {
6387                          "line": 69,
6388                          "column": 23
6389                        }
6390                      }
6391                    },
6392                    {
6393                      "type": "TSNumberKeyword",
6394                      "loc": {
6395                        "start": {
6396                          "line": 69,
6397                          "column": 24
6398                        },
6399                        "end": {
6400                          "line": 69,
6401                          "column": 31
6402                        }
6403                      }
6404                    },
6405                    {
6406                      "type": "TSStringKeyword",
6407                      "loc": {
6408                        "start": {
6409                          "line": 69,
6410                          "column": 32
6411                        },
6412                        "end": {
6413                          "line": 69,
6414                          "column": 39
6415                        }
6416                      }
6417                    }
6418                  ],
6419                  "loc": {
6420                    "start": {
6421                      "line": 69,
6422                      "column": 15
6423                    },
6424                    "end": {
6425                      "line": 69,
6426                      "column": 39
6427                    }
6428                  }
6429                },
6430                {
6431                  "type": "TSArrayType",
6432                  "elementType": {
6433                    "type": "TSAnyKeyword",
6434                    "loc": {
6435                      "start": {
6436                        "line": 69,
6437                        "column": 42
6438                      },
6439                      "end": {
6440                        "line": 69,
6441                        "column": 45
6442                      }
6443                    }
6444                  },
6445                  "loc": {
6446                    "start": {
6447                      "line": 69,
6448                      "column": 42
6449                    },
6450                    "end": {
6451                      "line": 69,
6452                      "column": 47
6453                    }
6454                  }
6455                }
6456              ],
6457              "loc": {
6458                "start": {
6459                  "line": 69,
6460                  "column": 15
6461                },
6462                "end": {
6463                  "line": 69,
6464                  "column": 47
6465                }
6466              }
6467            },
6468            "loc": {
6469              "start": {
6470                "line": 69,
6471                "column": 11
6472              },
6473              "end": {
6474                "line": 69,
6475                "column": 48
6476              }
6477            }
6478          }
6479        ],
6480        "loc": {
6481          "start": {
6482            "line": 69,
6483            "column": 7
6484          },
6485          "end": {
6486            "line": 69,
6487            "column": 48
6488          }
6489        }
6490      },
6491      "loc": {
6492        "start": {
6493          "line": 69,
6494          "column": 1
6495        },
6496        "end": {
6497          "line": 69,
6498          "column": 62
6499        }
6500      }
6501    },
6502    {
6503      "type": "EmptyStatement",
6504      "loc": {
6505        "start": {
6506          "line": 69,
6507          "column": 61
6508        },
6509        "end": {
6510          "line": 69,
6511          "column": 62
6512        }
6513      }
6514    },
6515    {
6516      "type": "ExpressionStatement",
6517      "expression": {
6518        "type": "CallExpression",
6519        "callee": {
6520          "type": "Identifier",
6521          "name": "async",
6522          "decorators": [],
6523          "loc": {
6524            "start": {
6525              "line": 71,
6526              "column": 1
6527            },
6528            "end": {
6529              "line": 71,
6530              "column": 6
6531            }
6532          }
6533        },
6534        "arguments": [],
6535        "optional": false,
6536        "typeParameters": {
6537          "type": "TSTypeParameterInstantiation",
6538          "params": [
6539            {
6540              "type": "TSFunctionType",
6541              "params": [],
6542              "typeParameters": {
6543                "type": "TSTypeParameterDeclaration",
6544                "params": [
6545                  {
6546                    "type": "TSTypeParameter",
6547                    "name": {
6548                      "type": "Identifier",
6549                      "name": "A",
6550                      "decorators": [],
6551                      "loc": {
6552                        "start": {
6553                          "line": 71,
6554                          "column": 8
6555                        },
6556                        "end": {
6557                          "line": 71,
6558                          "column": 9
6559                        }
6560                      }
6561                    },
6562                    "loc": {
6563                      "start": {
6564                        "line": 71,
6565                        "column": 8
6566                      },
6567                      "end": {
6568                        "line": 71,
6569                        "column": 10
6570                      }
6571                    }
6572                  }
6573                ],
6574                "loc": {
6575                  "start": {
6576                    "line": 71,
6577                    "column": 7
6578                  },
6579                  "end": {
6580                    "line": 71,
6581                    "column": 10
6582                  }
6583                }
6584              },
6585              "returnType": {
6586                "type": "TSTypeLiteral",
6587                "members": [],
6588                "loc": {
6589                  "start": {
6590                    "line": 71,
6591                    "column": 16
6592                  },
6593                  "end": {
6594                    "line": 71,
6595                    "column": 18
6596                  }
6597                }
6598              },
6599              "loc": {
6600                "start": {
6601                  "line": 71,
6602                  "column": 7
6603                },
6604                "end": {
6605                  "line": 71,
6606                  "column": 18
6607                }
6608              }
6609            }
6610          ],
6611          "loc": {
6612            "start": {
6613              "line": 71,
6614              "column": 6
6615            },
6616            "end": {
6617              "line": 71,
6618              "column": 19
6619            }
6620          }
6621        },
6622        "loc": {
6623          "start": {
6624            "line": 71,
6625            "column": 1
6626          },
6627          "end": {
6628            "line": 71,
6629            "column": 21
6630          }
6631        }
6632      },
6633      "loc": {
6634        "start": {
6635          "line": 71,
6636          "column": 1
6637        },
6638        "end": {
6639          "line": 71,
6640          "column": 22
6641        }
6642      }
6643    },
6644    {
6645      "type": "ExpressionStatement",
6646      "expression": {
6647        "type": "CallExpression",
6648        "callee": {
6649          "type": "Identifier",
6650          "name": "p",
6651          "decorators": [],
6652          "loc": {
6653            "start": {
6654              "line": 72,
6655              "column": 1
6656            },
6657            "end": {
6658              "line": 72,
6659              "column": 2
6660            }
6661          }
6662        },
6663        "arguments": [],
6664        "optional": false,
6665        "typeParameters": {
6666          "type": "TSTypeParameterInstantiation",
6667          "params": [
6668            {
6669              "type": "TSNumberKeyword",
6670              "loc": {
6671                "start": {
6672                  "line": 72,
6673                  "column": 3
6674                },
6675                "end": {
6676                  "line": 72,
6677                  "column": 9
6678                }
6679              }
6680            }
6681          ],
6682          "loc": {
6683            "start": {
6684              "line": 72,
6685              "column": 2
6686            },
6687            "end": {
6688              "line": 72,
6689              "column": 10
6690            }
6691          }
6692        },
6693        "loc": {
6694          "start": {
6695            "line": 72,
6696            "column": 1
6697          },
6698          "end": {
6699            "line": 72,
6700            "column": 12
6701          }
6702        }
6703      },
6704      "loc": {
6705        "start": {
6706          "line": 72,
6707          "column": 1
6708        },
6709        "end": {
6710          "line": 72,
6711          "column": 13
6712        }
6713      }
6714    },
6715    {
6716      "type": "ExpressionStatement",
6717      "expression": {
6718        "type": "ArrowFunctionExpression",
6719        "function": {
6720          "type": "ScriptFunction",
6721          "id": null,
6722          "generator": false,
6723          "async": false,
6724          "expression": true,
6725          "params": [],
6726          "returnType": {
6727            "type": "TSNumberKeyword",
6728            "loc": {
6729              "start": {
6730                "line": 73,
6731                "column": 17
6732              },
6733              "end": {
6734                "line": 73,
6735                "column": 23
6736              }
6737            }
6738          },
6739          "typeParameters": {
6740            "type": "TSTypeParameterDeclaration",
6741            "params": [
6742              {
6743                "type": "TSTypeParameter",
6744                "name": {
6745                  "type": "Identifier",
6746                  "name": "A",
6747                  "decorators": [],
6748                  "loc": {
6749                    "start": {
6750                      "line": 73,
6751                      "column": 2
6752                    },
6753                    "end": {
6754                      "line": 73,
6755                      "column": 3
6756                    }
6757                  }
6758                },
6759                "constraint": {
6760                  "type": "TSTypeReference",
6761                  "typeName": {
6762                    "type": "Identifier",
6763                    "name": "B",
6764                    "decorators": [],
6765                    "loc": {
6766                      "start": {
6767                        "line": 73,
6768                        "column": 12
6769                      },
6770                      "end": {
6771                        "line": 73,
6772                        "column": 13
6773                      }
6774                    }
6775                  },
6776                  "loc": {
6777                    "start": {
6778                      "line": 73,
6779                      "column": 12
6780                    },
6781                    "end": {
6782                      "line": 73,
6783                      "column": 13
6784                    }
6785                  }
6786                },
6787                "loc": {
6788                  "start": {
6789                    "line": 73,
6790                    "column": 2
6791                  },
6792                  "end": {
6793                    "line": 73,
6794                    "column": 14
6795                  }
6796                }
6797              }
6798            ],
6799            "loc": {
6800              "start": {
6801                "line": 73,
6802                "column": 1
6803              },
6804              "end": {
6805                "line": 73,
6806                "column": 14
6807              }
6808            }
6809          },
6810          "body": {
6811            "type": "BooleanLiteral",
6812            "value": true,
6813            "loc": {
6814              "start": {
6815                "line": 73,
6816                "column": 27
6817              },
6818              "end": {
6819                "line": 73,
6820                "column": 31
6821              }
6822            }
6823          },
6824          "loc": {
6825            "start": {
6826              "line": 73,
6827              "column": 1
6828            },
6829            "end": {
6830              "line": 73,
6831              "column": 31
6832            }
6833          }
6834        },
6835        "loc": {
6836          "start": {
6837            "line": 73,
6838            "column": 1
6839          },
6840          "end": {
6841            "line": 73,
6842            "column": 31
6843          }
6844        }
6845      },
6846      "loc": {
6847        "start": {
6848          "line": 73,
6849          "column": 1
6850        },
6851        "end": {
6852          "line": 73,
6853          "column": 32
6854        }
6855      }
6856    },
6857    {
6858      "type": "ExpressionStatement",
6859      "expression": {
6860        "type": "ArrowFunctionExpression",
6861        "function": {
6862          "type": "ScriptFunction",
6863          "id": null,
6864          "generator": false,
6865          "async": true,
6866          "expression": false,
6867          "params": [],
6868          "typeParameters": {
6869            "type": "TSTypeParameterDeclaration",
6870            "params": [
6871              {
6872                "type": "TSTypeParameter",
6873                "name": {
6874                  "type": "Identifier",
6875                  "name": "A",
6876                  "decorators": [],
6877                  "loc": {
6878                    "start": {
6879                      "line": 74,
6880                      "column": 7
6881                    },
6882                    "end": {
6883                      "line": 74,
6884                      "column": 8
6885                    }
6886                  }
6887                },
6888                "constraint": {
6889                  "type": "TSTypeOperator",
6890                  "operator": "readonly",
6891                  "typeAnnotation": {
6892                    "type": "TSTupleType",
6893                    "elementTypes": [
6894                      {
6895                        "type": "TSNumberKeyword",
6896                        "loc": {
6897                          "start": {
6898                            "line": 74,
6899                            "column": 27
6900                          },
6901                          "end": {
6902                            "line": 74,
6903                            "column": 34
6904                          }
6905                        }
6906                      },
6907                      {
6908                        "type": "TSStringKeyword",
6909                        "loc": {
6910                          "start": {
6911                            "line": 74,
6912                            "column": 35
6913                          },
6914                          "end": {
6915                            "line": 74,
6916                            "column": 42
6917                          }
6918                        }
6919                      }
6920                    ],
6921                    "loc": {
6922                      "start": {
6923                        "line": 74,
6924                        "column": 26
6925                      },
6926                      "end": {
6927                        "line": 74,
6928                        "column": 42
6929                      }
6930                    }
6931                  },
6932                  "loc": {
6933                    "start": {
6934                      "line": 74,
6935                      "column": 17
6936                    },
6937                    "end": {
6938                      "line": 74,
6939                      "column": 42
6940                    }
6941                  }
6942                },
6943                "loc": {
6944                  "start": {
6945                    "line": 74,
6946                    "column": 7
6947                  },
6948                  "end": {
6949                    "line": 74,
6950                    "column": 43
6951                  }
6952                }
6953              }
6954            ],
6955            "loc": {
6956              "start": {
6957                "line": 74,
6958                "column": 6
6959              },
6960              "end": {
6961                "line": 74,
6962                "column": 43
6963              }
6964            }
6965          },
6966          "body": {
6967            "type": "BlockStatement",
6968            "statements": [
6969              {
6970                "type": "ReturnStatement",
6971                "argument": {
6972                  "type": "StringLiteral",
6973                  "value": "foo",
6974                  "loc": {
6975                    "start": {
6976                      "line": 74,
6977                      "column": 57
6978                    },
6979                    "end": {
6980                      "line": 74,
6981                      "column": 62
6982                    }
6983                  }
6984                },
6985                "loc": {
6986                  "start": {
6987                    "line": 74,
6988                    "column": 50
6989                  },
6990                  "end": {
6991                    "line": 74,
6992                    "column": 63
6993                  }
6994                }
6995              }
6996            ],
6997            "loc": {
6998              "start": {
6999                "line": 74,
7000                "column": 49
7001              },
7002              "end": {
7003                "line": 74,
7004                "column": 64
7005              }
7006            }
7007          },
7008          "loc": {
7009            "start": {
7010              "line": 74,
7011              "column": 1
7012            },
7013            "end": {
7014              "line": 74,
7015              "column": 64
7016            }
7017          }
7018        },
7019        "loc": {
7020          "start": {
7021            "line": 74,
7022            "column": 1
7023          },
7024          "end": {
7025            "line": 74,
7026            "column": 64
7027          }
7028        }
7029      },
7030      "loc": {
7031        "start": {
7032          "line": 74,
7033          "column": 1
7034        },
7035        "end": {
7036          "line": 74,
7037          "column": 65
7038        }
7039      }
7040    }
7041  ],
7042  "loc": {
7043    "start": {
7044      "line": 1,
7045      "column": 1
7046    },
7047    "end": {
7048      "line": 75,
7049      "column": 1
7050    }
7051  }
7052}
7053