js-angusj-clipper
Version:
Polygon and line clipping and offsetting library for Javascript / Typescript - a port of Angus Johnson's clipper to WebAssembly / Asm.JS
76 lines • 18.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.clipToPolyTree = exports.clipToPaths = exports.clipToPathsOrPolyTree = void 0;
var Clipper_1 = require("./Clipper");
var ClipperError_1 = require("./ClipperError");
var enums_1 = require("./enums");
var devMode = typeof "process" !== "undefined" && process.env && process.env.NODE_ENV !== "production";
var addPathOrPaths = function (clipper, inputDatas, polyType) {
if (inputDatas === undefined) {
return;
}
// add each input
for (var i = 0, maxi = inputDatas.length; i < maxi; i++) {
var inputData = inputDatas[i];
// add the path/paths
var pathOrPaths = inputData.data;
if (!pathOrPaths || pathOrPaths.length <= 0) {
continue;
}
var closed_1 = inputData.closed === undefined ? true : inputData.closed;
// is it a path or paths?
if (Array.isArray(pathOrPaths[0])) {
// paths
if (!clipper.addPaths(pathOrPaths, polyType, closed_1)) {
throw new ClipperError_1.ClipperError("invalid paths");
}
}
else {
// path
if (!clipper.addPath(pathOrPaths, polyType, closed_1)) {
throw new ClipperError_1.ClipperError("invalid path");
}
}
}
};
function clipToPathsOrPolyTree(polyTreeMode, nativeClipperLib, params) {
if (devMode) {
if (!polyTreeMode && params.subjectInputs && params.subjectInputs.some(function (si) { return !si.closed; })) {
throw new Error("clip to a PolyTree (not to a Path) when using open paths");
}
}
var clipper = new Clipper_1.Clipper(nativeClipperLib, params);
//noinspection UnusedCatchParameterJS
try {
addPathOrPaths(clipper, params.subjectInputs, enums_1.PolyType.Subject);
addPathOrPaths(clipper, params.clipInputs, enums_1.PolyType.Clip);
var result = void 0;
var clipFillType = params.clipFillType === undefined ? params.subjectFillType : params.clipFillType;
if (!polyTreeMode) {
result = clipper.executeToPaths(params.clipType, params.subjectFillType, clipFillType, params.cleanDistance);
}
else {
if (params.cleanDistance !== undefined) {
throw new ClipperError_1.ClipperError("cleaning is not available for poly tree results");
}
result = clipper.executeToPolyTee(params.clipType, params.subjectFillType, clipFillType);
}
if (result === undefined) {
throw new ClipperError_1.ClipperError("error while performing clipping task");
}
return result;
}
finally {
clipper.dispose();
}
}
exports.clipToPathsOrPolyTree = clipToPathsOrPolyTree;
function clipToPaths(nativeClipperLib, params) {
return clipToPathsOrPolyTree(false, nativeClipperLib, params);
}
exports.clipToPaths = clipToPaths;
function clipToPolyTree(nativeClipperLib, params) {
return clipToPathsOrPolyTree(true, nativeClipperLib, params);
}
exports.clipToPolyTree = clipToPolyTree;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcEZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGlwRnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFvQztBQUNwQywrQ0FBOEM7QUFDOUMsaUNBQTJEO0FBTTNELElBQU0sT0FBTyxHQUNYLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQztBQThIM0YsSUFBTSxjQUFjLEdBQUcsVUFDckIsT0FBZ0IsRUFDaEIsVUFBb0QsRUFDcEQsUUFBa0I7SUFFbEIsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1FBQzVCLE9BQU87S0FDUjtJQUVELGlCQUFpQjtJQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZELElBQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQyxxQkFBcUI7UUFDckIsSUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQzNDLFNBQVM7U0FDVjtRQUVELElBQU0sUUFBTSxHQUNULFNBQTBCLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxTQUEwQixDQUFDLE1BQU0sQ0FBQztRQUUvRix5QkFBeUI7UUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pDLFFBQVE7WUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFvQixFQUFFLFFBQVEsRUFBRSxRQUFNLENBQUMsRUFBRTtnQkFDN0QsTUFBTSxJQUFJLDJCQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDekM7U0FDRjthQUFNO1lBQ0wsT0FBTztZQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQW1CLEVBQUUsUUFBUSxFQUFFLFFBQU0sQ0FBQyxFQUFFO2dCQUMzRCxNQUFNLElBQUksMkJBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN4QztTQUNGO0tBQ0Y7QUFDSCxDQUFDLENBQUM7QUFFRixTQUFnQixxQkFBcUIsQ0FDbkMsWUFBcUIsRUFDckIsZ0JBQTBDLEVBQzFDLE1BQWtCO0lBRWxCLElBQUksT0FBTyxFQUFFO1FBQ1gsSUFBSSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQUMsRUFBRSxJQUFLLE9BQUEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFWLENBQVUsQ0FBQyxFQUFFO1lBQzFGLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztTQUM3RTtLQUNGO0lBRUQsSUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXRELHFDQUFxQztJQUNyQyxJQUFJO1FBQ0YsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFLGdCQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEUsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLGdCQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxNQUFNLFNBQUEsQ0FBQztRQUNYLElBQU0sWUFBWSxHQUNoQixNQUFNLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUNuRixJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUM3QixNQUFNLENBQUMsUUFBUSxFQUNmLE1BQU0sQ0FBQyxlQUFlLEVBQ3RCLFlBQVksRUFDWixNQUFNLENBQUMsYUFBYSxDQUNyQixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQ3RDLE1BQU0sSUFBSSwyQkFBWSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7YUFDM0U7WUFDRCxNQUFNLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUMxRjtRQUNELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixNQUFNLElBQUksMkJBQVksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxNQUFNLENBQUM7S0FDZjtZQUFTO1FBQ1IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0FBQ0gsQ0FBQztBQXhDRCxzREF3Q0M7QUFFRCxTQUFnQixXQUFXLENBQUMsZ0JBQTBDLEVBQUUsTUFBa0I7SUFDeEYsT0FBTyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFDekUsQ0FBQztBQUZELGtDQUVDO0FBRUQsU0FBZ0IsY0FBYyxDQUM1QixnQkFBMEMsRUFDMUMsTUFBa0I7SUFFbEIsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFhLENBQUM7QUFDM0UsQ0FBQztBQUxELHdDQUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpcHBlciB9IGZyb20gXCIuL0NsaXBwZXJcIjtcclxuaW1wb3J0IHsgQ2xpcHBlckVycm9yIH0gZnJvbSBcIi4vQ2xpcHBlckVycm9yXCI7XHJcbmltcG9ydCB7IENsaXBUeXBlLCBQb2x5RmlsbFR5cGUsIFBvbHlUeXBlIH0gZnJvbSBcIi4vZW51bXNcIjtcclxuaW1wb3J0IHsgTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlIH0gZnJvbSBcIi4vbmF0aXZlL05hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZVwiO1xyXG5pbXBvcnQgeyBQYXRoLCBSZWFkb25seVBhdGggfSBmcm9tIFwiLi9QYXRoXCI7XHJcbmltcG9ydCB7IFBhdGhzLCBSZWFkb25seVBhdGhzIH0gZnJvbSBcIi4vUGF0aHNcIjtcclxuaW1wb3J0IHsgUG9seVRyZWUgfSBmcm9tIFwiLi9Qb2x5VHJlZVwiO1xyXG5cclxuY29uc3QgZGV2TW9kZSA9XHJcbiAgdHlwZW9mIFwicHJvY2Vzc1wiICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIjtcclxuXHJcbi8qKlxyXG4gKiBBIHNpbmdsZSBzdWJqZWN0IGlucHV0IChvZiBtdWx0aXBsZSBwb3NzaWJsZSBpbnB1dHMpIGZvciB0aGUgY2xpcFRvUGF0aHMgLyBjbGlwVG9Qb2x5VHJlZSBvcGVyYXRpb25zXHJcbiAqXHJcbiAqICdTdWJqZWN0JyBwYXRocyBtYXkgYmUgZWl0aGVyIG9wZW4gKGxpbmVzKSBvciBjbG9zZWQgKHBvbHlnb25zKSBvciBldmVuIGEgbWl4dHVyZSBvZiBib3RoLlxyXG4gKiBXaXRoIGNsb3NlZCBwYXRocywgb3JpZW50YXRpb24gc2hvdWxkIGNvbmZvcm0gd2l0aCB0aGUgZmlsbGluZyBydWxlIHRoYXQgd2lsbCBiZSBwYXNzZWQgdmlhIENsaXBwZXIncyBleGVjdXRlIG1ldGhvZC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3ViamVjdElucHV0IHtcclxuICAvKipcclxuICAgKiBQYXRoIC8gUGF0aHMgZGF0YS5cclxuICAgKlxyXG4gICAqIFBhdGggQ29vcmRpbmF0ZSByYW5nZTpcclxuICAgKiBQYXRoIGNvb3JkaW5hdGVzIG11c3QgYmUgYmV0d2VlbiDCsSA5MDA3MTk5MjU0NzQwOTkxLCBvdGhlcndpc2UgYSByYW5nZSBlcnJvciB3aWxsIGJlIHRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gYWRkIHRoZSBwYXRoIHRvIHRoZSBDbGlwcGVyIG9iamVjdC5cclxuICAgKiBJZiBjb29yZGluYXRlcyBjYW4gYmUga2VwdCBiZXR3ZWVuIMKxIDB4M0ZGRkZGRkYgKMKxIDEuMGUrOSksIGEgbW9kZXN0IGluY3JlYXNlIGluIHBlcmZvcm1hbmNlIChhcHByb3guIDE1LTIwJSkgb3ZlciB0aGUgbGFyZ2VyIHJhbmdlIGNhbiBiZSBhY2hpZXZlZCBieVxyXG4gICAqIGF2b2lkaW5nIGxhcmdlIGludGVnZXIgbWF0aC5cclxuICAgKlxyXG4gICAqIFRoZSBmdW5jdGlvbiBvcGVyYXRpb24gd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcGF0aCBpcyBpbnZhbGlkIGZvciBjbGlwcGluZy4gQSBwYXRoIGlzIGludmFsaWQgZm9yIGNsaXBwaW5nIHdoZW46XHJcbiAgICogLSBpdCBoYXMgbGVzcyB0aGFuIDIgdmVydGljZXNcclxuICAgKiAtIGl0IGhhcyAyIHZlcnRpY2VzIGJ1dCBpcyBub3QgYW4gb3BlbiBwYXRoXHJcbiAgICogLSB0aGUgdmVydGljZXMgYXJlIGFsbCBjby1saW5lYXIgYW5kIGl0IGlzIG5vdCBhbiBvcGVuIHBhdGhcclxuICAgKi9cclxuICBkYXRhOiBSZWFkb25seVBhdGggfCBSZWFkb25seVBhdGhzO1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgcGF0aC9wYXRocyBpcyBjbG9zZWQgb3Igbm90LlxyXG4gICAqL1xyXG4gIGNsb3NlZDogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgc2luZ2xlIGNsaXAgaW5wdXQgKG9mIG11bHRpcGxlIHBvc3NpYmxlIGlucHV0cykgZm9yIHRoZSBjbGlwVG9QYXRocyAvIGNsaXBUb1BvbHlUcmVlIG9wZXJhdGlvbnMuXHJcbiAqXHJcbiAqIENsaXBwaW5nIHBhdGhzIG11c3QgYWx3YXlzIGJlIGNsb3NlZC4gQ2xpcHBlciBhbGxvd3MgcG9seWdvbnMgdG8gY2xpcCBib3RoIGxpbmVzIGFuZCBvdGhlciBwb2x5Z29ucywgYnV0IGRvZXNuJ3QgYWxsb3cgbGluZXMgdG8gY2xpcCBlaXRoZXIgbGluZXMgb3IgcG9seWdvbnMuXHJcbiAqIFdpdGggY2xvc2VkIHBhdGhzLCBvcmllbnRhdGlvbiBzaG91bGQgY29uZm9ybSB3aXRoIHRoZSBmaWxsaW5nIHJ1bGUgdGhhdCB3aWxsIGJlIHBhc3NlZCB2aWEgQ2xpcHBlcidzIGV4ZWN1dGUgbWV0aG9kLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDbGlwSW5wdXQge1xyXG4gIC8qKlxyXG4gICAqIFBhdGggLyBQYXRocyBkYXRhLlxyXG4gICAqXHJcbiAgICogUGF0aCBDb29yZGluYXRlIHJhbmdlOlxyXG4gICAqIFBhdGggY29vcmRpbmF0ZXMgbXVzdCBiZSBiZXR3ZWVuIMKxIDkwMDcxOTkyNTQ3NDA5OTEsIG90aGVyd2lzZSBhIHJhbmdlIGVycm9yIHdpbGwgYmUgdGhyb3duIHdoZW4gYXR0ZW1wdGluZyB0byBhZGQgdGhlIHBhdGggdG8gdGhlIENsaXBwZXIgb2JqZWN0LlxyXG4gICAqIElmIGNvb3JkaW5hdGVzIGNhbiBiZSBrZXB0IGJldHdlZW4gwrEgMHgzRkZGRkZGRiAowrEgMS4wZSs5KSwgYSBtb2Rlc3QgaW5jcmVhc2UgaW4gcGVyZm9ybWFuY2UgKGFwcHJveC4gMTUtMjAlKSBvdmVyIHRoZSBsYXJnZXIgcmFuZ2UgY2FuIGJlIGFjaGlldmVkIGJ5XHJcbiAgICogYXZvaWRpbmcgbGFyZ2UgaW50ZWdlciBtYXRoLlxyXG4gICAqXHJcbiAgICogVGhlIGZ1bmN0aW9uIG9wZXJhdGlvbiB3aWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBwYXRoIGlzIGludmFsaWQgZm9yIGNsaXBwaW5nLiBBIHBhdGggaXMgaW52YWxpZCBmb3IgY2xpcHBpbmcgd2hlbjpcclxuICAgKiAtIGl0IGhhcyBsZXNzIHRoYW4gMiB2ZXJ0aWNlc1xyXG4gICAqIC0gaXQgaGFzIDIgdmVydGljZXMgYnV0IGlzIG5vdCBhbiBvcGVuIHBhdGhcclxuICAgKiAtIHRoZSB2ZXJ0aWNlcyBhcmUgYWxsIGNvLWxpbmVhciBhbmQgaXQgaXMgbm90IGFuIG9wZW4gcGF0aFxyXG4gICAqL1xyXG4gIGRhdGE6IFJlYWRvbmx5UGF0aCB8IFJlYWRvbmx5UGF0aHM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJhbXMgZm9yIHRoZSBjbGlwVG9QYXRocyAvIGNsaXBUb1BvbHlUcmVlIG9wZXJhdGlvbnMuXHJcbiAqXHJcbiAqIEFueSBudW1iZXIgb2Ygc3ViamVjdCBhbmQgY2xpcCBwYXRocyBjYW4gYmUgYWRkZWQgdG8gYSBjbGlwcGluZyB0YXNrLlxyXG4gKlxyXG4gKiBCb29sZWFuIChjbGlwcGluZykgb3BlcmF0aW9ucyBhcmUgbW9zdGx5IGFwcGxpZWQgdG8gdHdvIHNldHMgb2YgUG9seWdvbnMsIHJlcHJlc2VudGVkIGluIHRoaXMgbGlicmFyeSBhcyBzdWJqZWN0IGFuZCBjbGlwIHBvbHlnb25zLiBXaGVuZXZlciBQb2x5Z29uc1xyXG4gKiBhcmUgYWRkZWQgdG8gdGhlIENsaXBwZXIgb2JqZWN0LCB0aGV5IG11c3QgYmUgYXNzaWduZWQgdG8gZWl0aGVyIHN1YmplY3Qgb3IgY2xpcCBwb2x5Z29ucy5cclxuICpcclxuICogVU5JT04gb3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIG9uIG9uZSBzZXQgb3IgYm90aCBzZXRzIG9mIHBvbHlnb25zLCBidXQgYWxsIG90aGVyIGJvb2xlYW4gb3BlcmF0aW9ucyByZXF1aXJlIGJvdGggc2V0cyBvZiBwb2x5Z29ucyB0byBkZXJpdmVcclxuICogbWVhbmluZ2Z1bCBzb2x1dGlvbnMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENsaXBQYXJhbXMge1xyXG4gIC8qKlxyXG4gICAqIENsaXBwaW5nIG9wZXJhdGlvbiB0eXBlIChJbnRlcnNlY3Rpb24sIFVuaW9uLCBEaWZmZXJlbmNlIG9yIFhvcikuXHJcbiAgICovXHJcbiAgY2xpcFR5cGU6IENsaXBUeXBlO1xyXG5cclxuICAvKipcclxuICAgKiBXaW5kaW5nIChmaWxsKSBydWxlIGZvciBzdWJqZWN0IHBvbHlnb25zLlxyXG4gICAqL1xyXG4gIHN1YmplY3RGaWxsVHlwZTogUG9seUZpbGxUeXBlO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJqZWN0IGlucHV0cy5cclxuICAgKi9cclxuICBzdWJqZWN0SW5wdXRzOiBTdWJqZWN0SW5wdXRbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2luZGluZyAoZmlsbCkgcnVsZSBmb3IgY2xpcHBpbmcgcG9seWdvbnMuIElmIG1pc3NpbmcgaXQgd2lsbCB1c2UgdGhlIHNhbWUgb25lIGFzIHN1YmplY3RGaWxsVHlwZS5cclxuICAgKi9cclxuICBjbGlwRmlsbFR5cGU/OiBQb2x5RmlsbFR5cGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsaXBwaW5nIGlucHV0cy4gTm90IHJlcXVpcmVkIGZvciB1bmlvbiBvcGVyYXRpb25zLCByZXF1aXJlZCBmb3Igb3RoZXJzLlxyXG4gICAqL1xyXG4gIGNsaXBJbnB1dHM/OiBDbGlwSW5wdXRbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCBwb2x5Z29ucyByZXR1cm5lZCBpbiB0aGUgc29sdXRpb24gcGFyYW1ldGVyIG9mIHRoZSBjbGlwIG1ldGhvZCB3aWxsIGhhdmUgb3JpZW50YXRpb25zIG9wcG9zaXRlIHRvIHRoZWlyIG5vcm1hbFxyXG4gICAqIG9yaWVudGF0aW9ucy5cclxuICAgKi9cclxuICByZXZlcnNlU29sdXRpb24/OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBUZXJtaW5vbG9neTpcclxuICAgKiAtIEEgc2ltcGxlIHBvbHlnb24gaXMgb25lIHRoYXQgZG9lcyBub3Qgc2VsZi1pbnRlcnNlY3QuXHJcbiAgICogLSBBIHdlYWtseSBzaW1wbGUgcG9seWdvbiBpcyBhIHNpbXBsZSBwb2x5Z29uIHRoYXQgY29udGFpbnMgJ3RvdWNoaW5nJyB2ZXJ0aWNlcywgb3IgJ3RvdWNoaW5nJyBlZGdlcy5cclxuICAgKiAtIEEgc3RyaWN0bHkgc2ltcGxlIHBvbHlnb24gaXMgYSBzaW1wbGUgcG9seWdvbiB0aGF0IGRvZXMgbm90IGNvbnRhaW4gJ3RvdWNoaW5nJyB2ZXJ0aWNlcywgb3IgJ3RvdWNoaW5nJyBlZGdlcy5cclxuICAgKlxyXG4gICAqIFZlcnRpY2VzICd0b3VjaCcgaWYgdGhleSBzaGFyZSB0aGUgc2FtZSBjb29yZGluYXRlcyAoYW5kIGFyZSBub3QgYWRqYWNlbnQpLiBBbiBlZGdlIHRvdWNoZXMgYW5vdGhlciBpZiBvbmUgb2YgaXRzIGVuZCB2ZXJ0aWNlcyB0b3VjaGVzIGFub3RoZXIgZWRnZVxyXG4gICAqIGV4Y2x1ZGluZyBpdHMgYWRqYWNlbnQgZWRnZXMsIG9yIGlmIHRoZXkgYXJlIGNvLWxpbmVhciBhbmQgb3ZlcmxhcHBpbmcgKGluY2x1ZGluZyBhZGphY2VudCBlZGdlcykuXHJcbiAgICpcclxuICAgKiBQb2x5Z29ucyByZXR1cm5lZCBieSBjbGlwcGluZyBvcGVyYXRpb25zIChzZWUgQ2xpcHBlci5leGVjdXRlKCkpIHNob3VsZCBhbHdheXMgYmUgc2ltcGxlIHBvbHlnb25zLiBXaGVuIHRoZSBTdHJpY3RseVNpbXBseSBwcm9wZXJ0eSBpcyBlbmFibGVkLFxyXG4gICAqIHBvbHlnb25zIHJldHVybmVkIHdpbGwgYmUgc3RyaWN0bHkgc2ltcGxlLCBvdGhlcndpc2UgdGhleSBtYXkgYmUgd2Vha2x5IHNpbXBsZS4gSXQncyBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlIGVuc3VyaW5nIHBvbHlnb25zIGFyZSBzdHJpY3RseSBzaW1wbGVcclxuICAgKiBhbmQgc28gdGhpcyBwcm9wZXJ0eSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogTm90ZTogVGhlcmUncyBjdXJyZW50bHkgbm8gZ3VhcmFudGVlIHRoYXQgcG9seWdvbnMgd2lsbCBiZSBzdHJpY3RseSBzaW1wbGUgc2luY2UgJ3NpbXBsaWZ5aW5nJyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuXHJcbiAgICovXHJcbiAgc3RyaWN0bHlTaW1wbGU/OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBCeSBkZWZhdWx0LCB3aGVuIHRocmVlIG9yIG1vcmUgdmVydGljZXMgYXJlIGNvbGxpbmVhciBpbiBpbnB1dCBwb2x5Z29ucyAoc3ViamVjdCBvciBjbGlwKSwgdGhlIENsaXBwZXIgb2JqZWN0IHJlbW92ZXMgdGhlICdpbm5lcicgdmVydGljZXMgYmVmb3JlXHJcbiAgICogY2xpcHBpbmcuIFdoZW4gZW5hYmxlZCB0aGUgcHJlc2VydmVDb2xsaW5lYXIgcHJvcGVydHkgcHJldmVudHMgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIHRvIGFsbG93IHRoZXNlIGlubmVyIHZlcnRpY2VzIHRvIGFwcGVhciBpbiB0aGUgc29sdXRpb24uXHJcbiAgICovXHJcbiAgcHJlc2VydmVDb2xsaW5lYXI/OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGlzIGlzIG5vdCB1bmRlZmluZWQgdGhlbiBjbGVhbmluZyBvZiB0aGUgcmVzdWx0IHBvbHlnb24gd2lsbCBiZSBwZXJmb3JtZWQuXHJcbiAgICogVGhpcyBvcGVyYXRpb24gaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgb3V0cHV0IGZvcm1hdCBpcyBub3QgYSBwb2x5IHRyZWUuXHJcbiAgICovXHJcbiAgY2xlYW5EaXN0YW5jZT86IG51bWJlcjtcclxufVxyXG5cclxuY29uc3QgYWRkUGF0aE9yUGF0aHMgPSAoXHJcbiAgY2xpcHBlcjogQ2xpcHBlcixcclxuICBpbnB1dERhdGFzOiAoU3ViamVjdElucHV0IHwgQ2xpcElucHV0KVtdIHwgdW5kZWZpbmVkLFxyXG4gIHBvbHlUeXBlOiBQb2x5VHlwZVxyXG4pID0+IHtcclxuICBpZiAoaW5wdXREYXRhcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgZWFjaCBpbnB1dFxyXG4gIGZvciAobGV0IGkgPSAwLCBtYXhpID0gaW5wdXREYXRhcy5sZW5ndGg7IGkgPCBtYXhpOyBpKyspIHtcclxuICAgIGNvbnN0IGlucHV0RGF0YSA9IGlucHV0RGF0YXNbaV07XHJcblxyXG4gICAgLy8gYWRkIHRoZSBwYXRoL3BhdGhzXHJcbiAgICBjb25zdCBwYXRoT3JQYXRocyA9IGlucHV0RGF0YS5kYXRhO1xyXG4gICAgaWYgKCFwYXRoT3JQYXRocyB8fCBwYXRoT3JQYXRocy5sZW5ndGggPD0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjbG9zZWQgPVxyXG4gICAgICAoaW5wdXREYXRhIGFzIFN1YmplY3RJbnB1dCkuY2xvc2VkID09PSB1bmRlZmluZWQgPyB0cnVlIDogKGlucHV0RGF0YSBhcyBTdWJqZWN0SW5wdXQpLmNsb3NlZDtcclxuXHJcbiAgICAvLyBpcyBpdCBhIHBhdGggb3IgcGF0aHM/XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JQYXRoc1swXSkpIHtcclxuICAgICAgLy8gcGF0aHNcclxuICAgICAgaWYgKCFjbGlwcGVyLmFkZFBhdGhzKHBhdGhPclBhdGhzIGFzIFBhdGhzLCBwb2x5VHlwZSwgY2xvc2VkKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBDbGlwcGVyRXJyb3IoXCJpbnZhbGlkIHBhdGhzXCIpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBwYXRoXHJcbiAgICAgIGlmICghY2xpcHBlci5hZGRQYXRoKHBhdGhPclBhdGhzIGFzIFBhdGgsIHBvbHlUeXBlLCBjbG9zZWQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IENsaXBwZXJFcnJvcihcImludmFsaWQgcGF0aFwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbGlwVG9QYXRoc09yUG9seVRyZWUoXHJcbiAgcG9seVRyZWVNb2RlOiBib29sZWFuLFxyXG4gIG5hdGl2ZUNsaXBwZXJMaWI6IE5hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZSxcclxuICBwYXJhbXM6IENsaXBQYXJhbXNcclxuKTogUGF0aHMgfCBQb2x5VHJlZSB7XHJcbiAgaWYgKGRldk1vZGUpIHtcclxuICAgIGlmICghcG9seVRyZWVNb2RlICYmIHBhcmFtcy5zdWJqZWN0SW5wdXRzICYmIHBhcmFtcy5zdWJqZWN0SW5wdXRzLnNvbWUoKHNpKSA9PiAhc2kuY2xvc2VkKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlwIHRvIGEgUG9seVRyZWUgKG5vdCB0byBhIFBhdGgpIHdoZW4gdXNpbmcgb3BlbiBwYXRoc1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGNsaXBwZXIgPSBuZXcgQ2xpcHBlcihuYXRpdmVDbGlwcGVyTGliLCBwYXJhbXMpO1xyXG5cclxuICAvL25vaW5zcGVjdGlvbiBVbnVzZWRDYXRjaFBhcmFtZXRlckpTXHJcbiAgdHJ5IHtcclxuICAgIGFkZFBhdGhPclBhdGhzKGNsaXBwZXIsIHBhcmFtcy5zdWJqZWN0SW5wdXRzLCBQb2x5VHlwZS5TdWJqZWN0KTtcclxuICAgIGFkZFBhdGhPclBhdGhzKGNsaXBwZXIsIHBhcmFtcy5jbGlwSW5wdXRzLCBQb2x5VHlwZS5DbGlwKTtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBjb25zdCBjbGlwRmlsbFR5cGUgPVxyXG4gICAgICBwYXJhbXMuY2xpcEZpbGxUeXBlID09PSB1bmRlZmluZWQgPyBwYXJhbXMuc3ViamVjdEZpbGxUeXBlIDogcGFyYW1zLmNsaXBGaWxsVHlwZTtcclxuICAgIGlmICghcG9seVRyZWVNb2RlKSB7XHJcbiAgICAgIHJlc3VsdCA9IGNsaXBwZXIuZXhlY3V0ZVRvUGF0aHMoXHJcbiAgICAgICAgcGFyYW1zLmNsaXBUeXBlLFxyXG4gICAgICAgIHBhcmFtcy5zdWJqZWN0RmlsbFR5cGUsXHJcbiAgICAgICAgY2xpcEZpbGxUeXBlLFxyXG4gICAgICAgIHBhcmFtcy5jbGVhbkRpc3RhbmNlXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocGFyYW1zLmNsZWFuRGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBDbGlwcGVyRXJyb3IoXCJjbGVhbmluZyBpcyBub3QgYXZhaWxhYmxlIGZvciBwb2x5IHRyZWUgcmVzdWx0c1wiKTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSBjbGlwcGVyLmV4ZWN1dGVUb1BvbHlUZWUocGFyYW1zLmNsaXBUeXBlLCBwYXJhbXMuc3ViamVjdEZpbGxUeXBlLCBjbGlwRmlsbFR5cGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBDbGlwcGVyRXJyb3IoXCJlcnJvciB3aGlsZSBwZXJmb3JtaW5nIGNsaXBwaW5nIHRhc2tcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH0gZmluYWxseSB7XHJcbiAgICBjbGlwcGVyLmRpc3Bvc2UoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbGlwVG9QYXRocyhuYXRpdmVDbGlwcGVyTGliOiBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UsIHBhcmFtczogQ2xpcFBhcmFtcyk6IFBhdGhzIHtcclxuICByZXR1cm4gY2xpcFRvUGF0aHNPclBvbHlUcmVlKGZhbHNlLCBuYXRpdmVDbGlwcGVyTGliLCBwYXJhbXMpIGFzIFBhdGhzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xpcFRvUG9seVRyZWUoXHJcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxyXG4gIHBhcmFtczogQ2xpcFBhcmFtc1xyXG4pOiBQb2x5VHJlZSB7XHJcbiAgcmV0dXJuIGNsaXBUb1BhdGhzT3JQb2x5VHJlZSh0cnVlLCBuYXRpdmVDbGlwcGVyTGliLCBwYXJhbXMpIGFzIFBvbHlUcmVlO1xyXG59XHJcbiJdfQ==