{"ast":null,"code":"\"use strict\";\n\n/**\n * This module defines nodes used to define types and validations for objects and interfaces.\n */\n// tslint:disable:no-shadowed-variable prefer-for-of\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.basicTypes = exports.BasicType = exports.TParamList = exports.TParam = exports.param = exports.TFunc = exports.func = exports.TProp = exports.TOptional = exports.opt = exports.TIface = exports.iface = exports.TEnumLiteral = exports.enumlit = exports.TEnumType = exports.enumtype = exports.TIntersection = exports.intersection = exports.TUnion = exports.union = exports.TTuple = exports.tuple = exports.TArray = exports.array = exports.TLiteral = exports.lit = exports.TName = exports.name = exports.TType = void 0;\nvar util_1 = require(\"./util\");\n/** Node that represents a type. */\nvar TType = /** @class */function () {\n  function TType() {}\n  return TType;\n}();\nexports.TType = TType;\n/** Parses a type spec into a TType node. */\nfunction parseSpec(typeSpec) {\n  return typeof typeSpec === \"string\" ? name(typeSpec) : typeSpec;\n}\nfunction getNamedType(suite, name) {\n  var ttype = suite[name];\n  if (!ttype) {\n    throw new Error(\"Unknown type \" + name);\n  }\n  return ttype;\n}\n/**\n * Defines a type name, either built-in, or defined in this suite. It can typically be included in\n * the specs as just a plain string.\n */\nfunction name(value) {\n  return new TName(value);\n}\nexports.name = name;\nvar TName = /** @class */function (_super) {\n  __extends(TName, _super);\n  function TName(name) {\n    var _this = _super.call(this) || this;\n    _this.name = name;\n    _this._failMsg = \"is not a \" + name;\n    return _this;\n  }\n  TName.prototype.getChecker = function (suite, strict, allowedProps) {\n    var _this = this;\n    var ttype = getNamedType(suite, this.name);\n    var checker = ttype.getChecker(suite, strict, allowedProps);\n    if (ttype instanceof BasicType || ttype instanceof TName) {\n      return checker;\n    }\n    // For complex types, add an additional \"is not a <Type>\" message on failure.\n    return function (value, ctx) {\n      return checker(value, ctx) ? true : ctx.fail(null, _this._failMsg, 0);\n    };\n  };\n  return TName;\n}(TType);\nexports.TName = TName;\n/**\n * Defines a literal value, e.g. lit('hello') or lit(123).\n */\nfunction lit(value) {\n  return new TLiteral(value);\n}\nexports.lit = lit;\nvar TLiteral = /** @class */function (_super) {\n  __extends(TLiteral, _super);\n  function TLiteral(value) {\n    var _this = _super.call(this) || this;\n    _this.value = value;\n    _this.name = JSON.stringify(value);\n    _this._failMsg = \"is not \" + _this.name;\n    return _this;\n  }\n  TLiteral.prototype.getChecker = function (suite, strict) {\n    var _this = this;\n    return function (value, ctx) {\n      return value === _this.value ? true : ctx.fail(null, _this._failMsg, -1);\n    };\n  };\n  return TLiteral;\n}(TType);\nexports.TLiteral = TLiteral;\n/**\n * Defines an array type, e.g. array('number').\n */\nfunction array(typeSpec) {\n  return new TArray(parseSpec(typeSpec));\n}\nexports.array = array;\nvar TArray = /** @class */function (_super) {\n  __extends(TArray, _super);\n  function TArray(ttype) {\n    var _this = _super.call(this) || this;\n    _this.ttype = ttype;\n    return _this;\n  }\n  TArray.prototype.getChecker = function (suite, strict) {\n    var itemChecker = this.ttype.getChecker(suite, strict);\n    return function (value, ctx) {\n      if (!Array.isArray(value)) {\n        return ctx.fail(null, \"is not an array\", 0);\n      }\n      for (var i = 0; i < value.length; i++) {\n        var ok = itemChecker(value[i], ctx);\n        if (!ok) {\n          return ctx.fail(i, null, 1);\n        }\n      }\n      return true;\n    };\n  };\n  return TArray;\n}(TType);\nexports.TArray = TArray;\n/**\n * Defines a tuple type, e.g. tuple('string', 'number').\n */\nfunction tuple() {\n  var typeSpec = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    typeSpec[_i] = arguments[_i];\n  }\n  return new TTuple(typeSpec.map(function (t) {\n    return parseSpec(t);\n  }));\n}\nexports.tuple = tuple;\nvar TTuple = /** @class */function (_super) {\n  __extends(TTuple, _super);\n  function TTuple(ttypes) {\n    var _this = _super.call(this) || this;\n    _this.ttypes = ttypes;\n    return _this;\n  }\n  TTuple.prototype.getChecker = function (suite, strict) {\n    var itemCheckers = this.ttypes.map(function (t) {\n      return t.getChecker(suite, strict);\n    });\n    var checker = function (value, ctx) {\n      if (!Array.isArray(value)) {\n        return ctx.fail(null, \"is not an array\", 0);\n      }\n      for (var i = 0; i < itemCheckers.length; i++) {\n        var ok = itemCheckers[i](value[i], ctx);\n        if (!ok) {\n          return ctx.fail(i, null, 1);\n        }\n      }\n      return true;\n    };\n    if (!strict) {\n      return checker;\n    }\n    return function (value, ctx) {\n      if (!checker(value, ctx)) {\n        return false;\n      }\n      return value.length <= itemCheckers.length ? true : ctx.fail(itemCheckers.length, \"is extraneous\", 2);\n    };\n  };\n  return TTuple;\n}(TType);\nexports.TTuple = TTuple;\n/**\n * Defines a union type, e.g. union('number', 'null').\n */\nfunction union() {\n  var typeSpec = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    typeSpec[_i] = arguments[_i];\n  }\n  return new TUnion(typeSpec.map(function (t) {\n    return parseSpec(t);\n  }));\n}\nexports.union = union;\nvar TUnion = /** @class */function (_super) {\n  __extends(TUnion, _super);\n  function TUnion(ttypes) {\n    var _this = _super.call(this) || this;\n    _this.ttypes = ttypes;\n    var names = ttypes.map(function (t) {\n      return t instanceof TName || t instanceof TLiteral ? t.name : null;\n    }).filter(function (n) {\n      return n;\n    });\n    var otherTypes = ttypes.length - names.length;\n    if (names.length) {\n      if (otherTypes > 0) {\n        names.push(otherTypes + \" more\");\n      }\n      _this._failMsg = \"is none of \" + names.join(\", \");\n    } else {\n      _this._failMsg = \"is none of \" + otherTypes + \" types\";\n    }\n    return _this;\n  }\n  TUnion.prototype.getChecker = function (suite, strict) {\n    var _this = this;\n    var itemCheckers = this.ttypes.map(function (t) {\n      return t.getChecker(suite, strict);\n    });\n    return function (value, ctx) {\n      var ur = ctx.unionResolver();\n      for (var i = 0; i < itemCheckers.length; i++) {\n        var ok = itemCheckers[i](value, ur.createContext());\n        if (ok) {\n          return true;\n        }\n      }\n      ctx.resolveUnion(ur);\n      return ctx.fail(null, _this._failMsg, 0);\n    };\n  };\n  return TUnion;\n}(TType);\nexports.TUnion = TUnion;\n/**\n * Defines an intersection type, e.g. intersection('number', 'null').\n */\nfunction intersection() {\n  var typeSpec = [];\n  for (var _i = 0; _i < arguments.length; _i++) {\n    typeSpec[_i] = arguments[_i];\n  }\n  return new TIntersection(typeSpec.map(function (t) {\n    return parseSpec(t);\n  }));\n}\nexports.intersection = intersection;\nvar TIntersection = /** @class */function (_super) {\n  __extends(TIntersection, _super);\n  function TIntersection(ttypes) {\n    var _this = _super.call(this) || this;\n    _this.ttypes = ttypes;\n    return _this;\n  }\n  TIntersection.prototype.getChecker = function (suite, strict) {\n    var allowedProps = new Set();\n    var itemCheckers = this.ttypes.map(function (t) {\n      return t.getChecker(suite, strict, allowedProps);\n    });\n    return function (value, ctx) {\n      var ok = itemCheckers.every(function (checker) {\n        return checker(value, ctx);\n      });\n      if (ok) {\n        return true;\n      }\n      return ctx.fail(null, null, 0);\n    };\n  };\n  return TIntersection;\n}(TType);\nexports.TIntersection = TIntersection;\n/**\n * Defines an enum type, e.g. enum({'A': 1, 'B': 2}).\n */\nfunction enumtype(values) {\n  return new TEnumType(values);\n}\nexports.enumtype = enumtype;\nvar TEnumType = /** @class */function (_super) {\n  __extends(TEnumType, _super);\n  function TEnumType(members) {\n    var _this = _super.call(this) || this;\n    _this.members = members;\n    _this.validValues = new Set();\n    _this._failMsg = \"is not a valid enum value\";\n    _this.validValues = new Set(Object.keys(members).map(function (name) {\n      return members[name];\n    }));\n    return _this;\n  }\n  TEnumType.prototype.getChecker = function (suite, strict) {\n    var _this = this;\n    return function (value, ctx) {\n      return _this.validValues.has(value) ? true : ctx.fail(null, _this._failMsg, 0);\n    };\n  };\n  return TEnumType;\n}(TType);\nexports.TEnumType = TEnumType;\n/**\n * Defines a literal enum value, such as Direction.Up, specified as enumlit(\"Direction\", \"Up\").\n */\nfunction enumlit(name, prop) {\n  return new TEnumLiteral(name, prop);\n}\nexports.enumlit = enumlit;\nvar TEnumLiteral = /** @class */function (_super) {\n  __extends(TEnumLiteral, _super);\n  function TEnumLiteral(enumName, prop) {\n    var _this = _super.call(this) || this;\n    _this.enumName = enumName;\n    _this.prop = prop;\n    _this._failMsg = \"is not \" + enumName + \".\" + prop;\n    return _this;\n  }\n  TEnumLiteral.prototype.getChecker = function (suite, strict) {\n    var _this = this;\n    var ttype = getNamedType(suite, this.enumName);\n    if (!(ttype instanceof TEnumType)) {\n      throw new Error(\"Type \" + this.enumName + \" used in enumlit is not an enum type\");\n    }\n    var val = ttype.members[this.prop];\n    if (!ttype.members.hasOwnProperty(this.prop)) {\n      throw new Error(\"Unknown value \" + this.enumName + \".\" + this.prop + \" used in enumlit\");\n    }\n    return function (value, ctx) {\n      return value === val ? true : ctx.fail(null, _this._failMsg, -1);\n    };\n  };\n  return TEnumLiteral;\n}(TType);\nexports.TEnumLiteral = TEnumLiteral;\nfunction makeIfaceProps(props) {\n  return Object.keys(props).map(function (name) {\n    return makeIfaceProp(name, props[name]);\n  });\n}\nfunction makeIfaceProp(name, prop) {\n  return prop instanceof TOptional ? new TProp(name, prop.ttype, true) : new TProp(name, parseSpec(prop), false);\n}\n/**\n * Defines an interface. The first argument is an array of interfaces that it extends, and the\n * second is an array of properties.\n */\nfunction iface(bases, props) {\n  return new TIface(bases, makeIfaceProps(props));\n}\nexports.iface = iface;\nvar TIface = /** @class */function (_super) {\n  __extends(TIface, _super);\n  function TIface(bases, props) {\n    var _this = _super.call(this) || this;\n    _this.bases = bases;\n    _this.props = props;\n    _this.propSet = new Set(props.map(function (p) {\n      return p.name;\n    }));\n    return _this;\n  }\n  TIface.prototype.getChecker = function (suite, strict, allowedProps) {\n    var _this = this;\n    var baseCheckers = this.bases.map(function (b) {\n      return getNamedType(suite, b).getChecker(suite, strict);\n    });\n    var propCheckers = this.props.map(function (prop) {\n      return prop.ttype.getChecker(suite, strict);\n    });\n    var testCtx = new util_1.NoopContext();\n    // Consider a prop required if it's not optional AND does not allow for undefined as a value.\n    var isPropRequired = this.props.map(function (prop, i) {\n      return !prop.isOpt && !propCheckers[i](undefined, testCtx);\n    });\n    var checker = function (value, ctx) {\n      if (typeof value !== \"object\" || value === null) {\n        return ctx.fail(null, \"is not an object\", 0);\n      }\n      for (var i = 0; i < baseCheckers.length; i++) {\n        if (!baseCheckers[i](value, ctx)) {\n          return false;\n        }\n      }\n      for (var i = 0; i < propCheckers.length; i++) {\n        var name_1 = _this.props[i].name;\n        var v = value[name_1];\n        if (v === undefined) {\n          if (isPropRequired[i]) {\n            return ctx.fail(name_1, \"is missing\", 1);\n          }\n        } else {\n          var ok = propCheckers[i](v, ctx);\n          if (!ok) {\n            return ctx.fail(name_1, null, 1);\n          }\n        }\n      }\n      return true;\n    };\n    if (!strict) {\n      return checker;\n    }\n    var propSet = this.propSet;\n    if (allowedProps) {\n      this.propSet.forEach(function (prop) {\n        return allowedProps.add(prop);\n      });\n      propSet = allowedProps;\n    }\n    // In strict mode, check also for unknown enumerable properties.\n    return function (value, ctx) {\n      if (!checker(value, ctx)) {\n        return false;\n      }\n      for (var prop in value) {\n        if (!propSet.has(prop)) {\n          return ctx.fail(prop, \"is extraneous\", 2);\n        }\n      }\n      return true;\n    };\n  };\n  return TIface;\n}(TType);\nexports.TIface = TIface;\n/**\n * Defines an optional property on an interface.\n */\nfunction opt(typeSpec) {\n  return new TOptional(parseSpec(typeSpec));\n}\nexports.opt = opt;\nvar TOptional = /** @class */function (_super) {\n  __extends(TOptional, _super);\n  function TOptional(ttype) {\n    var _this = _super.call(this) || this;\n    _this.ttype = ttype;\n    return _this;\n  }\n  TOptional.prototype.getChecker = function (suite, strict) {\n    var itemChecker = this.ttype.getChecker(suite, strict);\n    return function (value, ctx) {\n      return value === undefined || itemChecker(value, ctx);\n    };\n  };\n  return TOptional;\n}(TType);\nexports.TOptional = TOptional;\n/**\n * Defines a property in an interface.\n */\nvar TProp = /** @class */function () {\n  function TProp(name, ttype, isOpt) {\n    this.name = name;\n    this.ttype = ttype;\n    this.isOpt = isOpt;\n  }\n  return TProp;\n}();\nexports.TProp = TProp;\n/**\n * Defines a function. The first argument declares the function's return type, the rest declare\n * its parameters.\n */\nfunction func(resultSpec) {\n  var params = [];\n  for (var _i = 1; _i < arguments.length; _i++) {\n    params[_i - 1] = arguments[_i];\n  }\n  return new TFunc(new TParamList(params), parseSpec(resultSpec));\n}\nexports.func = func;\nvar TFunc = /** @class */function (_super) {\n  __extends(TFunc, _super);\n  function TFunc(paramList, result) {\n    var _this = _super.call(this) || this;\n    _this.paramList = paramList;\n    _this.result = result;\n    return _this;\n  }\n  TFunc.prototype.getChecker = function (suite, strict) {\n    return function (value, ctx) {\n      return typeof value === \"function\" ? true : ctx.fail(null, \"is not a function\", 0);\n    };\n  };\n  return TFunc;\n}(TType);\nexports.TFunc = TFunc;\n/**\n * Defines a function parameter.\n */\nfunction param(name, typeSpec, isOpt) {\n  return new TParam(name, parseSpec(typeSpec), Boolean(isOpt));\n}\nexports.param = param;\nvar TParam = /** @class */function () {\n  function TParam(name, ttype, isOpt) {\n    this.name = name;\n    this.ttype = ttype;\n    this.isOpt = isOpt;\n  }\n  return TParam;\n}();\nexports.TParam = TParam;\n/**\n * Defines a function parameter list.\n */\nvar TParamList = /** @class */function (_super) {\n  __extends(TParamList, _super);\n  function TParamList(params) {\n    var _this = _super.call(this) || this;\n    _this.params = params;\n    return _this;\n  }\n  TParamList.prototype.getChecker = function (suite, strict) {\n    var _this = this;\n    var itemCheckers = this.params.map(function (t) {\n      return t.ttype.getChecker(suite, strict);\n    });\n    var testCtx = new util_1.NoopContext();\n    var isParamRequired = this.params.map(function (param, i) {\n      return !param.isOpt && !itemCheckers[i](undefined, testCtx);\n    });\n    var checker = function (value, ctx) {\n      if (!Array.isArray(value)) {\n        return ctx.fail(null, \"is not an array\", 0);\n      }\n      for (var i = 0; i < itemCheckers.length; i++) {\n        var p = _this.params[i];\n        if (value[i] === undefined) {\n          if (isParamRequired[i]) {\n            return ctx.fail(p.name, \"is missing\", 1);\n          }\n        } else {\n          var ok = itemCheckers[i](value[i], ctx);\n          if (!ok) {\n            return ctx.fail(p.name, null, 1);\n          }\n        }\n      }\n      return true;\n    };\n    if (!strict) {\n      return checker;\n    }\n    return function (value, ctx) {\n      if (!checker(value, ctx)) {\n        return false;\n      }\n      return value.length <= itemCheckers.length ? true : ctx.fail(itemCheckers.length, \"is extraneous\", 2);\n    };\n  };\n  return TParamList;\n}(TType);\nexports.TParamList = TParamList;\n/**\n * Single TType implementation for all basic built-in types.\n */\nvar BasicType = /** @class */function (_super) {\n  __extends(BasicType, _super);\n  function BasicType(validator, message) {\n    var _this = _super.call(this) || this;\n    _this.validator = validator;\n    _this.message = message;\n    return _this;\n  }\n  BasicType.prototype.getChecker = function (suite, strict) {\n    var _this = this;\n    return function (value, ctx) {\n      return _this.validator(value) ? true : ctx.fail(null, _this.message, 0);\n    };\n  };\n  return BasicType;\n}(TType);\nexports.BasicType = BasicType;\n/**\n * Defines the suite of basic types.\n */\nexports.basicTypes = {\n  any: new BasicType(function (v) {\n    return true;\n  }, \"is invalid\"),\n  number: new BasicType(function (v) {\n    return typeof v === \"number\";\n  }, \"is not a number\"),\n  object: new BasicType(function (v) {\n    return typeof v === \"object\" && v;\n  }, \"is not an object\"),\n  boolean: new BasicType(function (v) {\n    return typeof v === \"boolean\";\n  }, \"is not a boolean\"),\n  string: new BasicType(function (v) {\n    return typeof v === \"string\";\n  }, \"is not a string\"),\n  symbol: new BasicType(function (v) {\n    return typeof v === \"symbol\";\n  }, \"is not a symbol\"),\n  void: new BasicType(function (v) {\n    return v == null;\n  }, \"is not void\"),\n  undefined: new BasicType(function (v) {\n    return v === undefined;\n  }, \"is not undefined\"),\n  null: new BasicType(function (v) {\n    return v === null;\n  }, \"is not null\"),\n  never: new BasicType(function (v) {\n    return false;\n  }, \"is unexpected\"),\n  Date: new BasicType(getIsNativeChecker(\"[object Date]\"), \"is not a Date\"),\n  RegExp: new BasicType(getIsNativeChecker(\"[object RegExp]\"), \"is not a RegExp\")\n};\n// This approach for checking native object types mirrors that of lodash. Its advantage over\n// `isinstance` is that it can still return true for native objects created in different JS\n// execution environments.\nvar nativeToString = Object.prototype.toString;\nfunction getIsNativeChecker(tag) {\n  return function (v) {\n    return typeof v === \"object\" && v && nativeToString.call(v) === tag;\n  };\n}\nif (typeof Buffer !== \"undefined\") {\n  exports.basicTypes.Buffer = new BasicType(function (v) {\n    return Buffer.isBuffer(v);\n  }, \"is not a Buffer\");\n}\nvar _loop_1 = function (array_1) {\n  exports.basicTypes[array_1.name] = new BasicType(function (v) {\n    return v instanceof array_1;\n  }, \"is not a \" + array_1.name);\n};\n// Support typed arrays of various flavors\nfor (var _i = 0, _a = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, ArrayBuffer]; _i < _a.length; _i++) {\n  var array_1 = _a[_i];\n  _loop_1(array_1);\n}","map":{"version":3,"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","defineProperty","exports","value","basicTypes","BasicType","TParamList","TParam","param","TFunc","func","TProp","TOptional","opt","TIface","iface","TEnumLiteral","enumlit","TEnumType","enumtype","TIntersection","intersection","TUnion","union","TTuple","tuple","TArray","array","TLiteral","lit","TName","name","TType","util_1","require","parseSpec","typeSpec","getNamedType","suite","ttype","Error","_super","_this","call","_failMsg","getChecker","strict","allowedProps","checker","ctx","fail","JSON","stringify","itemChecker","isArray","i","length","ok","_i","arguments","map","t","ttypes","itemCheckers","names","filter","n","otherTypes","push","join","ur","unionResolver","createContext","resolveUnion","Set","every","values","members","validValues","keys","has","prop","enumName","val","makeIfaceProps","props","makeIfaceProp","bases","propSet","baseCheckers","propCheckers","testCtx","NoopContext","isPropRequired","isOpt","undefined","name_1","v","forEach","add","resultSpec","params","paramList","result","Boolean","isParamRequired","validator","message","any","number","object","boolean","string","symbol","void","null","never","Date","getIsNativeChecker","RegExp","nativeToString","toString","tag","Buffer","isBuffer","_loop_1","array_1","_a","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","ArrayBuffer"],"sources":["C:/Users/user/Desktop/000newport/node_modules/ts-interface-checker/dist/types.js"],"sourcesContent":["\"use strict\";\n/**\n * This module defines nodes used to define types and validations for objects and interfaces.\n */\n// tslint:disable:no-shadowed-variable prefer-for-of\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.basicTypes = exports.BasicType = exports.TParamList = exports.TParam = exports.param = exports.TFunc = exports.func = exports.TProp = exports.TOptional = exports.opt = exports.TIface = exports.iface = exports.TEnumLiteral = exports.enumlit = exports.TEnumType = exports.enumtype = exports.TIntersection = exports.intersection = exports.TUnion = exports.union = exports.TTuple = exports.tuple = exports.TArray = exports.array = exports.TLiteral = exports.lit = exports.TName = exports.name = exports.TType = void 0;\nvar util_1 = require(\"./util\");\n/** Node that represents a type. */\nvar TType = /** @class */ (function () {\n    function TType() {\n    }\n    return TType;\n}());\nexports.TType = TType;\n/** Parses a type spec into a TType node. */\nfunction parseSpec(typeSpec) {\n    return typeof typeSpec === \"string\" ? name(typeSpec) : typeSpec;\n}\nfunction getNamedType(suite, name) {\n    var ttype = suite[name];\n    if (!ttype) {\n        throw new Error(\"Unknown type \" + name);\n    }\n    return ttype;\n}\n/**\n * Defines a type name, either built-in, or defined in this suite. It can typically be included in\n * the specs as just a plain string.\n */\nfunction name(value) { return new TName(value); }\nexports.name = name;\nvar TName = /** @class */ (function (_super) {\n    __extends(TName, _super);\n    function TName(name) {\n        var _this = _super.call(this) || this;\n        _this.name = name;\n        _this._failMsg = \"is not a \" + name;\n        return _this;\n    }\n    TName.prototype.getChecker = function (suite, strict, allowedProps) {\n        var _this = this;\n        var ttype = getNamedType(suite, this.name);\n        var checker = ttype.getChecker(suite, strict, allowedProps);\n        if (ttype instanceof BasicType || ttype instanceof TName) {\n            return checker;\n        }\n        // For complex types, add an additional \"is not a <Type>\" message on failure.\n        return function (value, ctx) { return checker(value, ctx) ? true : ctx.fail(null, _this._failMsg, 0); };\n    };\n    return TName;\n}(TType));\nexports.TName = TName;\n/**\n * Defines a literal value, e.g. lit('hello') or lit(123).\n */\nfunction lit(value) { return new TLiteral(value); }\nexports.lit = lit;\nvar TLiteral = /** @class */ (function (_super) {\n    __extends(TLiteral, _super);\n    function TLiteral(value) {\n        var _this = _super.call(this) || this;\n        _this.value = value;\n        _this.name = JSON.stringify(value);\n        _this._failMsg = \"is not \" + _this.name;\n        return _this;\n    }\n    TLiteral.prototype.getChecker = function (suite, strict) {\n        var _this = this;\n        return function (value, ctx) { return (value === _this.value) ? true : ctx.fail(null, _this._failMsg, -1); };\n    };\n    return TLiteral;\n}(TType));\nexports.TLiteral = TLiteral;\n/**\n * Defines an array type, e.g. array('number').\n */\nfunction array(typeSpec) { return new TArray(parseSpec(typeSpec)); }\nexports.array = array;\nvar TArray = /** @class */ (function (_super) {\n    __extends(TArray, _super);\n    function TArray(ttype) {\n        var _this = _super.call(this) || this;\n        _this.ttype = ttype;\n        return _this;\n    }\n    TArray.prototype.getChecker = function (suite, strict) {\n        var itemChecker = this.ttype.getChecker(suite, strict);\n        return function (value, ctx) {\n            if (!Array.isArray(value)) {\n                return ctx.fail(null, \"is not an array\", 0);\n            }\n            for (var i = 0; i < value.length; i++) {\n                var ok = itemChecker(value[i], ctx);\n                if (!ok) {\n                    return ctx.fail(i, null, 1);\n                }\n            }\n            return true;\n        };\n    };\n    return TArray;\n}(TType));\nexports.TArray = TArray;\n/**\n * Defines a tuple type, e.g. tuple('string', 'number').\n */\nfunction tuple() {\n    var typeSpec = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        typeSpec[_i] = arguments[_i];\n    }\n    return new TTuple(typeSpec.map(function (t) { return parseSpec(t); }));\n}\nexports.tuple = tuple;\nvar TTuple = /** @class */ (function (_super) {\n    __extends(TTuple, _super);\n    function TTuple(ttypes) {\n        var _this = _super.call(this) || this;\n        _this.ttypes = ttypes;\n        return _this;\n    }\n    TTuple.prototype.getChecker = function (suite, strict) {\n        var itemCheckers = this.ttypes.map(function (t) { return t.getChecker(suite, strict); });\n        var checker = function (value, ctx) {\n            if (!Array.isArray(value)) {\n                return ctx.fail(null, \"is not an array\", 0);\n            }\n            for (var i = 0; i < itemCheckers.length; i++) {\n                var ok = itemCheckers[i](value[i], ctx);\n                if (!ok) {\n                    return ctx.fail(i, null, 1);\n                }\n            }\n            return true;\n        };\n        if (!strict) {\n            return checker;\n        }\n        return function (value, ctx) {\n            if (!checker(value, ctx)) {\n                return false;\n            }\n            return value.length <= itemCheckers.length ? true :\n                ctx.fail(itemCheckers.length, \"is extraneous\", 2);\n        };\n    };\n    return TTuple;\n}(TType));\nexports.TTuple = TTuple;\n/**\n * Defines a union type, e.g. union('number', 'null').\n */\nfunction union() {\n    var typeSpec = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        typeSpec[_i] = arguments[_i];\n    }\n    return new TUnion(typeSpec.map(function (t) { return parseSpec(t); }));\n}\nexports.union = union;\nvar TUnion = /** @class */ (function (_super) {\n    __extends(TUnion, _super);\n    function TUnion(ttypes) {\n        var _this = _super.call(this) || this;\n        _this.ttypes = ttypes;\n        var names = ttypes.map(function (t) { return t instanceof TName || t instanceof TLiteral ? t.name : null; })\n            .filter(function (n) { return n; });\n        var otherTypes = ttypes.length - names.length;\n        if (names.length) {\n            if (otherTypes > 0) {\n                names.push(otherTypes + \" more\");\n            }\n            _this._failMsg = \"is none of \" + names.join(\", \");\n        }\n        else {\n            _this._failMsg = \"is none of \" + otherTypes + \" types\";\n        }\n        return _this;\n    }\n    TUnion.prototype.getChecker = function (suite, strict) {\n        var _this = this;\n        var itemCheckers = this.ttypes.map(function (t) { return t.getChecker(suite, strict); });\n        return function (value, ctx) {\n            var ur = ctx.unionResolver();\n            for (var i = 0; i < itemCheckers.length; i++) {\n                var ok = itemCheckers[i](value, ur.createContext());\n                if (ok) {\n                    return true;\n                }\n            }\n            ctx.resolveUnion(ur);\n            return ctx.fail(null, _this._failMsg, 0);\n        };\n    };\n    return TUnion;\n}(TType));\nexports.TUnion = TUnion;\n/**\n * Defines an intersection type, e.g. intersection('number', 'null').\n */\nfunction intersection() {\n    var typeSpec = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        typeSpec[_i] = arguments[_i];\n    }\n    return new TIntersection(typeSpec.map(function (t) { return parseSpec(t); }));\n}\nexports.intersection = intersection;\nvar TIntersection = /** @class */ (function (_super) {\n    __extends(TIntersection, _super);\n    function TIntersection(ttypes) {\n        var _this = _super.call(this) || this;\n        _this.ttypes = ttypes;\n        return _this;\n    }\n    TIntersection.prototype.getChecker = function (suite, strict) {\n        var allowedProps = new Set();\n        var itemCheckers = this.ttypes.map(function (t) { return t.getChecker(suite, strict, allowedProps); });\n        return function (value, ctx) {\n            var ok = itemCheckers.every(function (checker) { return checker(value, ctx); });\n            if (ok) {\n                return true;\n            }\n            return ctx.fail(null, null, 0);\n        };\n    };\n    return TIntersection;\n}(TType));\nexports.TIntersection = TIntersection;\n/**\n * Defines an enum type, e.g. enum({'A': 1, 'B': 2}).\n */\nfunction enumtype(values) {\n    return new TEnumType(values);\n}\nexports.enumtype = enumtype;\nvar TEnumType = /** @class */ (function (_super) {\n    __extends(TEnumType, _super);\n    function TEnumType(members) {\n        var _this = _super.call(this) || this;\n        _this.members = members;\n        _this.validValues = new Set();\n        _this._failMsg = \"is not a valid enum value\";\n        _this.validValues = new Set(Object.keys(members).map(function (name) { return members[name]; }));\n        return _this;\n    }\n    TEnumType.prototype.getChecker = function (suite, strict) {\n        var _this = this;\n        return function (value, ctx) {\n            return (_this.validValues.has(value) ? true : ctx.fail(null, _this._failMsg, 0));\n        };\n    };\n    return TEnumType;\n}(TType));\nexports.TEnumType = TEnumType;\n/**\n * Defines a literal enum value, such as Direction.Up, specified as enumlit(\"Direction\", \"Up\").\n */\nfunction enumlit(name, prop) {\n    return new TEnumLiteral(name, prop);\n}\nexports.enumlit = enumlit;\nvar TEnumLiteral = /** @class */ (function (_super) {\n    __extends(TEnumLiteral, _super);\n    function TEnumLiteral(enumName, prop) {\n        var _this = _super.call(this) || this;\n        _this.enumName = enumName;\n        _this.prop = prop;\n        _this._failMsg = \"is not \" + enumName + \".\" + prop;\n        return _this;\n    }\n    TEnumLiteral.prototype.getChecker = function (suite, strict) {\n        var _this = this;\n        var ttype = getNamedType(suite, this.enumName);\n        if (!(ttype instanceof TEnumType)) {\n            throw new Error(\"Type \" + this.enumName + \" used in enumlit is not an enum type\");\n        }\n        var val = ttype.members[this.prop];\n        if (!ttype.members.hasOwnProperty(this.prop)) {\n            throw new Error(\"Unknown value \" + this.enumName + \".\" + this.prop + \" used in enumlit\");\n        }\n        return function (value, ctx) { return (value === val) ? true : ctx.fail(null, _this._failMsg, -1); };\n    };\n    return TEnumLiteral;\n}(TType));\nexports.TEnumLiteral = TEnumLiteral;\nfunction makeIfaceProps(props) {\n    return Object.keys(props).map(function (name) { return makeIfaceProp(name, props[name]); });\n}\nfunction makeIfaceProp(name, prop) {\n    return prop instanceof TOptional ?\n        new TProp(name, prop.ttype, true) :\n        new TProp(name, parseSpec(prop), false);\n}\n/**\n * Defines an interface. The first argument is an array of interfaces that it extends, and the\n * second is an array of properties.\n */\nfunction iface(bases, props) {\n    return new TIface(bases, makeIfaceProps(props));\n}\nexports.iface = iface;\nvar TIface = /** @class */ (function (_super) {\n    __extends(TIface, _super);\n    function TIface(bases, props) {\n        var _this = _super.call(this) || this;\n        _this.bases = bases;\n        _this.props = props;\n        _this.propSet = new Set(props.map(function (p) { return p.name; }));\n        return _this;\n    }\n    TIface.prototype.getChecker = function (suite, strict, allowedProps) {\n        var _this = this;\n        var baseCheckers = this.bases.map(function (b) { return getNamedType(suite, b).getChecker(suite, strict); });\n        var propCheckers = this.props.map(function (prop) { return prop.ttype.getChecker(suite, strict); });\n        var testCtx = new util_1.NoopContext();\n        // Consider a prop required if it's not optional AND does not allow for undefined as a value.\n        var isPropRequired = this.props.map(function (prop, i) {\n            return !prop.isOpt && !propCheckers[i](undefined, testCtx);\n        });\n        var checker = function (value, ctx) {\n            if (typeof value !== \"object\" || value === null) {\n                return ctx.fail(null, \"is not an object\", 0);\n            }\n            for (var i = 0; i < baseCheckers.length; i++) {\n                if (!baseCheckers[i](value, ctx)) {\n                    return false;\n                }\n            }\n            for (var i = 0; i < propCheckers.length; i++) {\n                var name_1 = _this.props[i].name;\n                var v = value[name_1];\n                if (v === undefined) {\n                    if (isPropRequired[i]) {\n                        return ctx.fail(name_1, \"is missing\", 1);\n                    }\n                }\n                else {\n                    var ok = propCheckers[i](v, ctx);\n                    if (!ok) {\n                        return ctx.fail(name_1, null, 1);\n                    }\n                }\n            }\n            return true;\n        };\n        if (!strict) {\n            return checker;\n        }\n        var propSet = this.propSet;\n        if (allowedProps) {\n            this.propSet.forEach(function (prop) { return allowedProps.add(prop); });\n            propSet = allowedProps;\n        }\n        // In strict mode, check also for unknown enumerable properties.\n        return function (value, ctx) {\n            if (!checker(value, ctx)) {\n                return false;\n            }\n            for (var prop in value) {\n                if (!propSet.has(prop)) {\n                    return ctx.fail(prop, \"is extraneous\", 2);\n                }\n            }\n            return true;\n        };\n    };\n    return TIface;\n}(TType));\nexports.TIface = TIface;\n/**\n * Defines an optional property on an interface.\n */\nfunction opt(typeSpec) { return new TOptional(parseSpec(typeSpec)); }\nexports.opt = opt;\nvar TOptional = /** @class */ (function (_super) {\n    __extends(TOptional, _super);\n    function TOptional(ttype) {\n        var _this = _super.call(this) || this;\n        _this.ttype = ttype;\n        return _this;\n    }\n    TOptional.prototype.getChecker = function (suite, strict) {\n        var itemChecker = this.ttype.getChecker(suite, strict);\n        return function (value, ctx) {\n            return value === undefined || itemChecker(value, ctx);\n        };\n    };\n    return TOptional;\n}(TType));\nexports.TOptional = TOptional;\n/**\n * Defines a property in an interface.\n */\nvar TProp = /** @class */ (function () {\n    function TProp(name, ttype, isOpt) {\n        this.name = name;\n        this.ttype = ttype;\n        this.isOpt = isOpt;\n    }\n    return TProp;\n}());\nexports.TProp = TProp;\n/**\n * Defines a function. The first argument declares the function's return type, the rest declare\n * its parameters.\n */\nfunction func(resultSpec) {\n    var params = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        params[_i - 1] = arguments[_i];\n    }\n    return new TFunc(new TParamList(params), parseSpec(resultSpec));\n}\nexports.func = func;\nvar TFunc = /** @class */ (function (_super) {\n    __extends(TFunc, _super);\n    function TFunc(paramList, result) {\n        var _this = _super.call(this) || this;\n        _this.paramList = paramList;\n        _this.result = result;\n        return _this;\n    }\n    TFunc.prototype.getChecker = function (suite, strict) {\n        return function (value, ctx) {\n            return typeof value === \"function\" ? true : ctx.fail(null, \"is not a function\", 0);\n        };\n    };\n    return TFunc;\n}(TType));\nexports.TFunc = TFunc;\n/**\n * Defines a function parameter.\n */\nfunction param(name, typeSpec, isOpt) {\n    return new TParam(name, parseSpec(typeSpec), Boolean(isOpt));\n}\nexports.param = param;\nvar TParam = /** @class */ (function () {\n    function TParam(name, ttype, isOpt) {\n        this.name = name;\n        this.ttype = ttype;\n        this.isOpt = isOpt;\n    }\n    return TParam;\n}());\nexports.TParam = TParam;\n/**\n * Defines a function parameter list.\n */\nvar TParamList = /** @class */ (function (_super) {\n    __extends(TParamList, _super);\n    function TParamList(params) {\n        var _this = _super.call(this) || this;\n        _this.params = params;\n        return _this;\n    }\n    TParamList.prototype.getChecker = function (suite, strict) {\n        var _this = this;\n        var itemCheckers = this.params.map(function (t) { return t.ttype.getChecker(suite, strict); });\n        var testCtx = new util_1.NoopContext();\n        var isParamRequired = this.params.map(function (param, i) {\n            return !param.isOpt && !itemCheckers[i](undefined, testCtx);\n        });\n        var checker = function (value, ctx) {\n            if (!Array.isArray(value)) {\n                return ctx.fail(null, \"is not an array\", 0);\n            }\n            for (var i = 0; i < itemCheckers.length; i++) {\n                var p = _this.params[i];\n                if (value[i] === undefined) {\n                    if (isParamRequired[i]) {\n                        return ctx.fail(p.name, \"is missing\", 1);\n                    }\n                }\n                else {\n                    var ok = itemCheckers[i](value[i], ctx);\n                    if (!ok) {\n                        return ctx.fail(p.name, null, 1);\n                    }\n                }\n            }\n            return true;\n        };\n        if (!strict) {\n            return checker;\n        }\n        return function (value, ctx) {\n            if (!checker(value, ctx)) {\n                return false;\n            }\n            return value.length <= itemCheckers.length ? true :\n                ctx.fail(itemCheckers.length, \"is extraneous\", 2);\n        };\n    };\n    return TParamList;\n}(TType));\nexports.TParamList = TParamList;\n/**\n * Single TType implementation for all basic built-in types.\n */\nvar BasicType = /** @class */ (function (_super) {\n    __extends(BasicType, _super);\n    function BasicType(validator, message) {\n        var _this = _super.call(this) || this;\n        _this.validator = validator;\n        _this.message = message;\n        return _this;\n    }\n    BasicType.prototype.getChecker = function (suite, strict) {\n        var _this = this;\n        return function (value, ctx) { return _this.validator(value) ? true : ctx.fail(null, _this.message, 0); };\n    };\n    return BasicType;\n}(TType));\nexports.BasicType = BasicType;\n/**\n * Defines the suite of basic types.\n */\nexports.basicTypes = {\n    any: new BasicType(function (v) { return true; }, \"is invalid\"),\n    number: new BasicType(function (v) { return (typeof v === \"number\"); }, \"is not a number\"),\n    object: new BasicType(function (v) { return (typeof v === \"object\" && v); }, \"is not an object\"),\n    boolean: new BasicType(function (v) { return (typeof v === \"boolean\"); }, \"is not a boolean\"),\n    string: new BasicType(function (v) { return (typeof v === \"string\"); }, \"is not a string\"),\n    symbol: new BasicType(function (v) { return (typeof v === \"symbol\"); }, \"is not a symbol\"),\n    void: new BasicType(function (v) { return (v == null); }, \"is not void\"),\n    undefined: new BasicType(function (v) { return (v === undefined); }, \"is not undefined\"),\n    null: new BasicType(function (v) { return (v === null); }, \"is not null\"),\n    never: new BasicType(function (v) { return false; }, \"is unexpected\"),\n    Date: new BasicType(getIsNativeChecker(\"[object Date]\"), \"is not a Date\"),\n    RegExp: new BasicType(getIsNativeChecker(\"[object RegExp]\"), \"is not a RegExp\"),\n};\n// This approach for checking native object types mirrors that of lodash. Its advantage over\n// `isinstance` is that it can still return true for native objects created in different JS\n// execution environments.\nvar nativeToString = Object.prototype.toString;\nfunction getIsNativeChecker(tag) {\n    return function (v) { return typeof v === \"object\" && v && nativeToString.call(v) === tag; };\n}\nif (typeof Buffer !== \"undefined\") {\n    exports.basicTypes.Buffer = new BasicType(function (v) { return Buffer.isBuffer(v); }, \"is not a Buffer\");\n}\nvar _loop_1 = function (array_1) {\n    exports.basicTypes[array_1.name] = new BasicType(function (v) { return (v instanceof array_1); }, \"is not a \" + array_1.name);\n};\n// Support typed arrays of various flavors\nfor (var _i = 0, _a = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n    Int32Array, Uint32Array, Float32Array, Float64Array, ArrayBuffer]; _i < _a.length; _i++) {\n    var array_1 = _a[_i];\n    _loop_1(array_1);\n}\n"],"mappings":"AAAA,YAAY;;AACZ;AACA;AACA;AACA;AACA,IAAIA,SAAS,GAAI,IAAI,IAAI,IAAI,CAACA,SAAS,IAAM,YAAY;EACrD,IAAIC,aAAa,GAAG,SAAAA,CAAUC,CAAC,EAAEC,CAAC,EAAE;IAChCF,aAAa,GAAGG,MAAM,CAACC,cAAc,IAChC;MAAEC,SAAS,EAAE;IAAG,CAAC,YAAYC,KAAK,IAAI,UAAUL,CAAC,EAAEC,CAAC,EAAE;MAAED,CAAC,CAACI,SAAS,GAAGH,CAAC;IAAE,CAAE,IAC5E,UAAUD,CAAC,EAAEC,CAAC,EAAE;MAAE,KAAK,IAAIK,CAAC,IAAIL,CAAC,EAAE,IAAIA,CAAC,CAACM,cAAc,CAACD,CAAC,CAAC,EAAEN,CAAC,CAACM,CAAC,CAAC,GAAGL,CAAC,CAACK,CAAC,CAAC;IAAE,CAAC;IAC9E,OAAOP,aAAa,CAACC,CAAC,EAAEC,CAAC,CAAC;EAC9B,CAAC;EACD,OAAO,UAAUD,CAAC,EAAEC,CAAC,EAAE;IACnBF,aAAa,CAACC,CAAC,EAAEC,CAAC,CAAC;IACnB,SAASO,EAAEA,CAAA,EAAG;MAAE,IAAI,CAACC,WAAW,GAAGT,CAAC;IAAE;IACtCA,CAAC,CAACU,SAAS,GAAGT,CAAC,KAAK,IAAI,GAAGC,MAAM,CAACS,MAAM,CAACV,CAAC,CAAC,IAAIO,EAAE,CAACE,SAAS,GAAGT,CAAC,CAACS,SAAS,EAAE,IAAIF,EAAE,CAAC,CAAC,CAAC;EACxF,CAAC;AACL,CAAC,CAAE,CAAC;AACJN,MAAM,CAACU,cAAc,CAACC,OAAO,EAAE,YAAY,EAAE;EAAEC,KAAK,EAAE;AAAK,CAAC,CAAC;AAC7DD,OAAO,CAACE,UAAU,GAAGF,OAAO,CAACG,SAAS,GAAGH,OAAO,CAACI,UAAU,GAAGJ,OAAO,CAACK,MAAM,GAAGL,OAAO,CAACM,KAAK,GAAGN,OAAO,CAACO,KAAK,GAAGP,OAAO,CAACQ,IAAI,GAAGR,OAAO,CAACS,KAAK,GAAGT,OAAO,CAACU,SAAS,GAAGV,OAAO,CAACW,GAAG,GAAGX,OAAO,CAACY,MAAM,GAAGZ,OAAO,CAACa,KAAK,GAAGb,OAAO,CAACc,YAAY,GAAGd,OAAO,CAACe,OAAO,GAAGf,OAAO,CAACgB,SAAS,GAAGhB,OAAO,CAACiB,QAAQ,GAAGjB,OAAO,CAACkB,aAAa,GAAGlB,OAAO,CAACmB,YAAY,GAAGnB,OAAO,CAACoB,MAAM,GAAGpB,OAAO,CAACqB,KAAK,GAAGrB,OAAO,CAACsB,MAAM,GAAGtB,OAAO,CAACuB,KAAK,GAAGvB,OAAO,CAACwB,MAAM,GAAGxB,OAAO,CAACyB,KAAK,GAAGzB,OAAO,CAAC0B,QAAQ,GAAG1B,OAAO,CAAC2B,GAAG,GAAG3B,OAAO,CAAC4B,KAAK,GAAG5B,OAAO,CAAC6B,IAAI,GAAG7B,OAAO,CAAC8B,KAAK,GAAG,KAAK,CAAC;AACzgB,IAAIC,MAAM,GAAGC,OAAO,CAAC,QAAQ,CAAC;AAC9B;AACA,IAAIF,KAAK,GAAG,aAAe,YAAY;EACnC,SAASA,KAAKA,CAAA,EAAG,CACjB;EACA,OAAOA,KAAK;AAChB,CAAC,CAAC,CAAE;AACJ9B,OAAO,CAAC8B,KAAK,GAAGA,KAAK;AACrB;AACA,SAASG,SAASA,CAACC,QAAQ,EAAE;EACzB,OAAO,OAAOA,QAAQ,KAAK,QAAQ,GAAGL,IAAI,CAACK,QAAQ,CAAC,GAAGA,QAAQ;AACnE;AACA,SAASC,YAAYA,CAACC,KAAK,EAAEP,IAAI,EAAE;EAC/B,IAAIQ,KAAK,GAAGD,KAAK,CAACP,IAAI,CAAC;EACvB,IAAI,CAACQ,KAAK,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,eAAe,GAAGT,IAAI,CAAC;EAC3C;EACA,OAAOQ,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA,SAASR,IAAIA,CAAC5B,KAAK,EAAE;EAAE,OAAO,IAAI2B,KAAK,CAAC3B,KAAK,CAAC;AAAE;AAChDD,OAAO,CAAC6B,IAAI,GAAGA,IAAI;AACnB,IAAID,KAAK,GAAG,aAAe,UAAUW,MAAM,EAAE;EACzCtD,SAAS,CAAC2C,KAAK,EAAEW,MAAM,CAAC;EACxB,SAASX,KAAKA,CAACC,IAAI,EAAE;IACjB,IAAIW,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACX,IAAI,GAAGA,IAAI;IACjBW,KAAK,CAACE,QAAQ,GAAG,WAAW,GAAGb,IAAI;IACnC,OAAOW,KAAK;EAChB;EACAZ,KAAK,CAAC/B,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAEC,YAAY,EAAE;IAChE,IAAIL,KAAK,GAAG,IAAI;IAChB,IAAIH,KAAK,GAAGF,YAAY,CAACC,KAAK,EAAE,IAAI,CAACP,IAAI,CAAC;IAC1C,IAAIiB,OAAO,GAAGT,KAAK,CAACM,UAAU,CAACP,KAAK,EAAEQ,MAAM,EAAEC,YAAY,CAAC;IAC3D,IAAIR,KAAK,YAAYlC,SAAS,IAAIkC,KAAK,YAAYT,KAAK,EAAE;MACtD,OAAOkB,OAAO;IAClB;IACA;IACA,OAAO,UAAU7C,KAAK,EAAE8C,GAAG,EAAE;MAAE,OAAOD,OAAO,CAAC7C,KAAK,EAAE8C,GAAG,CAAC,GAAG,IAAI,GAAGA,GAAG,CAACC,IAAI,CAAC,IAAI,EAAER,KAAK,CAACE,QAAQ,EAAE,CAAC,CAAC;IAAE,CAAC;EAC3G,CAAC;EACD,OAAOd,KAAK;AAChB,CAAC,CAACE,KAAK,CAAE;AACT9B,OAAO,CAAC4B,KAAK,GAAGA,KAAK;AACrB;AACA;AACA;AACA,SAASD,GAAGA,CAAC1B,KAAK,EAAE;EAAE,OAAO,IAAIyB,QAAQ,CAACzB,KAAK,CAAC;AAAE;AAClDD,OAAO,CAAC2B,GAAG,GAAGA,GAAG;AACjB,IAAID,QAAQ,GAAG,aAAe,UAAUa,MAAM,EAAE;EAC5CtD,SAAS,CAACyC,QAAQ,EAAEa,MAAM,CAAC;EAC3B,SAASb,QAAQA,CAACzB,KAAK,EAAE;IACrB,IAAIuC,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACvC,KAAK,GAAGA,KAAK;IACnBuC,KAAK,CAACX,IAAI,GAAGoB,IAAI,CAACC,SAAS,CAACjD,KAAK,CAAC;IAClCuC,KAAK,CAACE,QAAQ,GAAG,SAAS,GAAGF,KAAK,CAACX,IAAI;IACvC,OAAOW,KAAK;EAChB;EACAd,QAAQ,CAAC7B,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IACrD,IAAIJ,KAAK,GAAG,IAAI;IAChB,OAAO,UAAUvC,KAAK,EAAE8C,GAAG,EAAE;MAAE,OAAQ9C,KAAK,KAAKuC,KAAK,CAACvC,KAAK,GAAI,IAAI,GAAG8C,GAAG,CAACC,IAAI,CAAC,IAAI,EAAER,KAAK,CAACE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAAE,CAAC;EAChH,CAAC;EACD,OAAOhB,QAAQ;AACnB,CAAC,CAACI,KAAK,CAAE;AACT9B,OAAO,CAAC0B,QAAQ,GAAGA,QAAQ;AAC3B;AACA;AACA;AACA,SAASD,KAAKA,CAACS,QAAQ,EAAE;EAAE,OAAO,IAAIV,MAAM,CAACS,SAAS,CAACC,QAAQ,CAAC,CAAC;AAAE;AACnElC,OAAO,CAACyB,KAAK,GAAGA,KAAK;AACrB,IAAID,MAAM,GAAG,aAAe,UAAUe,MAAM,EAAE;EAC1CtD,SAAS,CAACuC,MAAM,EAAEe,MAAM,CAAC;EACzB,SAASf,MAAMA,CAACa,KAAK,EAAE;IACnB,IAAIG,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACH,KAAK,GAAGA,KAAK;IACnB,OAAOG,KAAK;EAChB;EACAhB,MAAM,CAAC3B,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IACnD,IAAIO,WAAW,GAAG,IAAI,CAACd,KAAK,CAACM,UAAU,CAACP,KAAK,EAAEQ,MAAM,CAAC;IACtD,OAAO,UAAU3C,KAAK,EAAE8C,GAAG,EAAE;MACzB,IAAI,CAACvD,KAAK,CAAC4D,OAAO,CAACnD,KAAK,CAAC,EAAE;QACvB,OAAO8C,GAAG,CAACC,IAAI,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;MAC/C;MACA,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGpD,KAAK,CAACqD,MAAM,EAAED,CAAC,EAAE,EAAE;QACnC,IAAIE,EAAE,GAAGJ,WAAW,CAAClD,KAAK,CAACoD,CAAC,CAAC,EAAEN,GAAG,CAAC;QACnC,IAAI,CAACQ,EAAE,EAAE;UACL,OAAOR,GAAG,CAACC,IAAI,CAACK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B;MACJ;MACA,OAAO,IAAI;IACf,CAAC;EACL,CAAC;EACD,OAAO7B,MAAM;AACjB,CAAC,CAACM,KAAK,CAAE;AACT9B,OAAO,CAACwB,MAAM,GAAGA,MAAM;AACvB;AACA;AACA;AACA,SAASD,KAAKA,CAAA,EAAG;EACb,IAAIW,QAAQ,GAAG,EAAE;EACjB,KAAK,IAAIsB,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGC,SAAS,CAACH,MAAM,EAAEE,EAAE,EAAE,EAAE;IAC1CtB,QAAQ,CAACsB,EAAE,CAAC,GAAGC,SAAS,CAACD,EAAE,CAAC;EAChC;EACA,OAAO,IAAIlC,MAAM,CAACY,QAAQ,CAACwB,GAAG,CAAC,UAAUC,CAAC,EAAE;IAAE,OAAO1B,SAAS,CAAC0B,CAAC,CAAC;EAAE,CAAC,CAAC,CAAC;AAC1E;AACA3D,OAAO,CAACuB,KAAK,GAAGA,KAAK;AACrB,IAAID,MAAM,GAAG,aAAe,UAAUiB,MAAM,EAAE;EAC1CtD,SAAS,CAACqC,MAAM,EAAEiB,MAAM,CAAC;EACzB,SAASjB,MAAMA,CAACsC,MAAM,EAAE;IACpB,IAAIpB,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACoB,MAAM,GAAGA,MAAM;IACrB,OAAOpB,KAAK;EAChB;EACAlB,MAAM,CAACzB,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IACnD,IAAIiB,YAAY,GAAG,IAAI,CAACD,MAAM,CAACF,GAAG,CAAC,UAAUC,CAAC,EAAE;MAAE,OAAOA,CAAC,CAAChB,UAAU,CAACP,KAAK,EAAEQ,MAAM,CAAC;IAAE,CAAC,CAAC;IACxF,IAAIE,OAAO,GAAG,SAAAA,CAAU7C,KAAK,EAAE8C,GAAG,EAAE;MAChC,IAAI,CAACvD,KAAK,CAAC4D,OAAO,CAACnD,KAAK,CAAC,EAAE;QACvB,OAAO8C,GAAG,CAACC,IAAI,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;MAC/C;MACA,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGQ,YAAY,CAACP,MAAM,EAAED,CAAC,EAAE,EAAE;QAC1C,IAAIE,EAAE,GAAGM,YAAY,CAACR,CAAC,CAAC,CAACpD,KAAK,CAACoD,CAAC,CAAC,EAAEN,GAAG,CAAC;QACvC,IAAI,CAACQ,EAAE,EAAE;UACL,OAAOR,GAAG,CAACC,IAAI,CAACK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B;MACJ;MACA,OAAO,IAAI;IACf,CAAC;IACD,IAAI,CAACT,MAAM,EAAE;MACT,OAAOE,OAAO;IAClB;IACA,OAAO,UAAU7C,KAAK,EAAE8C,GAAG,EAAE;MACzB,IAAI,CAACD,OAAO,CAAC7C,KAAK,EAAE8C,GAAG,CAAC,EAAE;QACtB,OAAO,KAAK;MAChB;MACA,OAAO9C,KAAK,CAACqD,MAAM,IAAIO,YAAY,CAACP,MAAM,GAAG,IAAI,GAC7CP,GAAG,CAACC,IAAI,CAACa,YAAY,CAACP,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IACzD,CAAC;EACL,CAAC;EACD,OAAOhC,MAAM;AACjB,CAAC,CAACQ,KAAK,CAAE;AACT9B,OAAO,CAACsB,MAAM,GAAGA,MAAM;AACvB;AACA;AACA;AACA,SAASD,KAAKA,CAAA,EAAG;EACb,IAAIa,QAAQ,GAAG,EAAE;EACjB,KAAK,IAAIsB,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGC,SAAS,CAACH,MAAM,EAAEE,EAAE,EAAE,EAAE;IAC1CtB,QAAQ,CAACsB,EAAE,CAAC,GAAGC,SAAS,CAACD,EAAE,CAAC;EAChC;EACA,OAAO,IAAIpC,MAAM,CAACc,QAAQ,CAACwB,GAAG,CAAC,UAAUC,CAAC,EAAE;IAAE,OAAO1B,SAAS,CAAC0B,CAAC,CAAC;EAAE,CAAC,CAAC,CAAC;AAC1E;AACA3D,OAAO,CAACqB,KAAK,GAAGA,KAAK;AACrB,IAAID,MAAM,GAAG,aAAe,UAAUmB,MAAM,EAAE;EAC1CtD,SAAS,CAACmC,MAAM,EAAEmB,MAAM,CAAC;EACzB,SAASnB,MAAMA,CAACwC,MAAM,EAAE;IACpB,IAAIpB,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACoB,MAAM,GAAGA,MAAM;IACrB,IAAIE,KAAK,GAAGF,MAAM,CAACF,GAAG,CAAC,UAAUC,CAAC,EAAE;MAAE,OAAOA,CAAC,YAAY/B,KAAK,IAAI+B,CAAC,YAAYjC,QAAQ,GAAGiC,CAAC,CAAC9B,IAAI,GAAG,IAAI;IAAE,CAAC,CAAC,CACvGkC,MAAM,CAAC,UAAUC,CAAC,EAAE;MAAE,OAAOA,CAAC;IAAE,CAAC,CAAC;IACvC,IAAIC,UAAU,GAAGL,MAAM,CAACN,MAAM,GAAGQ,KAAK,CAACR,MAAM;IAC7C,IAAIQ,KAAK,CAACR,MAAM,EAAE;MACd,IAAIW,UAAU,GAAG,CAAC,EAAE;QAChBH,KAAK,CAACI,IAAI,CAACD,UAAU,GAAG,OAAO,CAAC;MACpC;MACAzB,KAAK,CAACE,QAAQ,GAAG,aAAa,GAAGoB,KAAK,CAACK,IAAI,CAAC,IAAI,CAAC;IACrD,CAAC,MACI;MACD3B,KAAK,CAACE,QAAQ,GAAG,aAAa,GAAGuB,UAAU,GAAG,QAAQ;IAC1D;IACA,OAAOzB,KAAK;EAChB;EACApB,MAAM,CAACvB,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IACnD,IAAIJ,KAAK,GAAG,IAAI;IAChB,IAAIqB,YAAY,GAAG,IAAI,CAACD,MAAM,CAACF,GAAG,CAAC,UAAUC,CAAC,EAAE;MAAE,OAAOA,CAAC,CAAChB,UAAU,CAACP,KAAK,EAAEQ,MAAM,CAAC;IAAE,CAAC,CAAC;IACxF,OAAO,UAAU3C,KAAK,EAAE8C,GAAG,EAAE;MACzB,IAAIqB,EAAE,GAAGrB,GAAG,CAACsB,aAAa,CAAC,CAAC;MAC5B,KAAK,IAAIhB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGQ,YAAY,CAACP,MAAM,EAAED,CAAC,EAAE,EAAE;QAC1C,IAAIE,EAAE,GAAGM,YAAY,CAACR,CAAC,CAAC,CAACpD,KAAK,EAAEmE,EAAE,CAACE,aAAa,CAAC,CAAC,CAAC;QACnD,IAAIf,EAAE,EAAE;UACJ,OAAO,IAAI;QACf;MACJ;MACAR,GAAG,CAACwB,YAAY,CAACH,EAAE,CAAC;MACpB,OAAOrB,GAAG,CAACC,IAAI,CAAC,IAAI,EAAER,KAAK,CAACE,QAAQ,EAAE,CAAC,CAAC;IAC5C,CAAC;EACL,CAAC;EACD,OAAOtB,MAAM;AACjB,CAAC,CAACU,KAAK,CAAE;AACT9B,OAAO,CAACoB,MAAM,GAAGA,MAAM;AACvB;AACA;AACA;AACA,SAASD,YAAYA,CAAA,EAAG;EACpB,IAAIe,QAAQ,GAAG,EAAE;EACjB,KAAK,IAAIsB,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGC,SAAS,CAACH,MAAM,EAAEE,EAAE,EAAE,EAAE;IAC1CtB,QAAQ,CAACsB,EAAE,CAAC,GAAGC,SAAS,CAACD,EAAE,CAAC;EAChC;EACA,OAAO,IAAItC,aAAa,CAACgB,QAAQ,CAACwB,GAAG,CAAC,UAAUC,CAAC,EAAE;IAAE,OAAO1B,SAAS,CAAC0B,CAAC,CAAC;EAAE,CAAC,CAAC,CAAC;AACjF;AACA3D,OAAO,CAACmB,YAAY,GAAGA,YAAY;AACnC,IAAID,aAAa,GAAG,aAAe,UAAUqB,MAAM,EAAE;EACjDtD,SAAS,CAACiC,aAAa,EAAEqB,MAAM,CAAC;EAChC,SAASrB,aAAaA,CAAC0C,MAAM,EAAE;IAC3B,IAAIpB,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACoB,MAAM,GAAGA,MAAM;IACrB,OAAOpB,KAAK;EAChB;EACAtB,aAAa,CAACrB,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IAC1D,IAAIC,YAAY,GAAG,IAAI2B,GAAG,CAAC,CAAC;IAC5B,IAAIX,YAAY,GAAG,IAAI,CAACD,MAAM,CAACF,GAAG,CAAC,UAAUC,CAAC,EAAE;MAAE,OAAOA,CAAC,CAAChB,UAAU,CAACP,KAAK,EAAEQ,MAAM,EAAEC,YAAY,CAAC;IAAE,CAAC,CAAC;IACtG,OAAO,UAAU5C,KAAK,EAAE8C,GAAG,EAAE;MACzB,IAAIQ,EAAE,GAAGM,YAAY,CAACY,KAAK,CAAC,UAAU3B,OAAO,EAAE;QAAE,OAAOA,OAAO,CAAC7C,KAAK,EAAE8C,GAAG,CAAC;MAAE,CAAC,CAAC;MAC/E,IAAIQ,EAAE,EAAE;QACJ,OAAO,IAAI;MACf;MACA,OAAOR,GAAG,CAACC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;EACL,CAAC;EACD,OAAO9B,aAAa;AACxB,CAAC,CAACY,KAAK,CAAE;AACT9B,OAAO,CAACkB,aAAa,GAAGA,aAAa;AACrC;AACA;AACA;AACA,SAASD,QAAQA,CAACyD,MAAM,EAAE;EACtB,OAAO,IAAI1D,SAAS,CAAC0D,MAAM,CAAC;AAChC;AACA1E,OAAO,CAACiB,QAAQ,GAAGA,QAAQ;AAC3B,IAAID,SAAS,GAAG,aAAe,UAAUuB,MAAM,EAAE;EAC7CtD,SAAS,CAAC+B,SAAS,EAAEuB,MAAM,CAAC;EAC5B,SAASvB,SAASA,CAAC2D,OAAO,EAAE;IACxB,IAAInC,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACmC,OAAO,GAAGA,OAAO;IACvBnC,KAAK,CAACoC,WAAW,GAAG,IAAIJ,GAAG,CAAC,CAAC;IAC7BhC,KAAK,CAACE,QAAQ,GAAG,2BAA2B;IAC5CF,KAAK,CAACoC,WAAW,GAAG,IAAIJ,GAAG,CAACnF,MAAM,CAACwF,IAAI,CAACF,OAAO,CAAC,CAACjB,GAAG,CAAC,UAAU7B,IAAI,EAAE;MAAE,OAAO8C,OAAO,CAAC9C,IAAI,CAAC;IAAE,CAAC,CAAC,CAAC;IAChG,OAAOW,KAAK;EAChB;EACAxB,SAAS,CAACnB,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IACtD,IAAIJ,KAAK,GAAG,IAAI;IAChB,OAAO,UAAUvC,KAAK,EAAE8C,GAAG,EAAE;MACzB,OAAQP,KAAK,CAACoC,WAAW,CAACE,GAAG,CAAC7E,KAAK,CAAC,GAAG,IAAI,GAAG8C,GAAG,CAACC,IAAI,CAAC,IAAI,EAAER,KAAK,CAACE,QAAQ,EAAE,CAAC,CAAC;IACnF,CAAC;EACL,CAAC;EACD,OAAO1B,SAAS;AACpB,CAAC,CAACc,KAAK,CAAE;AACT9B,OAAO,CAACgB,SAAS,GAAGA,SAAS;AAC7B;AACA;AACA;AACA,SAASD,OAAOA,CAACc,IAAI,EAAEkD,IAAI,EAAE;EACzB,OAAO,IAAIjE,YAAY,CAACe,IAAI,EAAEkD,IAAI,CAAC;AACvC;AACA/E,OAAO,CAACe,OAAO,GAAGA,OAAO;AACzB,IAAID,YAAY,GAAG,aAAe,UAAUyB,MAAM,EAAE;EAChDtD,SAAS,CAAC6B,YAAY,EAAEyB,MAAM,CAAC;EAC/B,SAASzB,YAAYA,CAACkE,QAAQ,EAAED,IAAI,EAAE;IAClC,IAAIvC,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACwC,QAAQ,GAAGA,QAAQ;IACzBxC,KAAK,CAACuC,IAAI,GAAGA,IAAI;IACjBvC,KAAK,CAACE,QAAQ,GAAG,SAAS,GAAGsC,QAAQ,GAAG,GAAG,GAAGD,IAAI;IAClD,OAAOvC,KAAK;EAChB;EACA1B,YAAY,CAACjB,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IACzD,IAAIJ,KAAK,GAAG,IAAI;IAChB,IAAIH,KAAK,GAAGF,YAAY,CAACC,KAAK,EAAE,IAAI,CAAC4C,QAAQ,CAAC;IAC9C,IAAI,EAAE3C,KAAK,YAAYrB,SAAS,CAAC,EAAE;MAC/B,MAAM,IAAIsB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC0C,QAAQ,GAAG,sCAAsC,CAAC;IACrF;IACA,IAAIC,GAAG,GAAG5C,KAAK,CAACsC,OAAO,CAAC,IAAI,CAACI,IAAI,CAAC;IAClC,IAAI,CAAC1C,KAAK,CAACsC,OAAO,CAACjF,cAAc,CAAC,IAAI,CAACqF,IAAI,CAAC,EAAE;MAC1C,MAAM,IAAIzC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC0C,QAAQ,GAAG,GAAG,GAAG,IAAI,CAACD,IAAI,GAAG,kBAAkB,CAAC;IAC5F;IACA,OAAO,UAAU9E,KAAK,EAAE8C,GAAG,EAAE;MAAE,OAAQ9C,KAAK,KAAKgF,GAAG,GAAI,IAAI,GAAGlC,GAAG,CAACC,IAAI,CAAC,IAAI,EAAER,KAAK,CAACE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAAE,CAAC;EACxG,CAAC;EACD,OAAO5B,YAAY;AACvB,CAAC,CAACgB,KAAK,CAAE;AACT9B,OAAO,CAACc,YAAY,GAAGA,YAAY;AACnC,SAASoE,cAAcA,CAACC,KAAK,EAAE;EAC3B,OAAO9F,MAAM,CAACwF,IAAI,CAACM,KAAK,CAAC,CAACzB,GAAG,CAAC,UAAU7B,IAAI,EAAE;IAAE,OAAOuD,aAAa,CAACvD,IAAI,EAAEsD,KAAK,CAACtD,IAAI,CAAC,CAAC;EAAE,CAAC,CAAC;AAC/F;AACA,SAASuD,aAAaA,CAACvD,IAAI,EAAEkD,IAAI,EAAE;EAC/B,OAAOA,IAAI,YAAYrE,SAAS,GAC5B,IAAID,KAAK,CAACoB,IAAI,EAAEkD,IAAI,CAAC1C,KAAK,EAAE,IAAI,CAAC,GACjC,IAAI5B,KAAK,CAACoB,IAAI,EAAEI,SAAS,CAAC8C,IAAI,CAAC,EAAE,KAAK,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA,SAASlE,KAAKA,CAACwE,KAAK,EAAEF,KAAK,EAAE;EACzB,OAAO,IAAIvE,MAAM,CAACyE,KAAK,EAAEH,cAAc,CAACC,KAAK,CAAC,CAAC;AACnD;AACAnF,OAAO,CAACa,KAAK,GAAGA,KAAK;AACrB,IAAID,MAAM,GAAG,aAAe,UAAU2B,MAAM,EAAE;EAC1CtD,SAAS,CAAC2B,MAAM,EAAE2B,MAAM,CAAC;EACzB,SAAS3B,MAAMA,CAACyE,KAAK,EAAEF,KAAK,EAAE;IAC1B,IAAI3C,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAAC6C,KAAK,GAAGA,KAAK;IACnB7C,KAAK,CAAC2C,KAAK,GAAGA,KAAK;IACnB3C,KAAK,CAAC8C,OAAO,GAAG,IAAId,GAAG,CAACW,KAAK,CAACzB,GAAG,CAAC,UAAUjE,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACoC,IAAI;IAAE,CAAC,CAAC,CAAC;IACnE,OAAOW,KAAK;EAChB;EACA5B,MAAM,CAACf,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAEC,YAAY,EAAE;IACjE,IAAIL,KAAK,GAAG,IAAI;IAChB,IAAI+C,YAAY,GAAG,IAAI,CAACF,KAAK,CAAC3B,GAAG,CAAC,UAAUtE,CAAC,EAAE;MAAE,OAAO+C,YAAY,CAACC,KAAK,EAAEhD,CAAC,CAAC,CAACuD,UAAU,CAACP,KAAK,EAAEQ,MAAM,CAAC;IAAE,CAAC,CAAC;IAC5G,IAAI4C,YAAY,GAAG,IAAI,CAACL,KAAK,CAACzB,GAAG,CAAC,UAAUqB,IAAI,EAAE;MAAE,OAAOA,IAAI,CAAC1C,KAAK,CAACM,UAAU,CAACP,KAAK,EAAEQ,MAAM,CAAC;IAAE,CAAC,CAAC;IACnG,IAAI6C,OAAO,GAAG,IAAI1D,MAAM,CAAC2D,WAAW,CAAC,CAAC;IACtC;IACA,IAAIC,cAAc,GAAG,IAAI,CAACR,KAAK,CAACzB,GAAG,CAAC,UAAUqB,IAAI,EAAE1B,CAAC,EAAE;MACnD,OAAO,CAAC0B,IAAI,CAACa,KAAK,IAAI,CAACJ,YAAY,CAACnC,CAAC,CAAC,CAACwC,SAAS,EAAEJ,OAAO,CAAC;IAC9D,CAAC,CAAC;IACF,IAAI3C,OAAO,GAAG,SAAAA,CAAU7C,KAAK,EAAE8C,GAAG,EAAE;MAChC,IAAI,OAAO9C,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;QAC7C,OAAO8C,GAAG,CAACC,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;MAChD;MACA,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkC,YAAY,CAACjC,MAAM,EAAED,CAAC,EAAE,EAAE;QAC1C,IAAI,CAACkC,YAAY,CAAClC,CAAC,CAAC,CAACpD,KAAK,EAAE8C,GAAG,CAAC,EAAE;UAC9B,OAAO,KAAK;QAChB;MACJ;MACA,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmC,YAAY,CAAClC,MAAM,EAAED,CAAC,EAAE,EAAE;QAC1C,IAAIyC,MAAM,GAAGtD,KAAK,CAAC2C,KAAK,CAAC9B,CAAC,CAAC,CAACxB,IAAI;QAChC,IAAIkE,CAAC,GAAG9F,KAAK,CAAC6F,MAAM,CAAC;QACrB,IAAIC,CAAC,KAAKF,SAAS,EAAE;UACjB,IAAIF,cAAc,CAACtC,CAAC,CAAC,EAAE;YACnB,OAAON,GAAG,CAACC,IAAI,CAAC8C,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;UAC5C;QACJ,CAAC,MACI;UACD,IAAIvC,EAAE,GAAGiC,YAAY,CAACnC,CAAC,CAAC,CAAC0C,CAAC,EAAEhD,GAAG,CAAC;UAChC,IAAI,CAACQ,EAAE,EAAE;YACL,OAAOR,GAAG,CAACC,IAAI,CAAC8C,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;UACpC;QACJ;MACJ;MACA,OAAO,IAAI;IACf,CAAC;IACD,IAAI,CAAClD,MAAM,EAAE;MACT,OAAOE,OAAO;IAClB;IACA,IAAIwC,OAAO,GAAG,IAAI,CAACA,OAAO;IAC1B,IAAIzC,YAAY,EAAE;MACd,IAAI,CAACyC,OAAO,CAACU,OAAO,CAAC,UAAUjB,IAAI,EAAE;QAAE,OAAOlC,YAAY,CAACoD,GAAG,CAAClB,IAAI,CAAC;MAAE,CAAC,CAAC;MACxEO,OAAO,GAAGzC,YAAY;IAC1B;IACA;IACA,OAAO,UAAU5C,KAAK,EAAE8C,GAAG,EAAE;MACzB,IAAI,CAACD,OAAO,CAAC7C,KAAK,EAAE8C,GAAG,CAAC,EAAE;QACtB,OAAO,KAAK;MAChB;MACA,KAAK,IAAIgC,IAAI,IAAI9E,KAAK,EAAE;QACpB,IAAI,CAACqF,OAAO,CAACR,GAAG,CAACC,IAAI,CAAC,EAAE;UACpB,OAAOhC,GAAG,CAACC,IAAI,CAAC+B,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;QAC7C;MACJ;MACA,OAAO,IAAI;IACf,CAAC;EACL,CAAC;EACD,OAAOnE,MAAM;AACjB,CAAC,CAACkB,KAAK,CAAE;AACT9B,OAAO,CAACY,MAAM,GAAGA,MAAM;AACvB;AACA;AACA;AACA,SAASD,GAAGA,CAACuB,QAAQ,EAAE;EAAE,OAAO,IAAIxB,SAAS,CAACuB,SAAS,CAACC,QAAQ,CAAC,CAAC;AAAE;AACpElC,OAAO,CAACW,GAAG,GAAGA,GAAG;AACjB,IAAID,SAAS,GAAG,aAAe,UAAU6B,MAAM,EAAE;EAC7CtD,SAAS,CAACyB,SAAS,EAAE6B,MAAM,CAAC;EAC5B,SAAS7B,SAASA,CAAC2B,KAAK,EAAE;IACtB,IAAIG,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACH,KAAK,GAAGA,KAAK;IACnB,OAAOG,KAAK;EAChB;EACA9B,SAAS,CAACb,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IACtD,IAAIO,WAAW,GAAG,IAAI,CAACd,KAAK,CAACM,UAAU,CAACP,KAAK,EAAEQ,MAAM,CAAC;IACtD,OAAO,UAAU3C,KAAK,EAAE8C,GAAG,EAAE;MACzB,OAAO9C,KAAK,KAAK4F,SAAS,IAAI1C,WAAW,CAAClD,KAAK,EAAE8C,GAAG,CAAC;IACzD,CAAC;EACL,CAAC;EACD,OAAOrC,SAAS;AACpB,CAAC,CAACoB,KAAK,CAAE;AACT9B,OAAO,CAACU,SAAS,GAAGA,SAAS;AAC7B;AACA;AACA;AACA,IAAID,KAAK,GAAG,aAAe,YAAY;EACnC,SAASA,KAAKA,CAACoB,IAAI,EAAEQ,KAAK,EAAEuD,KAAK,EAAE;IAC/B,IAAI,CAAC/D,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACQ,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACuD,KAAK,GAAGA,KAAK;EACtB;EACA,OAAOnF,KAAK;AAChB,CAAC,CAAC,CAAE;AACJT,OAAO,CAACS,KAAK,GAAGA,KAAK;AACrB;AACA;AACA;AACA;AACA,SAASD,IAAIA,CAAC0F,UAAU,EAAE;EACtB,IAAIC,MAAM,GAAG,EAAE;EACf,KAAK,IAAI3C,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGC,SAAS,CAACH,MAAM,EAAEE,EAAE,EAAE,EAAE;IAC1C2C,MAAM,CAAC3C,EAAE,GAAG,CAAC,CAAC,GAAGC,SAAS,CAACD,EAAE,CAAC;EAClC;EACA,OAAO,IAAIjD,KAAK,CAAC,IAAIH,UAAU,CAAC+F,MAAM,CAAC,EAAElE,SAAS,CAACiE,UAAU,CAAC,CAAC;AACnE;AACAlG,OAAO,CAACQ,IAAI,GAAGA,IAAI;AACnB,IAAID,KAAK,GAAG,aAAe,UAAUgC,MAAM,EAAE;EACzCtD,SAAS,CAACsB,KAAK,EAAEgC,MAAM,CAAC;EACxB,SAAShC,KAAKA,CAAC6F,SAAS,EAAEC,MAAM,EAAE;IAC9B,IAAI7D,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAAC4D,SAAS,GAAGA,SAAS;IAC3B5D,KAAK,CAAC6D,MAAM,GAAGA,MAAM;IACrB,OAAO7D,KAAK;EAChB;EACAjC,KAAK,CAACV,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IAClD,OAAO,UAAU3C,KAAK,EAAE8C,GAAG,EAAE;MACzB,OAAO,OAAO9C,KAAK,KAAK,UAAU,GAAG,IAAI,GAAG8C,GAAG,CAACC,IAAI,CAAC,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACtF,CAAC;EACL,CAAC;EACD,OAAOzC,KAAK;AAChB,CAAC,CAACuB,KAAK,CAAE;AACT9B,OAAO,CAACO,KAAK,GAAGA,KAAK;AACrB;AACA;AACA;AACA,SAASD,KAAKA,CAACuB,IAAI,EAAEK,QAAQ,EAAE0D,KAAK,EAAE;EAClC,OAAO,IAAIvF,MAAM,CAACwB,IAAI,EAAEI,SAAS,CAACC,QAAQ,CAAC,EAAEoE,OAAO,CAACV,KAAK,CAAC,CAAC;AAChE;AACA5F,OAAO,CAACM,KAAK,GAAGA,KAAK;AACrB,IAAID,MAAM,GAAG,aAAe,YAAY;EACpC,SAASA,MAAMA,CAACwB,IAAI,EAAEQ,KAAK,EAAEuD,KAAK,EAAE;IAChC,IAAI,CAAC/D,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACQ,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACuD,KAAK,GAAGA,KAAK;EACtB;EACA,OAAOvF,MAAM;AACjB,CAAC,CAAC,CAAE;AACJL,OAAO,CAACK,MAAM,GAAGA,MAAM;AACvB;AACA;AACA;AACA,IAAID,UAAU,GAAG,aAAe,UAAUmC,MAAM,EAAE;EAC9CtD,SAAS,CAACmB,UAAU,EAAEmC,MAAM,CAAC;EAC7B,SAASnC,UAAUA,CAAC+F,MAAM,EAAE;IACxB,IAAI3D,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAAC2D,MAAM,GAAGA,MAAM;IACrB,OAAO3D,KAAK;EAChB;EACApC,UAAU,CAACP,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IACvD,IAAIJ,KAAK,GAAG,IAAI;IAChB,IAAIqB,YAAY,GAAG,IAAI,CAACsC,MAAM,CAACzC,GAAG,CAAC,UAAUC,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACtB,KAAK,CAACM,UAAU,CAACP,KAAK,EAAEQ,MAAM,CAAC;IAAE,CAAC,CAAC;IAC9F,IAAI6C,OAAO,GAAG,IAAI1D,MAAM,CAAC2D,WAAW,CAAC,CAAC;IACtC,IAAIa,eAAe,GAAG,IAAI,CAACJ,MAAM,CAACzC,GAAG,CAAC,UAAUpD,KAAK,EAAE+C,CAAC,EAAE;MACtD,OAAO,CAAC/C,KAAK,CAACsF,KAAK,IAAI,CAAC/B,YAAY,CAACR,CAAC,CAAC,CAACwC,SAAS,EAAEJ,OAAO,CAAC;IAC/D,CAAC,CAAC;IACF,IAAI3C,OAAO,GAAG,SAAAA,CAAU7C,KAAK,EAAE8C,GAAG,EAAE;MAChC,IAAI,CAACvD,KAAK,CAAC4D,OAAO,CAACnD,KAAK,CAAC,EAAE;QACvB,OAAO8C,GAAG,CAACC,IAAI,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;MAC/C;MACA,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGQ,YAAY,CAACP,MAAM,EAAED,CAAC,EAAE,EAAE;QAC1C,IAAI5D,CAAC,GAAG+C,KAAK,CAAC2D,MAAM,CAAC9C,CAAC,CAAC;QACvB,IAAIpD,KAAK,CAACoD,CAAC,CAAC,KAAKwC,SAAS,EAAE;UACxB,IAAIU,eAAe,CAAClD,CAAC,CAAC,EAAE;YACpB,OAAON,GAAG,CAACC,IAAI,CAACvD,CAAC,CAACoC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;UAC5C;QACJ,CAAC,MACI;UACD,IAAI0B,EAAE,GAAGM,YAAY,CAACR,CAAC,CAAC,CAACpD,KAAK,CAACoD,CAAC,CAAC,EAAEN,GAAG,CAAC;UACvC,IAAI,CAACQ,EAAE,EAAE;YACL,OAAOR,GAAG,CAACC,IAAI,CAACvD,CAAC,CAACoC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;UACpC;QACJ;MACJ;MACA,OAAO,IAAI;IACf,CAAC;IACD,IAAI,CAACe,MAAM,EAAE;MACT,OAAOE,OAAO;IAClB;IACA,OAAO,UAAU7C,KAAK,EAAE8C,GAAG,EAAE;MACzB,IAAI,CAACD,OAAO,CAAC7C,KAAK,EAAE8C,GAAG,CAAC,EAAE;QACtB,OAAO,KAAK;MAChB;MACA,OAAO9C,KAAK,CAACqD,MAAM,IAAIO,YAAY,CAACP,MAAM,GAAG,IAAI,GAC7CP,GAAG,CAACC,IAAI,CAACa,YAAY,CAACP,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IACzD,CAAC;EACL,CAAC;EACD,OAAOlD,UAAU;AACrB,CAAC,CAAC0B,KAAK,CAAE;AACT9B,OAAO,CAACI,UAAU,GAAGA,UAAU;AAC/B;AACA;AACA;AACA,IAAID,SAAS,GAAG,aAAe,UAAUoC,MAAM,EAAE;EAC7CtD,SAAS,CAACkB,SAAS,EAAEoC,MAAM,CAAC;EAC5B,SAASpC,SAASA,CAACqG,SAAS,EAAEC,OAAO,EAAE;IACnC,IAAIjE,KAAK,GAAGD,MAAM,CAACE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;IACrCD,KAAK,CAACgE,SAAS,GAAGA,SAAS;IAC3BhE,KAAK,CAACiE,OAAO,GAAGA,OAAO;IACvB,OAAOjE,KAAK;EAChB;EACArC,SAAS,CAACN,SAAS,CAAC8C,UAAU,GAAG,UAAUP,KAAK,EAAEQ,MAAM,EAAE;IACtD,IAAIJ,KAAK,GAAG,IAAI;IAChB,OAAO,UAAUvC,KAAK,EAAE8C,GAAG,EAAE;MAAE,OAAOP,KAAK,CAACgE,SAAS,CAACvG,KAAK,CAAC,GAAG,IAAI,GAAG8C,GAAG,CAACC,IAAI,CAAC,IAAI,EAAER,KAAK,CAACiE,OAAO,EAAE,CAAC,CAAC;IAAE,CAAC;EAC7G,CAAC;EACD,OAAOtG,SAAS;AACpB,CAAC,CAAC2B,KAAK,CAAE;AACT9B,OAAO,CAACG,SAAS,GAAGA,SAAS;AAC7B;AACA;AACA;AACAH,OAAO,CAACE,UAAU,GAAG;EACjBwG,GAAG,EAAE,IAAIvG,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAO,IAAI;EAAE,CAAC,EAAE,YAAY,CAAC;EAC/DY,MAAM,EAAE,IAAIxG,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAQ,OAAOA,CAAC,KAAK,QAAQ;EAAG,CAAC,EAAE,iBAAiB,CAAC;EAC1Fa,MAAM,EAAE,IAAIzG,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAQ,OAAOA,CAAC,KAAK,QAAQ,IAAIA,CAAC;EAAG,CAAC,EAAE,kBAAkB,CAAC;EAChGc,OAAO,EAAE,IAAI1G,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAQ,OAAOA,CAAC,KAAK,SAAS;EAAG,CAAC,EAAE,kBAAkB,CAAC;EAC7Fe,MAAM,EAAE,IAAI3G,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAQ,OAAOA,CAAC,KAAK,QAAQ;EAAG,CAAC,EAAE,iBAAiB,CAAC;EAC1FgB,MAAM,EAAE,IAAI5G,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAQ,OAAOA,CAAC,KAAK,QAAQ;EAAG,CAAC,EAAE,iBAAiB,CAAC;EAC1FiB,IAAI,EAAE,IAAI7G,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAQA,CAAC,IAAI,IAAI;EAAG,CAAC,EAAE,aAAa,CAAC;EACxEF,SAAS,EAAE,IAAI1F,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAQA,CAAC,KAAKF,SAAS;EAAG,CAAC,EAAE,kBAAkB,CAAC;EACxFoB,IAAI,EAAE,IAAI9G,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAQA,CAAC,KAAK,IAAI;EAAG,CAAC,EAAE,aAAa,CAAC;EACzEmB,KAAK,EAAE,IAAI/G,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAO,KAAK;EAAE,CAAC,EAAE,eAAe,CAAC;EACrEoB,IAAI,EAAE,IAAIhH,SAAS,CAACiH,kBAAkB,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;EACzEC,MAAM,EAAE,IAAIlH,SAAS,CAACiH,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,iBAAiB;AAClF,CAAC;AACD;AACA;AACA;AACA,IAAIE,cAAc,GAAGjI,MAAM,CAACQ,SAAS,CAAC0H,QAAQ;AAC9C,SAASH,kBAAkBA,CAACI,GAAG,EAAE;EAC7B,OAAO,UAAUzB,CAAC,EAAE;IAAE,OAAO,OAAOA,CAAC,KAAK,QAAQ,IAAIA,CAAC,IAAIuB,cAAc,CAAC7E,IAAI,CAACsD,CAAC,CAAC,KAAKyB,GAAG;EAAE,CAAC;AAChG;AACA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;EAC/BzH,OAAO,CAACE,UAAU,CAACuH,MAAM,GAAG,IAAItH,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAO0B,MAAM,CAACC,QAAQ,CAAC3B,CAAC,CAAC;EAAE,CAAC,EAAE,iBAAiB,CAAC;AAC7G;AACA,IAAI4B,OAAO,GAAG,SAAAA,CAAUC,OAAO,EAAE;EAC7B5H,OAAO,CAACE,UAAU,CAAC0H,OAAO,CAAC/F,IAAI,CAAC,GAAG,IAAI1B,SAAS,CAAC,UAAU4F,CAAC,EAAE;IAAE,OAAQA,CAAC,YAAY6B,OAAO;EAAG,CAAC,EAAE,WAAW,GAAGA,OAAO,CAAC/F,IAAI,CAAC;AACjI,CAAC;AACD;AACA,KAAK,IAAI2B,EAAE,GAAG,CAAC,EAAEqE,EAAE,GAAG,CAACC,SAAS,EAAEC,UAAU,EAAEC,iBAAiB,EAAEC,UAAU,EAAEC,WAAW,EACpFC,UAAU,EAAEC,WAAW,EAAEC,YAAY,EAAEC,YAAY,EAAEC,WAAW,CAAC,EAAE/E,EAAE,GAAGqE,EAAE,CAACvE,MAAM,EAAEE,EAAE,EAAE,EAAE;EACzF,IAAIoE,OAAO,GAAGC,EAAE,CAACrE,EAAE,CAAC;EACpBmE,OAAO,CAACC,OAAO,CAAC;AACpB"},"metadata":{},"sourceType":"script","externalDependencies":[]}