UNPKG

computed-types

Version:

Runtime validation types for TypeScript.

54 lines (40 loc) 18.6 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _Validator = _interopRequireDefault(require("./Validator")); var _compiler = _interopRequireDefault(require("./schema/compiler")); var _logic = require("./schema/logic"); var _validations = require("./schema/validations"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function schema(schema, opts) { let error; let strict; if (opts) { if (typeof opts === 'object' && !(opts instanceof Error)) { error = opts.error; strict = opts.strict; } else { error = opts; } } return new _Validator.default((0, _compiler.default)(schema, { error, strict })).proxy(); } schema.either = function (...candidates) { return new _Validator.default((0, _logic.either)(...candidates)).proxy(); }; schema.merge = function (...args) { return new _Validator.default((0, _logic.merge)(...args)).proxy(); }; schema.enum = function (value, error) { return new _Validator.default((0, _validations.enumValue)(value, error)).proxy(); }; schema.record = function (key, value, error) { return new _Validator.default((0, _validations.recordValue)(key, value, error)).proxy(); }; const Schema = schema; var _default = Schema; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TY2hlbWEudHMiXSwibmFtZXMiOlsic2NoZW1hIiwib3B0cyIsImVycm9yIiwic3RyaWN0IiwiRXJyb3IiLCJWYWxpZGF0b3IiLCJwcm94eSIsImVpdGhlciIsImNhbmRpZGF0ZXMiLCJtZXJnZSIsImFyZ3MiLCJlbnVtIiwidmFsdWUiLCJyZWNvcmQiLCJrZXkiLCJTY2hlbWEiXSwibWFwcGluZ3MiOiI7Ozs7O0FBUUE7O0FBQ0E7O0FBQ0E7O0FBR0E7Ozs7QUFrVkEsU0FBU0EsTUFBVCxDQUNFQSxNQURGLEVBRUVDLElBRkYsRUFReUQ7QUFDdkQsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE1BQUo7O0FBRUEsTUFBSUYsSUFBSixFQUFVO0FBQ1IsUUFBSSxPQUFPQSxJQUFQLEtBQWdCLFFBQWhCLElBQTRCLEVBQUVBLElBQUksWUFBWUcsS0FBbEIsQ0FBaEMsRUFBMEQ7QUFDeERGLE1BQUFBLEtBQUssR0FBR0QsSUFBSSxDQUFDQyxLQUFiO0FBQ0FDLE1BQUFBLE1BQU0sR0FBR0YsSUFBSSxDQUFDRSxNQUFkO0FBQ0QsS0FIRCxNQUdPO0FBQ0xELE1BQUFBLEtBQUssR0FBR0QsSUFBUjtBQUNEO0FBQ0Y7O0FBRUQsU0FBTyxJQUFJSSxrQkFBSixDQUFjLHVCQUFTTCxNQUFULEVBQWlCO0FBQUVFLElBQUFBLEtBQUY7QUFBU0MsSUFBQUE7QUFBVCxHQUFqQixDQUFkLEVBQW1ERyxLQUFuRCxFQUFQO0FBQ0Q7O0FBRUROLE1BQU0sQ0FBQ08sTUFBUCxHQUFnQixVQUNkLEdBQUdDLFVBRFcsRUFTZDtBQUNBLFNBQU8sSUFBSUgsa0JBQUosQ0FDTCxtQkFBYSxHQUFJRyxVQUFqQixDQURLLEVBRUxGLEtBRkssRUFBUDtBQVVELENBcEJEOztBQXNCQU4sTUFBTSxDQUFDUyxLQUFQLEdBQWUsVUFDYixHQUFHQyxJQURVLEVBRTRCO0FBQ3pDLFNBQU8sSUFBSUwsa0JBQUosQ0FDTCxrQkFBYSxHQUFJSyxJQUFqQixDQURLLEVBRUxKLEtBRkssRUFBUDtBQUdELENBTkQ7O0FBUUFOLE1BQU0sQ0FBQ1csSUFBUCxHQUFjLFVBSVpDLEtBSlksRUFLWlYsS0FMWSxFQU00QztBQUN4RCxTQUFPLElBQUlHLGtCQUFKLENBQWMsNEJBQVVPLEtBQVYsRUFBaUJWLEtBQWpCLENBQWQsRUFBdUNJLEtBQXZDLEVBQVA7QUFDRCxDQVJEOztBQVVBTixNQUFNLENBQUNhLE1BQVAsR0FBZ0IsVUFPZEMsR0FQYyxFQVFkRixLQVJjLEVBU2RWLEtBVGMsRUFVNEM7QUFDMUQsU0FBTyxJQUFJRyxrQkFBSixDQUFjLDhCQUFZUyxHQUFaLEVBQWlCRixLQUFqQixFQUF3QlYsS0FBeEIsQ0FBZCxFQUE4Q0ksS0FBOUMsRUFBUDtBQUNELENBWkQ7O0FBY0EsTUFBTVMsTUFBa0IsR0FBR2YsTUFBM0I7ZUFFZWUsTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVycm9yTGlrZSB9IGZyb20gJy4vc2NoZW1hL2Vycm9ycyc7XG5pbXBvcnQge1xuICBNZXJnZVNjaGVtYVBhcmFtZXRlcnMsXG4gIFNjaGVtYVBhcmFtZXRlcnMsXG4gIFNjaGVtYVJlc29sdmVUeXBlLFxuICBTY2hlbWFSZXR1cm5UeXBlLFxuICBTY2hlbWFWYWxpZGF0b3JGdW5jdGlvbixcbn0gZnJvbSAnLi9zY2hlbWEvaW8nO1xuaW1wb3J0IFZhbGlkYXRvciwgeyBWYWxpZGF0b3JQcm94eSB9IGZyb20gJy4vVmFsaWRhdG9yJztcbmltcG9ydCBjb21waWxlciBmcm9tICcuL3NjaGVtYS9jb21waWxlcic7XG5pbXBvcnQgeyBlaXRoZXIgYXMgZWl0aGVyU2NoZW1hLCBtZXJnZSBhcyBtZXJnZVNjaGVtYXMgfSBmcm9tICcuL3NjaGVtYS9sb2dpYyc7XG5pbXBvcnQgRnVuY3Rpb25UeXBlLCB7IEZ1bmN0aW9uUGFyYW1ldGVycyB9IGZyb20gJy4vc2NoZW1hL0Z1bmN0aW9uVHlwZSc7XG5pbXBvcnQgeyBFbnVtLCBPYmplY3RQcm9wZXJ0eSB9IGZyb20gJy4vc2NoZW1hL3V0aWxzJztcbmltcG9ydCB7IGVudW1WYWx1ZSwgcmVjb3JkVmFsdWUgfSBmcm9tICcuL3NjaGVtYS92YWxpZGF0aW9ucyc7XG5cbmludGVyZmFjZSBTY2hlbWFUeXBlIHtcbiAgPFM+KFxuICAgIHNjaGVtYTogUyxcbiAgICBvcHRzPzpcbiAgICAgIHwgRXJyb3JMaWtlPFNjaGVtYVBhcmFtZXRlcnM8Uz4+XG4gICAgICB8IHtcbiAgICAgICAgICBlcnJvcj86IEVycm9yTGlrZTxTY2hlbWFQYXJhbWV0ZXJzPFM+PjtcbiAgICAgICAgICBzdHJpY3Q/OiBib29sZWFuO1xuICAgICAgICB9LFxuICApOiBWYWxpZGF0b3JQcm94eTxWYWxpZGF0b3I8U2NoZW1hVmFsaWRhdG9yRnVuY3Rpb248Uz4+PjtcblxuICBlaXRoZXI8QT4oXG4gICAgLi4uY2FuZGlkYXRlczogW0FdXG4gICk6IFZhbGlkYXRvclByb3h5PFxuICAgIFZhbGlkYXRvcjxGdW5jdGlvblR5cGU8U2NoZW1hUmV0dXJuVHlwZTxBPiwgU2NoZW1hUGFyYW1ldGVyczxBPj4+XG4gID47XG4gIGVpdGhlcjxBLCBCPihcbiAgICAuLi5jYW5kaWRhdGVzOiBbQSwgQl1cbiAgKTogVmFsaWRhdG9yUHJveHk8XG4gICAgVmFsaWRhdG9yPFxuICAgICAgRnVuY3Rpb25UeXBlPFxuICAgICAgICBTY2hlbWFSZXR1cm5UeXBlPEE+IHwgU2NoZW1hUmV0dXJuVHlwZTxCPixcbiAgICAgICAgTWVyZ2VTY2hlbWFQYXJhbWV0ZXJzPFNjaGVtYVBhcmFtZXRlcnM8QT4gfCBTY2hlbWFQYXJhbWV0ZXJzPEI+PlxuICAgICAgPlxuICAgID5cbiAgPjtcbiAgZWl0aGVyPEEsIEIsIEM+KFxuICAgIC4uLmNhbmRpZGF0ZXM6IFtBLCBCLCBDXVxuICApOiBWYWxpZGF0b3JQcm94eTxcbiAgICBWYWxpZGF0b3I8XG4gICAgICBGdW5jdGlvblR5cGU8XG4gICAgICAgIFNjaGVtYVJldHVyblR5cGU8QT4gfCBTY2hlbWFSZXR1cm5UeXBlPEI+IHwgU2NoZW1hUmV0dXJuVHlwZTxDPixcbiAgICAgICAgTWVyZ2VTY2hlbWFQYXJhbWV0ZXJzPFxuICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8QT4gfCBTY2hlbWFQYXJhbWV0ZXJzPEI+IHwgU2NoZW1hUGFyYW1ldGVyczxDPlxuICAgICAgICA+XG4gICAgICA+XG4gICAgPlxuICA+O1xuICBlaXRoZXI8QSwgQiwgQywgRD4oXG4gICAgLi4uY2FuZGlkYXRlczogW0EsIEIsIEMsIERdXG4gICk6IFZhbGlkYXRvclByb3h5PFxuICAgIFZhbGlkYXRvcjxcbiAgICAgIEZ1bmN0aW9uVHlwZTxcbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEE+XG4gICAgICAgIHwgU2NoZW1hUmV0dXJuVHlwZTxCPlxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8Qz5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEQ+LFxuICAgICAgICBNZXJnZVNjaGVtYVBhcmFtZXRlcnM8XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEE+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEI+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEM+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEQ+XG4gICAgICAgID5cbiAgICAgID5cbiAgICA+XG4gID47XG4gIGVpdGhlcjxBLCBCLCBDLCBELCBFPihcbiAgICAuLi5jYW5kaWRhdGVzOiBbQSwgQiwgQywgRCwgRV1cbiAgKTogVmFsaWRhdG9yUHJveHk8XG4gICAgVmFsaWRhdG9yPFxuICAgICAgRnVuY3Rpb25UeXBlPFxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8QT5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEI+XG4gICAgICAgIHwgU2NoZW1hUmV0dXJuVHlwZTxDPlxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8RD5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEU+LFxuICAgICAgICBNZXJnZVNjaGVtYVBhcmFtZXRlcnM8XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEE+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEI+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEM+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEQ+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEU+XG4gICAgICAgID5cbiAgICAgID5cbiAgICA+XG4gID47XG4gIGVpdGhlcjxBLCBCLCBDLCBELCBFLCBGPihcbiAgICAuLi5jYW5kaWRhdGVzOiBbQSwgQiwgQywgRCwgRSwgRl1cbiAgKTogVmFsaWRhdG9yUHJveHk8XG4gICAgVmFsaWRhdG9yPFxuICAgICAgRnVuY3Rpb25UeXBlPFxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8QT5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEI+XG4gICAgICAgIHwgU2NoZW1hUmV0dXJuVHlwZTxDPlxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8RD5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEU+XG4gICAgICAgIHwgU2NoZW1hUmV0dXJuVHlwZTxGPixcbiAgICAgICAgTWVyZ2VTY2hlbWFQYXJhbWV0ZXJzPFxuICAgICAgICAgIHwgU2NoZW1hUGFyYW1ldGVyczxBPlxuICAgICAgICAgIHwgU2NoZW1hUGFyYW1ldGVyczxCPlxuICAgICAgICAgIHwgU2NoZW1hUGFyYW1ldGVyczxDPlxuICAgICAgICAgIHwgU2NoZW1hUGFyYW1ldGVyczxEPlxuICAgICAgICAgIHwgU2NoZW1hUGFyYW1ldGVyczxFPlxuICAgICAgICAgIHwgU2NoZW1hUGFyYW1ldGVyczxGPlxuICAgICAgICA+XG4gICAgICA+XG4gICAgPlxuICA+O1xuICBlaXRoZXI8QSwgQiwgQywgRCwgRSwgRiwgRz4oXG4gICAgLi4uY2FuZGlkYXRlczogW0EsIEIsIEMsIEQsIEUsIEYsIEddXG4gICk6IFZhbGlkYXRvclByb3h5PFxuICAgIFZhbGlkYXRvcjxcbiAgICAgIEZ1bmN0aW9uVHlwZTxcbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEE+XG4gICAgICAgIHwgU2NoZW1hUmV0dXJuVHlwZTxCPlxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8Qz5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEQ+XG4gICAgICAgIHwgU2NoZW1hUmV0dXJuVHlwZTxFPlxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8Rj5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEc+LFxuICAgICAgICBNZXJnZVNjaGVtYVBhcmFtZXRlcnM8XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEE+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEI+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEM+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEQ+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEU+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEY+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEc+XG4gICAgICAgID5cbiAgICAgID5cbiAgICA+XG4gID47XG4gIGVpdGhlcjxBLCBCLCBDLCBELCBFLCBGLCBHLCBIPihcbiAgICAuLi5jYW5kaWRhdGVzOiBbQSwgQiwgQywgRCwgRSwgRiwgRywgSF1cbiAgKTogVmFsaWRhdG9yUHJveHk8XG4gICAgVmFsaWRhdG9yPFxuICAgICAgRnVuY3Rpb25UeXBlPFxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8QT5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEI+XG4gICAgICAgIHwgU2NoZW1hUmV0dXJuVHlwZTxDPlxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8RD5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEU+XG4gICAgICAgIHwgU2NoZW1hUmV0dXJuVHlwZTxGPlxuICAgICAgICB8IFNjaGVtYVJldHVyblR5cGU8Rz5cbiAgICAgICAgfCBTY2hlbWFSZXR1cm5UeXBlPEg+LFxuICAgICAgICBNZXJnZVNjaGVtYVBhcmFtZXRlcnM8XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEE+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEI+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEM+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEQ+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEU+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEY+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEc+XG4gICAgICAgICAgfCBTY2hlbWFQYXJhbWV0ZXJzPEg+XG4gICAgICAgID5cbiAgICAgID5cbiAgICA+XG4gID47XG4gIGVpdGhlcjxBLCBTPihcbiAgICAuLi5jYW5kaWRhdGVzOiBbQSwgLi4uU1tdXVxuICApOiBWYWxpZGF0b3JQcm94eTxcbiAgICBWYWxpZGF0b3I8XG4gICAgICBGdW5jdGlvblR5cGU8XG4gICAgICAgIFNjaGVtYVJldHVyblR5cGU8QT4gfCBTY2hlbWFSZXR1cm5UeXBlPFM+LFxuICAgICAgICBNZXJnZVNjaGVtYVBhcmFtZXRlcnM8U2NoZW1hUGFyYW1ldGVyczxBIHwgUz4+XG4gICAgICA+XG4gICAgPlxuICA+O1xuXG4gIG1lcmdlPEE+KFxuICAgIC4uLmFyZ3M6IFtBXVxuICApOiBWYWxpZGF0b3JQcm94eTxcbiAgICBWYWxpZGF0b3I8RnVuY3Rpb25UeXBlPFNjaGVtYVJldHVyblR5cGU8QT4sIFNjaGVtYVBhcmFtZXRlcnM8QT4+PlxuICA+O1xuICBtZXJnZTxBLCBCPihcbiAgICAuLi5hcmdzOiBbQSwgQl1cbiAgKTogVmFsaWRhdG9yUHJveHk8XG4gICAgVmFsaWRhdG9yPFxuICAgICAgRnVuY3Rpb25UeXBlPFxuICAgICAgICBTY2hlbWFSZXR1cm5UeXBlPEEgJiBCLCBTY2hlbWFSZXNvbHZlVHlwZTxBPiAmIFNjaGVtYVJlc29sdmVUeXBlPEI+PixcbiAgICAgICAgTWVyZ2VTY2hlbWFQYXJhbWV0ZXJzPFNjaGVtYVBhcmFtZXRlcnM8QT4gJiBTY2hlbWFQYXJhbWV0ZXJzPEI+PlxuICAgICAgPlxuICAgID5cbiAgPjtcbiAgbWVyZ2U8QSwgQiwgQz4oXG4gICAgLi4uYXJnczogW0EsIEIsIENdXG4gICk6IFZhbGlkYXRvclByb3h5PFxuICAgIFZhbGlkYXRvcjxcbiAgICAgIEZ1bmN0aW9uVHlwZTxcbiAgICAgICAgU2NoZW1hUmV0dXJuVHlwZTxcbiAgICAgICAgICBBICYgQiAmIEMsXG4gICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8QT4gJiBTY2hlbWFSZXNvbHZlVHlwZTxCPiAmIFNjaGVtYVJlc29sdmVUeXBlPEM+XG4gICAgICAgID4sXG4gICAgICAgIE1lcmdlU2NoZW1hUGFyYW1ldGVyczxcbiAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEE+ICYgU2NoZW1hUGFyYW1ldGVyczxCPiAmIFNjaGVtYVBhcmFtZXRlcnM8Qz5cbiAgICAgICAgPlxuICAgICAgPlxuICAgID5cbiAgPjtcbiAgbWVyZ2U8QSwgQiwgQywgRD4oXG4gICAgLi4uYXJnczogW0EsIEIsIEMsIERdXG4gICk6IFZhbGlkYXRvclByb3h5PFxuICAgIFZhbGlkYXRvcjxcbiAgICAgIEZ1bmN0aW9uVHlwZTxcbiAgICAgICAgU2NoZW1hUmV0dXJuVHlwZTxcbiAgICAgICAgICBBICYgQiAmIEMgJiBELFxuICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEE+ICZcbiAgICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEI+ICZcbiAgICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEM+ICZcbiAgICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEQ+XG4gICAgICAgID4sXG4gICAgICAgIE1lcmdlU2NoZW1hUGFyYW1ldGVyczxcbiAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEE+ICZcbiAgICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8Qj4gJlxuICAgICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxDPiAmXG4gICAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEQ+XG4gICAgICAgID5cbiAgICAgID5cbiAgICA+XG4gID47XG4gIG1lcmdlPEEsIEIsIEMsIEQsIEU+KFxuICAgIC4uLmFyZ3M6IFtBLCBCLCBDLCBELCBFXVxuICApOiBWYWxpZGF0b3JQcm94eTxcbiAgICBWYWxpZGF0b3I8XG4gICAgICBGdW5jdGlvblR5cGU8XG4gICAgICAgIFNjaGVtYVJldHVyblR5cGU8XG4gICAgICAgICAgQSAmIEIgJiBDICYgRCAmIEUsXG4gICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8QT4gJlxuICAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8Qj4gJlxuICAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8Qz4gJlxuICAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8RD4gJlxuICAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8RT5cbiAgICAgICAgPixcbiAgICAgICAgTWVyZ2VTY2hlbWFQYXJhbWV0ZXJzPFxuICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8QT4gJlxuICAgICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxCPiAmXG4gICAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEM+ICZcbiAgICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8RD4gJlxuICAgICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxFPlxuICAgICAgICA+XG4gICAgICA+XG4gICAgPlxuICA+O1xuICBtZXJnZTxBLCBCLCBDLCBELCBFLCBGPihcbiAgICAuLi5hcmdzOiBbQSwgQiwgQywgRCwgRSwgRl1cbiAgKTogVmFsaWRhdG9yUHJveHk8XG4gICAgVmFsaWRhdG9yPFxuICAgICAgRnVuY3Rpb25UeXBlPFxuICAgICAgICBTY2hlbWFSZXR1cm5UeXBlPFxuICAgICAgICAgIEEgJiBCICYgQyAmIEQgJiBFICYgRixcbiAgICAgICAgICBTY2hlbWFSZXNvbHZlVHlwZTxBPiAmXG4gICAgICAgICAgICBTY2hlbWFSZXNvbHZlVHlwZTxCPiAmXG4gICAgICAgICAgICBTY2hlbWFSZXNvbHZlVHlwZTxDPiAmXG4gICAgICAgICAgICBTY2hlbWFSZXNvbHZlVHlwZTxEPiAmXG4gICAgICAgICAgICBTY2hlbWFSZXNvbHZlVHlwZTxFPiAmXG4gICAgICAgICAgICBTY2hlbWFSZXNvbHZlVHlwZTxGPlxuICAgICAgICA+LFxuICAgICAgICBNZXJnZVNjaGVtYVBhcmFtZXRlcnM8XG4gICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxBPiAmXG4gICAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEI+ICZcbiAgICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8Qz4gJlxuICAgICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxEPiAmXG4gICAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEU+ICZcbiAgICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8Rj5cbiAgICAgICAgPlxuICAgICAgPlxuICAgID5cbiAgPjtcbiAgLy8gbWVyZ2U8QSwgQiwgQywgRCwgRSwgRiwgRz4oXG4gIC8vICAgLi4uYXJnczogW0EsIEIsIEMsIEQsIEUsIEYsIEddXG4gIC8vICk6IFZhbGlkYXRvclByb3h5PFxuICAvLyAgIFZhbGlkYXRvcjxcbiAgLy8gICAgIEZ1bmN0aW9uVHlwZTxcbiAgLy8gICAgICAgU2NoZW1hUmV0dXJuVHlwZTxcbiAgLy8gICAgICAgICBBICYgQiAmIEMgJiBEICYgRSAmIEYgJiBHLFxuICAvLyAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEE+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEI+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEM+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEQ+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEU+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEY+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPEc+XG4gIC8vICAgICAgID4sXG4gIC8vICAgICAgIE1lcmdlU2NoZW1hUGFyYW1ldGVyczxcbiAgLy8gICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEE+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8Qj4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxDPiAmXG4gIC8vICAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEQ+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8RT4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxGPiAmXG4gIC8vICAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEc+XG4gIC8vICAgICAgID5cbiAgLy8gICAgID5cbiAgLy8gICA+XG4gIC8vID47XG4gIC8vIG1lcmdlPEEsIEIsIEMsIEQsIEUsIEYsIEcsIEg+KFxuICAvLyAgIC4uLmFyZ3M6IFtBLCBCLCBDLCBELCBFLCBGLCBHLCBIXVxuICAvLyApOiBWYWxpZGF0b3JQcm94eTxcbiAgLy8gICBWYWxpZGF0b3I8XG4gIC8vICAgICBGdW5jdGlvblR5cGU8XG4gIC8vICAgICAgIFNjaGVtYVJldHVyblR5cGU8XG4gIC8vICAgICAgICAgQSAmIEIgJiBDICYgRCAmIEUgJiBGICYgRyAmIEgsXG4gIC8vICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8QT4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8Qj4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8Qz4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8RD4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8RT4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8Rj4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8Rz4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8SD5cbiAgLy8gICAgICAgPixcbiAgLy8gICAgICAgTWVyZ2VTY2hlbWFQYXJhbWV0ZXJzPFxuICAvLyAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8QT4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxCPiAmXG4gIC8vICAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEM+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8RD4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxFPiAmXG4gIC8vICAgICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPEY+ICZcbiAgLy8gICAgICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8Rz4gJlxuICAvLyAgICAgICAgICAgU2NoZW1hUGFyYW1ldGVyczxIPlxuICAvLyAgICAgICA+XG4gIC8vICAgICA+XG4gIC8vICAgPlxuICAvLyA+O1xuICBtZXJnZShcbiAgICAuLi5hcmdzOiBbdW5rbm93biwgLi4udW5rbm93bltdXVxuICApOiBWYWxpZGF0b3JQcm94eTxWYWxpZGF0b3I8RnVuY3Rpb25UeXBlPj47XG5cbiAgZW51bTxFIGV4dGVuZHMgRW51bTxFPiwgUCBleHRlbmRzIEZ1bmN0aW9uUGFyYW1ldGVycyA9IFtFW2tleW9mIEVdXT4oXG4gICAgdmFsdWU6IEUsXG4gICAgZXJyb3I/OiBFcnJvckxpa2U8UD4sXG4gICk6IFZhbGlkYXRvclByb3h5PFZhbGlkYXRvcjxGdW5jdGlvblR5cGU8RVtrZXlvZiBFXSwgUD4+PjtcblxuICByZWNvcmQ8XG4gICAgSyBleHRlbmRzIE9iamVjdFByb3BlcnR5LFxuICAgIFYsXG4gICAgSUsgZXh0ZW5kcyBPYmplY3RQcm9wZXJ0eSxcbiAgICBJVixcbiAgICBQIGV4dGVuZHMgRnVuY3Rpb25QYXJhbWV0ZXJzID0gW1JlY29yZDxJSywgSVY+XSxcbiAgPihcbiAgICBrZXk6IEZ1bmN0aW9uVHlwZTxLLCBbSUtdPixcbiAgICB2YWx1ZTogRnVuY3Rpb25UeXBlPFYsIFtJVl0+LFxuICAgIGVycm9yPzogRXJyb3JMaWtlPFA+LFxuICApOiBWYWxpZGF0b3JQcm94eTxWYWxpZGF0b3I8RnVuY3Rpb25UeXBlPFJlY29yZDxLLCBWPiwgUD4+Pjtcbn1cblxuZnVuY3Rpb24gc2NoZW1hPFM+KFxuICBzY2hlbWE6IFMsXG4gIG9wdHM/OlxuICAgIHwgRXJyb3JMaWtlPFNjaGVtYVBhcmFtZXRlcnM8Uz4+XG4gICAgfCB7XG4gICAgICAgIGVycm9yPzogRXJyb3JMaWtlPFNjaGVtYVBhcmFtZXRlcnM8Uz4+O1xuICAgICAgICBzdHJpY3Q/OiBib29sZWFuO1xuICAgICAgfSxcbik6IFZhbGlkYXRvclByb3h5PFZhbGlkYXRvcjxTY2hlbWFWYWxpZGF0b3JGdW5jdGlvbjxTPj4+IHtcbiAgbGV0IGVycm9yOiBFcnJvckxpa2U8U2NoZW1hUGFyYW1ldGVyczxTPj4gfCB1bmRlZmluZWQ7XG4gIGxldCBzdHJpY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgaWYgKG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmICEob3B0cyBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgZXJyb3IgPSBvcHRzLmVycm9yO1xuICAgICAgc3RyaWN0ID0gb3B0cy5zdHJpY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yID0gb3B0cztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFZhbGlkYXRvcihjb21waWxlcihzY2hlbWEsIHsgZXJyb3IsIHN0cmljdCB9KSkucHJveHkoKTtcbn1cblxuc2NoZW1hLmVpdGhlciA9IGZ1bmN0aW9uIDxBLCBTPihcbiAgLi4uY2FuZGlkYXRlczogW0EsIC4uLlNbXV1cbik6IFZhbGlkYXRvclByb3h5PFxuICBWYWxpZGF0b3I8XG4gICAgRnVuY3Rpb25UeXBlPFxuICAgICAgU2NoZW1hUmV0dXJuVHlwZTxBPiB8IFNjaGVtYVJldHVyblR5cGU8Uz4sXG4gICAgICBNZXJnZVNjaGVtYVBhcmFtZXRlcnM8U2NoZW1hUGFyYW1ldGVyczxBIHwgUz4+XG4gICAgPlxuICA+XG4+IHtcbiAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXG4gICAgZWl0aGVyU2NoZW1hKC4uLihjYW5kaWRhdGVzIGFzIFt1bmtub3duXSkpLFxuICApLnByb3h5KCkgYXMgdW5rbm93biBhcyBWYWxpZGF0b3JQcm94eTxcbiAgICBWYWxpZGF0b3I8XG4gICAgICBGdW5jdGlvblR5cGU8XG4gICAgICAgIFNjaGVtYVJldHVyblR5cGU8QT4gfCBTY2hlbWFSZXR1cm5UeXBlPFM+LFxuICAgICAgICBNZXJnZVNjaGVtYVBhcmFtZXRlcnM8U2NoZW1hUGFyYW1ldGVyczxBIHwgUz4+XG4gICAgICA+XG4gICAgPlxuICA+O1xufTtcblxuc2NoZW1hLm1lcmdlID0gZnVuY3Rpb24gKFxuICAuLi5hcmdzOiBbdW5rbm93biwgLi4udW5rbm93bltdXVxuKTogVmFsaWRhdG9yUHJveHk8VmFsaWRhdG9yPEZ1bmN0aW9uVHlwZT4+IHtcbiAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXG4gICAgbWVyZ2VTY2hlbWFzKC4uLihhcmdzIGFzIFt1bmtub3duXSkpLFxuICApLnByb3h5KCkgYXMgVmFsaWRhdG9yUHJveHk8VmFsaWRhdG9yPEZ1bmN0aW9uVHlwZT4+O1xufTtcblxuc2NoZW1hLmVudW0gPSBmdW5jdGlvbiA8XG4gIEUgZXh0ZW5kcyBFbnVtPEU+LFxuICBQIGV4dGVuZHMgRnVuY3Rpb25QYXJhbWV0ZXJzID0gW0Vba2V5b2YgRV1dLFxuPihcbiAgdmFsdWU6IEUsXG4gIGVycm9yPzogRXJyb3JMaWtlPFA+LFxuKTogVmFsaWRhdG9yUHJveHk8VmFsaWRhdG9yPEZ1bmN0aW9uVHlwZTxFW2tleW9mIEVdLCBQPj4+IHtcbiAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoZW51bVZhbHVlKHZhbHVlLCBlcnJvcikpLnByb3h5KCk7XG59O1xuXG5zY2hlbWEucmVjb3JkID0gZnVuY3Rpb24gPFxuICBLIGV4dGVuZHMgT2JqZWN0UHJvcGVydHksXG4gIFYsXG4gIElLIGV4dGVuZHMgT2JqZWN0UHJvcGVydHksXG4gIElWLFxuICBQIGV4dGVuZHMgRnVuY3Rpb25QYXJhbWV0ZXJzID0gW1JlY29yZDxJSywgSVY+XSxcbj4oXG4gIGtleTogRnVuY3Rpb25UeXBlPEssIFtJS10+LFxuICB2YWx1ZTogRnVuY3Rpb25UeXBlPFYsIFtJVl0+LFxuICBlcnJvcj86IEVycm9yTGlrZTxQPixcbik6IFZhbGlkYXRvclByb3h5PFZhbGlkYXRvcjxGdW5jdGlvblR5cGU8UmVjb3JkPEssIFY+LCBQPj4+IHtcbiAgcmV0dXJuIG5ldyBWYWxpZGF0b3IocmVjb3JkVmFsdWUoa2V5LCB2YWx1ZSwgZXJyb3IpKS5wcm94eSgpO1xufTtcblxuY29uc3QgU2NoZW1hOiBTY2hlbWFUeXBlID0gc2NoZW1hO1xuXG5leHBvcnQgZGVmYXVsdCBTY2hlbWE7XG4iXX0=