computed-types
Version:
Runtime validation types for TypeScript.
222 lines (219 loc) • 32.6 kB
JavaScript
;
require("mocha");
var _utils = require("./utils");
/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/ban-types */
describe('schema/io', () => {
describe('SchemaParameters', () => {
it('primitives', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('primitives constructors', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('primitives values', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)(['foo']);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)([123]);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)([true]);
(0, _utils.typeCheck)([true]);
});
it('plain arrays', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)([[1]]);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)([[]]);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)([['foo', 1]]);
});
it('regexp', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)(['string']);
});
it('or', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)(['string']);
(0, _utils.typeCheck)(['string']);
(0, _utils.typeCheck)(['string']);
(0, _utils.typeCheck)(['string']);
});
it('functions', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('functions or', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('functions and', () => {
(0, _utils.typeCheck)('ok');
});
it('objects', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('validators properties', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('optional properties', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('optional array items', () => {
(0, _utils.typeCheck)('ok'); // Not supported Yet
// typeCheck<SchemaParameters<[(x?: string) => void]>, [[string?]]>('ok');
// typeCheck<SchemaParameters<[[number]?]>, [[[number]?]]>('ok');
});
});
describe('SchemaInput', () => {
it('basic use case', () => {
(0, _utils.typeCheck)('ok');
});
it('optional validator', () => {
(0, _utils.typeCheck)('ok');
});
});
describe('SchemaReturnType', () => {
it('primitives', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)(true);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('primitives constructors', () => {
(0, _utils.typeCheck)(true);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('primitives values', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('foo');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)(123);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)(true);
(0, _utils.typeCheck)(true);
});
it('plain arrays', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)([[1]]);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)([]);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)(['foo', 1]);
});
it('regexp', () => {
(0, _utils.typeCheck)(true);
(0, _utils.typeCheck)('string');
});
it('or', () => {
(0, _utils.typeCheck)(true);
(0, _utils.typeCheck)('string');
(0, _utils.typeCheck)('string');
(0, _utils.typeCheck)('string');
(0, _utils.typeCheck)('string');
});
it('validators', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('promises', () => {
(0, _utils.typeCheck)(true);
(0, _utils.typeCheck)(true);
(0, _utils.typeCheck)(true);
});
it('objects', () => {
(0, _utils.typeCheck)(true);
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('validators properties', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('optional properties', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('undefined properties', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('optional array items', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
});
describe('SchemaValidatorFunction', () => {
it('sync', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('async', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
it('maybe async', () => {
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
});
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvaW8udGVzdC50cyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0Il0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQVFBO0FBRUFBLFFBQVEsQ0FBQyxXQUFELEVBQWMsTUFBTTtBQUMxQkEsRUFBQUEsUUFBUSxDQUFDLGtCQUFELEVBQXFCLE1BQU07QUFDakNDLElBQUFBLEVBQUUsQ0FBQyxZQUFELEVBQWUsTUFBTTtBQUNyQiw0QkFBOEMsSUFBOUM7QUFDQSw0QkFBOEMsSUFBOUM7QUFDQSw0QkFBZ0QsSUFBaEQ7QUFDQSw0QkFBb0QsSUFBcEQ7QUFDQSw0QkFBZ0QsSUFBaEQ7QUFDQSw0QkFBMEMsSUFBMUM7QUFDQSw0QkFBMEMsSUFBMUM7QUFDQSw0QkFBNEMsSUFBNUM7QUFDRCxLQVRDLENBQUY7QUFXQUEsSUFBQUEsRUFBRSxDQUFDLHlCQUFELEVBQTRCLE1BQU07QUFDbEMsNEJBQXVELElBQXZEO0FBQ0EsNEJBQXVELElBQXZEO0FBQ0EsNEJBQTRELElBQTVEO0FBQ0EsNEJBQXNELElBQXREO0FBQ0EsNEJBR0UsSUFIRjtBQUlELEtBVEMsQ0FBRjtBQVdBQSxJQUFBQSxFQUFFLENBQUMsbUJBQUQsRUFBc0IsTUFBTTtBQUM1Qiw0QkFBNEMsSUFBNUM7QUFDQSw0QkFBNEMsQ0FBQyxLQUFELENBQTVDO0FBQ0EsNEJBQXdDLElBQXhDO0FBQ0EsNEJBQTJDLENBQUMsR0FBRCxDQUEzQztBQUNBLDRCQUEwQyxJQUExQztBQUNBLDRCQUEyQyxDQUFDLElBQUQsQ0FBM0M7QUFDQSw0QkFBNkMsQ0FBQyxJQUFELENBQTdDO0FBQ0QsS0FSQyxDQUFGO0FBVUFBLElBQUFBLEVBQUUsQ0FBQyxjQUFELEVBQWlCLE1BQU07QUFDdkIsNEJBQXNDLElBQXRDO0FBQ0EsNEJBQWtELElBQWxEO0FBQ0EsNEJBQWtFLElBQWxFO0FBQ0EsNEJBQW9ELElBQXBEO0FBQ0EsNEJBQXFELENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBckQ7QUFDQSw0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O0FBS0EsNEJBR0UsSUFIRjtBQUtBLDRCQUdFLElBSEY7QUFLQSw0QkFTRSxJQVRGO0FBVUQsS0F6Q0MsQ0FBRjtBQTJDQUEsSUFBQUEsRUFBRSxDQUFDLGFBQUQsRUFBZ0IsTUFBTTtBQUN0Qiw0QkFHRSxJQUhGO0FBS0EsNEJBR0UsSUFIRjtBQUtBLDRCQVdFLElBWEY7QUFhQSw0QkFLRSxJQUxGO0FBTUQsS0E5QkMsQ0FBRjtBQStCRCxHQXpGTyxDQUFSO0FBMEZELENBL1pPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ21vY2hhJztcbmltcG9ydCB7IHR5cGVDaGVjayB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgU2NoZW1hSW5wdXQsXG4gIFNjaGVtYVBhcmFtZXRlcnMsXG4gIFNjaGVtYVJlc29sdmVUeXBlLFxuICBTY2hlbWFWYWxpZGF0b3JGdW5jdGlvbixcbn0gZnJvbSAnLi9pbyc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlcyAqL1xuXG5kZXNjcmliZSgnc2NoZW1hL2lvJywgKCkgPT4ge1xuICBkZXNjcmliZSgnU2NoZW1hUGFyYW1ldGVycycsICgpID0+IHtcbiAgICBpdCgncHJpbWl0aXZlcycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPG51bWJlcj4sIFtudW1iZXJdPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPHN0cmluZz4sIFtzdHJpbmddPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPGJvb2xlYW4+LCBbYm9vbGVhbl0+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8dW5kZWZpbmVkPiwgW3VuZGVmaW5lZF0+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8dW5rbm93bj4sIFt1bmtub3duXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczxudWxsPiwgW251bGxdPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPHZvaWQ+LCBbdm9pZF0+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8YW55PiwgdW5rbm93bltdPignb2snKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmltaXRpdmVzIGNvbnN0cnVjdG9ycycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPFN0cmluZ0NvbnN0cnVjdG9yPiwgW2FueT9dPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPE51bWJlckNvbnN0cnVjdG9yPiwgW2FueT9dPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPEJvb2xlYW5Db25zdHJ1Y3Rvcj4sIFt1bmtub3duP10+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8T2JqZWN0Q29uc3RydWN0b3I+LCBbYW55XT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8U3ltYm9sQ29uc3RydWN0b3I+LFxuICAgICAgICBbKHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCk/XVxuICAgICAgPignb2snKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmltaXRpdmVzIHZhbHVlcycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPCdmb28nPiwgWydmb28nXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczwnZm9vJz4sIFsnYmFyJ10+KFsnZm9vJ10pO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8MTIzPiwgWzEyM10+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8MTIzPiwgW251bWJlcl0+KFsxMjNdKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPHRydWU+LCBbdHJ1ZV0+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8dHJ1ZT4sIFtmYWxzZV0+KFt0cnVlXSk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczx0cnVlPiwgW2Jvb2xlYW5dPihbdHJ1ZV0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3BsYWluIGFycmF5cycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPFtdPiwgW1tdXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczxbbnVtYmVyXT4sIFtbbnVtYmVyXV0+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8W251bWJlciwgc3RyaW5nXT4sIFtbbnVtYmVyLCBzdHJpbmddXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczxbdW5rbm93bl0+LCBbW3Vua25vd25dXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczxbdW5rbm93bl0+LCBbW3Vua25vd24/XV0+KFtbMV1dKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPFt1bmtub3duP10+LCBbW3Vua25vd24/XV0+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8W251bWJlcj9dPiwgW1tudW1iZXI/XV0+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8W251bWJlcj9dPiwgW1tudW1iZXJdXT4oW1tdXSk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczxzdHJpbmdbXT4sIFtzdHJpbmdbXV0+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8WzEsICdmb28nXT4sIFtbMSwgJ2ZvbyddXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczxbJ2ZvbycsIDFdPiwgW1sxLCAnZm9vJ11dPihbWydmb28nLCAxXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlZ2V4cCcsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPFJlZ0V4cD4sIFtzdHJpbmddPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPFJlZ0V4cD4sIFsnJ10+KFsnc3RyaW5nJ10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ29yJywgKCkgPT4ge1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8c3RyaW5nIHwgbnVtYmVyPiwgW3N0cmluZyB8IG51bWJlcl0+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8c3RyaW5nIHwgbnVtYmVyPiwgW3N0cmluZ10+KFsnc3RyaW5nJ10pO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8c3RyaW5nIHwgbnVtYmVyPiwgW251bWJlcl0+KFsnc3RyaW5nJ10pO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8c3RyaW5nIHwgbnVtYmVyPiwgWzFdPihbJ3N0cmluZyddKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPHN0cmluZyB8IG51bWJlcj4sIFsnc3RyJ10+KFsnc3RyaW5nJ10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Z1bmN0aW9ucycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPCgpID0+IHZvaWQ+LCBbXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczwoeDogdW5rbm93bikgPT4gdm9pZD4sIFt1bmtub3duXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczwoeDogc3RyaW5nKSA9PiB2b2lkPiwgW3N0cmluZ10+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8KHg/OiBzdHJpbmcpID0+IHZvaWQ+LCBbc3RyaW5nP10+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8KHg6ICdmb28nKSA9PiB2b2lkPiwgWydmb28nXT4oJ29rJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnVuY3Rpb25zIG9yJywgKCkgPT4ge1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8KCgpID0+IHZvaWQpIHwgKCgpID0+IHN0cmluZyk+LCBbXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8KCgpID0+IHZvaWQpIHwgKCh4OiBudW1iZXIpID0+IHN0cmluZyk+LFxuICAgICAgICBbbnVtYmVyXSB8IFtdXG4gICAgICA+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFxuICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPCgobzogc3RyaW5nKSA9PiB2b2lkKSB8ICgobzogbnVtYmVyKSA9PiB2b2lkKT4sXG4gICAgICAgIFtzdHJpbmddIHwgW251bWJlcl1cbiAgICAgID4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8XG4gICAgICAgICAgKChvOiB7IHg6IG51bWJlciB9KSA9PiB2b2lkKSB8ICgobzogeyB5OiBudW1iZXIgfSkgPT4gdm9pZClcbiAgICAgICAgPixcbiAgICAgICAgW3sgeDogbnVtYmVyIH1dIHwgW3sgeTogbnVtYmVyIH1dXG4gICAgICA+KCdvaycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Z1bmN0aW9ucyBhbmQnLCAoKSA9PiB7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIC8vIFNjaGVtYVBhcmFtZXRlcnM8XG4gICAgICAgIFBhcmFtZXRlcnM8KChvOiB7IHg6IG51bWJlciB9KSA9PiB2b2lkKSB8ICgobzogeyB5OiBudW1iZXIgfSkgPT4gdm9pZCk+LFxuICAgICAgICAvLyA+LFxuICAgICAgICBbeyB4OiBudW1iZXIgfV0gfCBbeyB5OiBudW1iZXIgfV1cbiAgICAgID4oJ29rJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnb2JqZWN0cycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPHt9PiwgW3t9XT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczx7IGZvbzogc3RyaW5nIH0+LCBbeyBmb286IHN0cmluZyB9XT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUGFyYW1ldGVyczx7IGZvbz86IHN0cmluZyB9PiwgW3sgZm9vPzogc3RyaW5nIH1dPignb2snKTtcbiAgICB9KTtcblxuICAgIGl0KCd2YWxpZGF0b3JzIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8eyBmb286ICh4OiBzdHJpbmcpID0+IHZvaWQgfT4sXG4gICAgICAgIFt7IGZvbzogc3RyaW5nIH1dXG4gICAgICA+KCdvaycpO1xuXG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8eyBmb286ICh4OiB1bmtub3duKSA9PiB2b2lkIH0+LFxuICAgICAgICBbeyBmb286IHVua25vd24gfV1cbiAgICAgID4oJ29rJyk7XG5cbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPHsgZm9vOiAoeDogYW55KSA9PiB2b2lkIH0+LCBbeyBmb286IGFueSB9XT4oXG4gICAgICAgICdvaycsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ29wdGlvbmFsIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8eyBmb286ICh4OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQgfT4sXG4gICAgICAgIFt7IGZvbzogc3RyaW5nIHwgdW5kZWZpbmVkIH1dXG4gICAgICA+KCdvaycpO1xuXG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8eyBmb286ICh4Pzogc3RyaW5nKSA9PiB2b2lkIH0+LFxuICAgICAgICBbeyBmb28/OiBzdHJpbmcgfV1cbiAgICAgID4oJ29rJyk7XG5cbiAgICAgIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPHsgZm9vOiAoKSA9PiB2b2lkIH0+LCBbe31dPignb2snKTtcblxuICAgICAgdHlwZUNoZWNrPFxuICAgICAgICBTY2hlbWFQYXJhbWV0ZXJzPHtcbiAgICAgICAgICBmb286IHsgYmFyOiAoeDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkIH07XG4gICAgICAgICAgeDogYm9vbGVhbjtcbiAgICAgICAgfT4sXG4gICAgICAgIFt7IGZvbzogeyBiYXI6IHN0cmluZyB8IHVuZGVmaW5lZCB9OyB4OiBib29sZWFuIH1dXG4gICAgICA+KCdvaycpO1xuXG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8eyBmb286IHsgYmFyOiAoeD86IHN0cmluZykgPT4gdm9pZCB9OyB4OiBib29sZWFuIH0+LFxuICAgICAgICBbeyBmb286IHsgYmFyPzogc3RyaW5nIH07IHg6IGJvb2xlYW4gfV1cbiAgICAgID4oJ29rJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnb3B0aW9uYWwgYXJyYXkgaXRlbXMnLCAoKSA9PiB7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVBhcmFtZXRlcnM8Wyh4OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWRdPixcbiAgICAgICAgW1tzdHJpbmcgfCB1bmRlZmluZWRdXVxuICAgICAgPignb2snKTtcblxuICAgICAgLy8gTm90IHN1cHBvcnRlZCBZZXRcblxuICAgICAgLy8gdHlwZUNoZWNrPFNjaGVtYVBhcmFtZXRlcnM8Wyh4Pzogc3RyaW5nKSA9PiB2b2lkXT4sIFtbc3RyaW5nP11dPignb2snKTtcbiAgICAgIC8vIHR5cGVDaGVjazxTY2hlbWFQYXJhbWV0ZXJzPFtbbnVtYmVyXT9dPiwgW1tbbnVtYmVyXT9dXT4oJ29rJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTY2hlbWFJbnB1dCcsICgpID0+IHtcbiAgICBpdCgnYmFzaWMgdXNlIGNhc2UnLCAoKSA9PiB7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYUlucHV0PHtcbiAgICAgICAgICBmb286ICh4OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgICAgICBiYXI6ICdoZWxsbyc7XG4gICAgICAgICAgb3B0aW9uYWw6IChpPzogbnVtYmVyKSA9PiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIH0+LFxuICAgICAgICB7IGZvbzogc3RyaW5nOyBiYXI6ICdoZWxsbyc7IG9wdGlvbmFsPzogbnVtYmVyIH1cbiAgICAgID4oJ29rJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnb3B0aW9uYWwgdmFsaWRhdG9yJywgKCkgPT4ge1xuICAgICAgdHlwZUNoZWNrPFxuICAgICAgICBTY2hlbWFJbnB1dDwoaT86IG51bWJlcikgPT4gbnVtYmVyIHwgdW5kZWZpbmVkPixcbiAgICAgICAgbnVtYmVyIHwgdW5kZWZpbmVkXG4gICAgICA+KCdvaycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2NoZW1hUmV0dXJuVHlwZScsICgpID0+IHtcbiAgICBpdCgncHJpbWl0aXZlcycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxudWxsPiwgbnVsbD4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8dm9pZD4sIHZvaWQ+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPG51bWJlcj4sIG51bWJlcj4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8c3RyaW5nPiwgc3RyaW5nLCB0cnVlPih0cnVlKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxib29sZWFuPiwgYm9vbGVhbj4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8W1NjaGVtYVJlc29sdmVUeXBlPHVua25vd24+XSwgW3Vua25vd25dPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFtTY2hlbWFSZXNvbHZlVHlwZTxhbnk+XSwgW2FueV0+KCdvaycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByaW1pdGl2ZXMgY29uc3RydWN0b3JzJywgKCkgPT4ge1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPFN0cmluZ0NvbnN0cnVjdG9yPiwgc3RyaW5nLCB0cnVlPih0cnVlKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxOdW1iZXJDb25zdHJ1Y3Rvcj4sIG51bWJlcj4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8Qm9vbGVhbkNvbnN0cnVjdG9yPiwgYm9vbGVhbj4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8T2JqZWN0Q29uc3RydWN0b3I+LCBvYmplY3Q+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPFN5bWJvbENvbnN0cnVjdG9yPiwgc3ltYm9sPignb2snKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmltaXRpdmVzIHZhbHVlcycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTwnZm9vJz4sICdmb28nPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTwnZm9vJz4sICdiYXInPignZm9vJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8MTIzPiwgMTIzPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTwxMjM+LCBudW1iZXI+KDEyMyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8dHJ1ZT4sIHRydWU+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPHRydWU+LCBmYWxzZT4odHJ1ZSk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8dHJ1ZT4sIGJvb2xlYW4+KHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3BsYWluIGFycmF5cycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxbXT4sIFtdPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxbbnVtYmVyXT4sIFtudW1iZXJdPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxbbnVtYmVyLCBzdHJpbmddPiwgW251bWJlciwgc3RyaW5nXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8W3Vua25vd25dPiwgW3Vua25vd25dPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxbdW5rbm93bl0+LCBbdW5rbm93bj9dPihbWzFdXSk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8W3Vua25vd24/XT4sIFt1bmtub3duP10+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPFtudW1iZXI/XT4sIFtudW1iZXI/XT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8W251bWJlcj9dPiwgW251bWJlcl0+KFtdKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxzdHJpbmdbXT4sIHN0cmluZ1tdPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxbMSwgJ2ZvbyddPiwgWzEsICdmb28nXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8Wydmb28nLCAxXT4sIFsxLCAnZm9vJ10+KFsnZm9vJywgMV0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlZ2V4cCcsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxSZWdFeHA+LCBzdHJpbmcsIHRydWU+KHRydWUpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPFJlZ0V4cD4sICcnPignc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnb3InLCAoKSA9PiB7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8c3RyaW5nIHwgbnVtYmVyPiwgc3RyaW5nIHwgbnVtYmVyLCB0cnVlPihcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8c3RyaW5nIHwgbnVtYmVyPiwgc3RyaW5nPignc3RyaW5nJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8c3RyaW5nIHwgbnVtYmVyPiwgbnVtYmVyPignc3RyaW5nJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8c3RyaW5nIHwgbnVtYmVyPiwgMT4oJ3N0cmluZycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPHN0cmluZyB8IG51bWJlcj4sICdzdHInPignc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndmFsaWRhdG9ycycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTwoKSA9PiB2b2lkPiwgdm9pZD4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8W1NjaGVtYVJlc29sdmVUeXBlPCgpID0+IHVua25vd24+XSwgW3Vua25vd25dPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxbU2NoZW1hUmVzb2x2ZVR5cGU8KCkgPT4gc3RyaW5nPl0sIFtzdHJpbmddPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxbU2NoZW1hUmVzb2x2ZVR5cGU8KCkgPT4gJ2Zvbyc+XSwgWydmb28nXT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8KCkgPT4gbnVtYmVyPiwgbnVtYmVyPignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTwoKSA9PiBib29sZWFuPiwgYm9vbGVhbj4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8KCkgPT4gZmFsc2U+LCBmYWxzZT4oJ29rJyk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8KCkgPT4gMT4sIDE+KCdvaycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Byb21pc2VzJywgKCkgPT4ge1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPCgpID0+IFByb21pc2U8c3RyaW5nPj4sIHN0cmluZywgdHJ1ZT4odHJ1ZSk7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPCgpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPj4sXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgdHJ1ZVxuICAgICAgPih0cnVlKTtcbiAgICAgIHR5cGVDaGVjazxcbiAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8KCkgPT4gbnVtYmVyIHwgUHJvbWlzZTxzdHJpbmc+PixcbiAgICAgICAgbnVtYmVyIHwgc3RyaW5nLFxuICAgICAgICB0cnVlXG4gICAgICA+KHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ29iamVjdHMnLCAoKSA9PiB7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8e30+LCB7fSwgdHJ1ZT4odHJ1ZSk7XG4gICAgICB0eXBlQ2hlY2s8U2NoZW1hUmVzb2x2ZVR5cGU8eyBmb286IHN0cmluZyB9PiwgeyBmb286IHN0cmluZyB9Pignb2snKTtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTx7IGZvbz86IHN0cmluZyB9PiwgeyBmb28/OiBzdHJpbmcgfT4oJ29rJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndmFsaWRhdG9ycyBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPHsgZm9vOiAoKSA9PiBzdHJpbmcgfT4sIHsgZm9vOiBzdHJpbmcgfT4oXG4gICAgICAgICdvaycsXG4gICAgICApO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPHsgZm9vOiAoKSA9PiAxIH0+LCB7IGZvbzogMSB9Pignb2snKTtcbiAgICAgIHR5cGVDaGVjazxcbiAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8eyBmb286ICgpID0+IDEgfCAnZm9vJyB9PixcbiAgICAgICAgeyBmb286IDEgfCAnZm9vJyB9XG4gICAgICA+KCdvaycpO1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPHsgZm9vOiAoKSA9PiB2b2lkIH0+LCB7IGZvbz86IHZvaWQgfT4oJ29rJyk7XG5cbiAgICAgIHR5cGVDaGVjazxcbiAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8eyBmb286ICgpID0+IFByb21pc2U8bnVtYmVyPiB9PixcbiAgICAgICAgeyBmb286IG51bWJlciB9XG4gICAgICA+KCdvaycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ29wdGlvbmFsIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPHsgZm9vOiAoeDogc3RyaW5nKSA9PiB2b2lkIH0+LFxuICAgICAgICB7IGZvbz86IHZvaWQgfVxuICAgICAgPignb2snKTtcblxuICAgICAgdHlwZUNoZWNrPFxuICAgICAgICBTY2hlbWFSZXNvbHZlVHlwZTx7IGZvbzogKHg/OiBzdHJpbmcpID0+IHZvaWQgfT4sXG4gICAgICAgIHsgZm9vPzogdm9pZCB9XG4gICAgICA+KCdvaycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VuZGVmaW5lZCBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgdHlwZUNoZWNrPFxuICAgICAgICBTY2hlbWFSZXNvbHZlVHlwZTx7IGZvbzogKHg6IHN0cmluZykgPT4gdW5kZWZpbmVkIH0+LFxuICAgICAgICB7IGZvbz86IHVuZGVmaW5lZCB9XG4gICAgICA+KCdvaycpO1xuXG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVJlc29sdmVUeXBlPHsgZm9vOiAoeDogc3RyaW5nKSA9PiB1bmRlZmluZWQgfCBudW1iZXIgfT4sXG4gICAgICAgIHsgZm9vPzogbnVtYmVyIH1cbiAgICAgID4oJ29rJyk7XG5cbiAgICAgIHR5cGVDaGVjazxcbiAgICAgICAgU2NoZW1hUmVzb2x2ZVR5cGU8eyBmb286ICh4Pzogc3RyaW5nKSA9PiBudW1iZXIgfT4sXG4gICAgICAgIHsgZm9vOiBudW1iZXIgfVxuICAgICAgPignb2snKTtcbiAgICB9KTtcblxuICAgIGl0KCdvcHRpb25hbCBhcnJheSBpdGVtcycsICgpID0+IHtcbiAgICAgIHR5cGVDaGVjazxTY2hlbWFSZXNvbHZlVHlwZTxbKHg6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZF0+LCBbdm9pZF0+KFxuICAgICAgICAnb2snLFxuICAgICAgKTtcblxuICAgICAgdHlwZUNoZWNrPFNjaGVtYVJlc29sdmVUeXBlPFsoeD86IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZF0+LCBbdm9pZF0+KFxuICAgICAgICAnb2snLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NjaGVtYVZhbGlkYXRvckZ1bmN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzeW5jJywgKCkgPT4ge1xuICAgICAgdHlwZUNoZWNrPFNjaGVtYVZhbGlkYXRvckZ1bmN0aW9uPCgpID0+IHN0cmluZz4sICgpID0+IHN0cmluZz4oJ29rJyk7XG5cbiAgICAgIHR5cGVDaGVjazxcbiAgICAgICAgU2NoZW1hVmFsaWRhdG9yRnVuY3Rpb248KCkgPT4gc3RyaW5nIHwgbnVtYmVyPixcbiAgICAgICAgKCkgPT4gc3RyaW5nIHwgbnVtYmVyXG4gICAgICA+KCdvaycpO1xuXG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVZhbGlkYXRvckZ1bmN0aW9uPHsgZm9vOiAoKSA9PiBzdHJpbmcgfCBudW1iZXIgfT4sXG4gICAgICAgICh4OiB7IGZvbz86IHVuZGVmaW5lZCB9KSA9PiB7IGZvbzogc3RyaW5nIHwgbnVtYmVyIH1cbiAgICAgID4oJ29rJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYXN5bmMnLCAoKSA9PiB7XG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVZhbGlkYXRvckZ1bmN0aW9uPCgpID0+IFByb21pc2VMaWtlPHN0cmluZz4+LFxuICAgICAgICAoKSA9PiBQcm9taXNlTGlrZTxzdHJpbmc+XG4gICAgICA+KCdvaycpO1xuXG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVZhbGlkYXRvckZ1bmN0aW9uPCgpID0+IFByb21pc2VMaWtlPHN0cmluZyB8IG51bWJlcj4+LFxuICAgICAgICAoKSA9PiBQcm9taXNlTGlrZTxzdHJpbmcgfCBudW1iZXI+XG4gICAgICA+KCdvaycpO1xuXG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVZhbGlkYXRvckZ1bmN0aW9uPCgpID0+IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyPj4sXG4gICAgICAgICgpID0+IFByb21pc2VMaWtlPHN0cmluZyB8IG51bWJlcj5cbiAgICAgID4oJ29rJyk7XG5cbiAgICAgIHR5cGVDaGVjazxcbiAgICAgICAgU2NoZW1hVmFsaWRhdG9yRnVuY3Rpb248KCkgPT4gUHJvbWlzZUxpa2U8dHJ1ZT4+LFxuICAgICAgICAoKSA9PiBQcm9taXNlTGlrZTx0cnVlPlxuICAgICAgPignb2snKTtcblxuICAgICAgdHlwZUNoZWNrPFxuICAgICAgICBTY2hlbWFWYWxpZGF0b3JGdW5jdGlvbjwoKSA9PiBQcm9taXNlPHN0cmluZz4+LFxuICAgICAgICAoKSA9PiBQcm9taXNlTGlrZTxzdHJpbmc+XG4gICAgICA+KCdvaycpO1xuXG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVZhbGlkYXRvckZ1bmN0aW9uPHsgZm9vKCk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyPiB9PixcbiAgICAgICAgKHg6IHsgZm9vPzogdW5kZWZpbmVkIH0pID0+IFByb21pc2VMaWtlPHsgZm9vOiBzdHJpbmcgfCBudW1iZXIgfT5cbiAgICAgID4oJ29rJyk7XG5cbiAgICAgIHR5cGVDaGVjazxcbiAgICAgICAgU2NoZW1hVmFsaWRhdG9yRnVuY3Rpb248e1xuICAgICAgICAgIGZvbzogKCkgPT4gUHJvbWlzZTxzdHJpbmcgfCBudW1iZXI+O1xuICAgICAgICAgIGJhcjogc3RyaW5nO1xuICAgICAgICB9PixcbiAgICAgICAgKHg6IHtcbiAgICAgICAgICBmb28/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgYmFyOiBzdHJpbmc7XG4gICAgICAgIH0pID0+IFByb21pc2VMaWtlPHsgZm9vOiBzdHJpbmcgfCBudW1iZXI7IGJhcjogc3RyaW5nIH0+XG4gICAgICA+KCdvaycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21heWJlIGFzeW5jJywgKCkgPT4ge1xuICAgICAgdHlwZUNoZWNrPFxuICAgICAgICBTY2hlbWFWYWxpZGF0b3JGdW5jdGlvbjwoKSA9PiBzdHJpbmcgfCBQcm9taXNlTGlrZTxudW1iZXI+PixcbiAgICAgICAgKCkgPT4gc3RyaW5nIHwgbnVtYmVyIHwgUHJvbWlzZUxpa2U8bnVtYmVyIHwgc3RyaW5nPlxuICAgICAgPignb2snKTtcblxuICAgICAgdHlwZUNoZWNrPFxuICAgICAgICBTY2hlbWFWYWxpZGF0b3JGdW5jdGlvbjwoKSA9PiB1bmtub3duPixcbiAgICAgICAgKCkgPT4gdW5rbm93biB8IFByb21pc2VMaWtlPHVua25vd24+XG4gICAgICA+KCdvaycpO1xuXG4gICAgICB0eXBlQ2hlY2s8XG4gICAgICAgIFNjaGVtYVZhbGlkYXRvckZ1bmN0aW9uPHtcbiAgICAgICAgICBmb286ICgpID0+IFByb21pc2U8c3RyaW5nPiB8IG51bWJlcjtcbiAgICAgICAgICBiYXI6IHN0cmluZztcbiAgICAgICAgfT4sXG4gICAgICAgICh4OiB7XG4gICAgICAgICAgZm9vPzogdW5kZWZpbmVkO1xuICAgICAgICAgIGJhcjogc3RyaW5nO1xuICAgICAgICB9KSA9PlxuICAgICAgICAgIHwgUHJvbWlzZUxpa2U8eyBmb286IHN0cmluZyB8IG51bWJlcjsgYmFyOiBzdHJpbmcgfT5cbiAgICAgICAgICB8IHsgZm9vOiBzdHJpbmcgfCBudW1iZXI7IGJhcjogc3RyaW5nIH1cbiAgICAgID4oJ29rJyk7XG5cbiAgICAgIHR5cGVDaGVjazxcbiAgICAgICAgU2NoZW1hVmFsaWRhdG9yRnVuY3Rpb248eyBmb286ICgpID0+IHVua25vd24gfT4sXG4gICAgICAgICh4OiB7XG4gICAgICAgICAgZm9vPzogdW5kZWZpbmVkO1xuICAgICAgICB9KSA9PiB7IGZvbz86IHVua25vd24gfSB8IFByb21pc2VMaWtlPHsgZm9vPzogdW5rbm93biB9PlxuICAgICAgPignb2snKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==