@colijnit/homedecorator 258.1.13 → 258.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.d.ts +4 -0
- package/bundles/colijnit-homedecorator.umd.js +33 -7
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/core/service/presets.service.js +1 -1
- package/esm2015/app/plugins/core3d/hud/on-wall-measurements.js +2 -2
- package/esm2015/app/plugins/core3d/items/base-item.js +4 -2
- package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -1
- package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -1
- package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -1
- package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -1
- package/esm2015/app/plugins/core3d/items/in-wall-floor-item.js +2 -1
- package/esm2015/app/plugins/core3d/items/item.js +2 -2
- package/esm2015/app/plugins/core3d/items/wall-objects.js +3 -2
- package/esm2015/app/plugins/furniture-manager/furniture-manager/furniture-manager.component.js +7 -1
- package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +3 -1
- package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +11 -4
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +4 -1
- package/fesm2015/colijnit-homedecorator.js +33 -7
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +1 -1
|
@@ -292,13 +292,13 @@ export class Item extends BaseItem {
|
|
|
292
292
|
}
|
|
293
293
|
if (rawMetadata.elevation) {
|
|
294
294
|
this.elevation = rawMetadata.elevation;
|
|
295
|
-
this.setYPositionBasedOnElevation();
|
|
296
295
|
}
|
|
297
296
|
else {
|
|
298
297
|
this.elevation = 0;
|
|
299
298
|
}
|
|
300
299
|
}
|
|
301
300
|
this.calculateHalfSize();
|
|
301
|
+
this.setYPositionBasedOnElevation();
|
|
302
302
|
}
|
|
303
303
|
/** on is a bool */
|
|
304
304
|
updateHighlight() {
|
|
@@ -422,4 +422,4 @@ export class Item extends BaseItem {
|
|
|
422
422
|
}
|
|
423
423
|
}
|
|
424
424
|
}
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL2l0ZW1zL2l0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsVUFBVSxFQUFFLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQVUsTUFBTSxPQUFPLENBQUM7QUFHakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkRBQTZELENBQUM7QUFJN0YsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRTNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU3RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sSUFBSyxTQUFRLFFBQVE7SUF3RWhDLDJDQUEyQztJQUUzQyxZQUNTLFdBQXFCLEVBQzVCLE1BQVcsRUFDWCxPQUFpQixFQUNqQixRQUFjO1FBRWQsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFMN0IsZ0JBQVcsR0FBWCxXQUFXLENBQVU7UUFyQ3ZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBUW5DLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBVXZCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUV2QyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQywwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFnQjNCLHNFQUFzRTtRQUV0RSxJQUFJLFdB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Q0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWE7UUFDbkIsTUFBTSxRQUFRLEdBQVksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDekQsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmFzZUl0ZW19IGZyb20gJy4vYmFzZS1pdGVtJztcclxuaW1wb3J0IHtDdXN0b21NZXNoLCBDdXN0b21PYmplY3QzRH0gZnJvbSAnLi9jdXN0b20tb2JqZWN0cyc7XHJcbmltcG9ydCB7QXhlc0hlbHBlciwgRXVsZXIsIE1lc2gsIE9iamVjdDNELCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB0eXBlIHtNZXRhZGF0YX0gZnJvbSAnLi9tZXRhZGF0YSc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge0hkZWNvUG9zaXRpb25pbmd9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9oZGVjby1wb3NpdGlvbmluZy5lbnVtJztcclxuaW1wb3J0IHtBZGp1c3RhYmxlRWxlbWVudEludGVyZmFjZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9pbnRlcmZhY2UvYWRqdXN0YWJsZS1lbGVtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtDbG9uZVV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL2Nsb25lLXV0aWxzJztcclxuaW1wb3J0IHtDaGlsZFBhcmFtc30gZnJvbSAnLi4vLi4vLi4vY29yZS9pbnRlcmZhY2UvY2hpbGQtcGFyYW1zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvb2JqZWN0LnV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBBbiBJdGVtIGlzIGFuIGFic3RyYWN0IGVudGl0eSBmb3IgYWxsIHRoaW5ncyBwbGFjZWQgaW4gdGhlIHNjZW5lLFxyXG4gKiBlLmcuIGF0IHdhbGxzIG9yIG9uIHRoZSBmbG9vci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBJdGVtIGV4dGVuZHMgQmFzZUl0ZW0ge1xyXG5cclxuICBwdWJsaWMgc2V0IGFsbHdheXNDb25maWd1cmVNb2RlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9hbGx3YXlzQ29uZmlndXJlTW9kZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX2FsbHdheXNDb25maWd1cmVNb2RlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhbGx3YXlzQ29uZmlndXJlTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hbGx3YXlzQ29uZmlndXJlTW9kZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY29uZmlndXJpbmcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICghdGhpcy5jb25maWd1cmFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY29uZmlndXJpbmcgPSB2YWx1ZSB8fCB0aGlzLmFsbHdheXNDb25maWd1cmVNb2RlO1xyXG4gICAgaWYgKHRoaXMuX2NvbmZpZ3VyaW5nKSB7XHJcbiAgICAgIHRoaXMuYWxsb3dSb3RhdGUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxsb3dSb3RhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJpbmdDaGFuZ2VIYW5kbGVyKSB7XHJcbiAgICAgIC8vIHRoaXMuX2NvbmZpZ3VyaW5nQ2hhbmdlSGFuZGxlcih0aGlzLnVzZXJEYXRhLml0ZW1JZCwgdGhpcy51c2VyRGF0YS5pdGVtSWRlbnRpZmllciwgdGhpcy5fY29uZmlndXJpbmcpO1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyaW5nQ2hhbmdlSGFuZGxlcih0aGlzLm1ldGFkYXRhLCB0aGlzLl9jb25maWd1cmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbmZpZ3VyaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyaW5nO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG91bGRNb3ZlQ2hpbGQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRPYmplY3QgJiYgdGhpcy5fc2VsZWN0ZWRPYmplY3QudXNlckRhdGEuc2VsZWN0aW9uICYmXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkT2JqZWN0LnVzZXJEYXRhLnNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nID09PSBIZGVjb1Bvc2l0aW9uaW5nLlZhcmlhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9ic29sZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNoaWxkUGFyYW1zOiBDaGlsZFBhcmFtcztcclxuICBwdWJsaWMgaGlnaExpZ2h0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgd2FudHNSb3RhdGlvbjogRXVsZXI7XHJcbiAgcHVibGljIGNvbmZpZ3VyaW5nQ2hhbmdlSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHVibGljIG1vdXNlT3ZlckhhbmRsZXI6IEZ1bmN0aW9uO1xyXG4gIHB1YmxpYyBtb3VzZU9mZkhhbmRsZXI6IEZ1bmN0aW9uO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEhhbmRsZXI6IEZ1bmN0aW9uO1xyXG4gIHB1YmxpYyB1bnNlbGVjdGVkSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHVibGljIHNob3dIaWRlT3V0bGluZUhhbmRsZXI6IEZ1bmN0aW9uO1xyXG4gIHB1YmxpYyBvcmlnaW5hbExlbmd0aDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgb3JpZ2luYWxIZWlnaHQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIG9yaWdpbmFsV2lkdGg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgdG8gYmUgYWJsZSB0byBjcmVhdGUgYSBkaWZmIG9uIG1hdGVyaWFscyB3aGVuIGFuIGl0ZW0gaXMgY29sb3JhYmxlXHJcbiAgICovXHJcbiAgcHVibGljIG9yaWdpbmFsSXRlbTogSXRlbTtcclxuXHJcbiAgcHJvdGVjdGVkIHZpc2libGVDbG9uZTogT2JqZWN0M0Q7XHJcbiAgcHJvdGVjdGVkIGNlbnRlclBpdm90OiBib29sZWFuO1xyXG4gIHByb3RlY3RlZCBpZ25vcmVJbnZpc2libGU6IGJvb2xlYW47XHJcbiAgcHJvdGVjdGVkIHVwZGF0ZVBpdm90T25DcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfc2hvdWxkU2V0U2NhbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9lbGVtZW50Q29uZmlndXJhdGlvbjogQWRqdXN0YWJsZUVsZW1lbnRJbnRlcmZhY2VbXTtcclxuICBwcml2YXRlIF9hbGx3YXlzQ29uZmlndXJlTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NvbmZpZ3VyaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRPYmplY3Q6IEN1c3RvbU9iamVjdDNEO1xyXG4gIHByaXZhdGUgX2VsZW1lbnRTZWxlY3RlZEhhbmRsZXI6IEZ1bmN0aW9uO1xyXG4gIHByaXZhdGUgX2VsZW1lbnRVbnNlbGVjdGVkSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHJpdmF0ZSBfY2hpbGRFbGVtZW50UG9zaXRpb25DaGFuZ2VkSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHJpdmF0ZSBfZHJhZ0Nvbm5lY3RvckhhbmRsZXI6IEZ1bmN0aW9uO1xyXG4gIHByaXZhdGUgX2NoaWxkRWxlbWVudFBsYWNlSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgLy8gcHJpdmF0ZSBfb3V0bGluZVNlcnZpY2U6IE91dGxpbmVTZXJ2aWNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByYXdNZXRhZGF0YTogTWV0YWRhdGEsXHJcbiAgICBvYmplY3Q6IGFueSxcclxuICAgIHRleHR1cmU/OiBUZXh0dXJlLFxyXG4gICAgaGFuZGxlcnM/OiBhbnlcclxuICApIHtcclxuICAgIHN1cGVyKHJhd01ldGFkYXRhLCBvYmplY3QsIHRleHR1cmUpO1xyXG4gICAgLy8gdGhpcy5fb3V0bGluZVNlcnZpY2UgPSBTZXJ2aWNlTG9jYXRvci5pbmplY3Rvci5nZXQoT3V0bGluZVNlcnZpY2UpO1xyXG5cclxuICAgIGlmIChyYXdNZXRhZGF0YSkge1xyXG4gICAgICB0aGlzLm9ic29sZXRlID0gcmF3TWV0YWRhdGEub2Jzb2xldGU7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRDb25maWd1cmF0aW9uID0gcmF3TWV0YWRhdGEuZWxlbWVudENvbmZpZ3VyYXRpb247XHJcbiAgICAgIHRoaXMuY29uZmlndXJpbmdDaGFuZ2VIYW5kbGVyID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMuY29uZmlndXJpbmdDaGFuZ2VkID8gaGFuZGxlcnMuY29uZmlndXJpbmdDaGFuZ2VkIDogdGhpcy5fZmFrZUhhbmRsZXI7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRTZWxlY3RlZEhhbmRsZXIgPSBoYW5kbGVycyAmJiBoYW5kbGVycy5lbGVtZW50U2VsZWN0ZWQgPyBoYW5kbGVycy5lbGVtZW50U2VsZWN0ZWQgOiB0aGlzLl9mYWtlSGFuZGxlcjtcclxuICAgICAgdGhpcy5fZWxlbWVudFVuc2VsZWN0ZWRIYW5kbGVyID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMuZWxlbWVudFVuc2VsZWN0ZWQgPyBoYW5kbGVycy5lbGVtZW50VW5zZWxlY3RlZCA6IHRoaXMuX2Zha2VIYW5kbGVyO1xyXG4gICAgICB0aGlzLl9jaGlsZEVsZW1lbnRQb3NpdGlvbkNoYW5nZWRIYW5kbGVyID1cclxuICAgICAgICBoYW5kbGVycyAmJiBoYW5kbGVycy5jaGlsZEVsZW1lbnRQb3NpdGlvbkNoYW5nZWRIYW5kbGVyID8gaGFuZGxlcnMuY2hpbGRFbGVtZW50UG9zaXRpb25DaGFuZ2VkSGFuZGxlciA6IHRoaXMuX2Zha2VIYW5kbGVyO1xyXG4gICAgICB0aGlzLl9kcmFnQ29ubmVjdG9ySGFuZGxlciA9IGhhbmRsZXJzICYmIGhhbmRsZXJzLmRyYWdDb25uZWN0b3JIYW5kbGVyID8gaGFuZGxlcnMuZHJhZ0Nvbm5lY3RvckhhbmRsZXIgOiB0aGlzLl9mYWtlSGFuZGxlcjtcclxuICAgICAgdGhpcy5fY2hpbGRFbGVtZW50UGxhY2VIYW5kbGVyID1cclxuICAgICAgICBoYW5kbGVycyAmJiBoYW5kbGVycy5jaGlsZEVsZW1lbnRQbGFjZUhhbmRsZXIgPyBoYW5kbGVycy5jaGlsZEVsZW1lbnRQbGFjZUhhbmRsZXIgOiB0aGlzLl9mYWtlSGFuZGxlcjtcclxuICAgICAgdGhpcy5tb3VzZU92ZXJIYW5kbGVyID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMubW91c2VPdmVyID8gaGFuZGxlcnMubW91c2VPdmVyIDogdGhpcy5fZmFrZUhhbmRsZXI7XHJcbiAgICAgIHRoaXMubW91c2VPZmZIYW5kbGVyID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMubW91c2VPZmYgPyBoYW5kbGVycy5tb3VzZU9mZiA6IHRoaXMuX2Zha2VIYW5kbGVyO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSGFuZGxlciA9IGhhbmRsZXJzICYmIGhhbmRsZXJzLml0ZW1TZWxlY3RlZCA/IGhhbmRsZXJzLml0ZW1TZWxlY3RlZCA6IHRoaXMuX2Zha2VIYW5kbGVyO1xyXG4gICAgICB0aGlzLnVuc2VsZWN0ZWRIYW5kbGVyID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMuaXRlbVVuc2VsZWN0ZWQgPyBoYW5kbGVycy5pdGVtVW5zZWxlY3RlZCA6IHRoaXMuX2Zha2VIYW5kbGVyO1xyXG4gICAgICB0aGlzLnNob3dIaWRlT3V0bGluZUhhbmRsZXIgPSBoYW5kbGVycyAmJiBoYW5kbGVycy5zaG93SGlkZU91dGxpbmVIYW5kbGVyID8gaGFuZGxlcnMuc2hvd0hpZGVPdXRsaW5lSGFuZGxlciA6IHRoaXMuX2Zha2VIYW5kbGVyO1xyXG5cclxuICAgICAgLy8gdGhpcy5hZGp1c3RhYmxlID0gYWRqdXN0YWJsZTtcclxuICAgICAgdGhpcy5jZW50ZXJQaXZvdCA9IHJhd01ldGFkYXRhLmNlbnRlclBpdm90O1xyXG4gICAgICB0aGlzLmlnbm9yZUludmlzaWJsZSA9IHJhd01ldGFkYXRhLmlnbm9yZUludmlzaWJsZTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hpbGRQYXJhbXMgPSB7XHJcbiAgICAgIGlnbm9yZUludmlzaWJsZTogZmFsc2VcclxuICAgIH07XHJcbiAgICBpZiAob2JqZWN0ICYmIG9iamVjdC5nZW9tZXRyeSAmJiBvYmplY3QubWF0ZXJpYWwpIHtcclxuICAgICAgY29uc3QgbWVzaCA9IG5ldyBNZXNoKG9iamVjdC5nZW9tZXRyeSwgb2JqZWN0Lm1hdGVyaWFsKTtcclxuICAgICAgY29uc3QgY3VzdG9tTWVzaCA9IEN1c3RvbU1lc2guY3JlYXRlKG1lc2gpO1xyXG4gICAgICBjdXN0b21NZXNoLm5hbWUgPSBgY3VzdG9tLWZsb29yLWdyb3VwLSR7dGhpcy5uYW1lfS1tZXNoYDtcclxuICAgICAgdGhpcy5hZGQoY3VzdG9tTWVzaCk7XHJcbiAgICAgIG9iamVjdCA9IGN1c3RvbU1lc2g7XHJcbiAgICB9IGVsc2UgaWYgKG9iamVjdCAmJiBvYmplY3QgaW5zdGFuY2VvZiBPYmplY3QzRCkge1xyXG4gICAgICBvYmplY3QuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IE1lc2ggfCBPYmplY3QzRCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNoaWxkUGFyYW1zLmlnbm9yZUludmlzaWJsZSAmJiAhY2hpbGQudmlzaWJsZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZENoaWxkKGNoaWxkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudXNlUGl2b3QpIHtcclxuICAgICAgdGhpcy51cGRhdGVQaXZvdCh0aGlzLnVwZGF0ZVBpdm90T25DcmVhdGUpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5hZGQobmV3IEF4ZXNIZWxwZXIoMikpO1xyXG4gICAgdGhpcy5fc2V0T3JpZ2luYWxzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbiBjbG9uZSB3aXRob3V0IG93biBwcm9wZXJ0aWVzXHJcbiAgICogQHBhcmFtIHJlY3Vyc2l2ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbG9uZShyZWN1cnNpdmU6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICByZXR1cm4gQ2xvbmVVdGlscy5DbGVhbkNsb25lT2JqZWN0KHRoaXMsIHJlY3Vyc2l2ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5vcmlnaW5hbEl0ZW0pO1xyXG4gICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLnZpc2libGVDbG9uZSk7XHJcbiAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuX3NlbGVjdGVkT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zha2VIYW5kbGVyKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0SWRlbnRpZmllckZyb21TZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3NlbGVjdGlvbi5kZWNvTm9kZSA/IHNlbGVjdGlvbi5kZWNvTm9kZS5ub2RlSWQgKyAnXycgOiAnJ30ke3NlbGVjdGlvbi5ub2RlSWR9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBidWlsZEZpbmlzaGVkKCk6IHZvaWQge1xyXG4gICAgc3VwZXIuYnVpbGRGaW5pc2hlZCgpO1xyXG4gICAgdGhpcy5oYW5kbGVSYXdNZXRhZGF0YSgpO1xyXG4gICAgLy8gSWYgaXQncyBwb3NzaWJsZSB0byBjaGFuZ2UgbWF0ZXJpYWxzIHRoZW4gd2UgbmVlZCB0byBzdG9yZSB0aGUgb3JpZ2luYWwgaXRlbVxyXG4gICAgLy8gVGhpcyB3YXkgd2hlbiB3ZSBzYXZlIHRoZSBwcm9qZWN0IHdlIGNhbiBkbyBhIGRpZmYgb24gdGhlIG1hdGVyaWFscyBhbmQgc3RvcmVcclxuICAgIC8vIGNoYW5nZXMgaW5zdGVhZCBvZiB0aGUgd2hvbGUgbWF0ZXJpYWxcclxuICAgIGlmICh0aGlzLmNvbG9yYWJsZSkge1xyXG4gICAgICBpZiAodGhpcy5vcmlnaW5hbEl0ZW0pIHtcclxuICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMub3JpZ2luYWxJdGVtKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9yaWdpbmFsSXRlbSA9IE9iamVjdFV0aWxzLkRlZXBDbG9uZU9iamVjdDNEKHRoaXMpIGFzIEl0ZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29ubmVjdG9yRnJvbUVsZW1lbnQoc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBBZGp1c3RhYmxlRWxlbWVudEludGVyZmFjZSB7XHJcbiAgICBjb25zdCBpZDogc3RyaW5nID0gdGhpcy5fZ2V0SWRlbnRpZmllckZyb21TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50Q29uZmlndXJhdGlvbiA/IHRoaXMuX2VsZW1lbnRDb25maWd1cmF0aW9uLmZpbmQoZSA9PiBlLmlkZW50aWZpZXIgPT09IGlkKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENvbm5lY3RvcihzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29ubmVjdG9yOiBzdHJpbmcsIGNvbm5lY3RlZE5vZGVJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnRDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRDb25maWd1cmF0aW9uID0gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBpZDogc3RyaW5nID0gdGhpcy5fZ2V0SWRlbnRpZmllckZyb21TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgIGNvbnN0IGlkeDogbnVtYmVyID0gdGhpcy5fZWxlbWVudENvbmZpZ3VyYXRpb24uZmluZEluZGV4KGUgPT4gZS5pZGVudGlmaWVyID09PSBpZCk7XHJcbiAgICBpZiAoaWR4IDwgMCkge1xyXG4gICAgICB0aGlzLl9lbGVtZW50Q29uZmlndXJhdGlvbi5wdXNoKHtpZGVudGlmaWVyOiBpZCwgY29ubmVjdG9yOiBjb25uZWN0b3IsIGNvbm5lY3RlZE5vZGVJZDogY29ubmVjdGVkTm9kZUlkfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9lbGVtZW50Q29uZmlndXJhdGlvbltpZHhdID0ge2lkZW50aWZpZXI6IGlkLCBjb25uZWN0b3I6IGNvbm5lY3RvciwgY29ubmVjdGVkTm9kZUlkOiBjb25uZWN0ZWROb2RlSWR9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5tZXRhZGF0YS5lbGVtZW50Q29uZmlndXJhdGlvbiA9IHRoaXMuX2VsZW1lbnRDb25maWd1cmF0aW9uLnNsaWNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJDaGlsZHJlbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gbGVuOyBpID49IDA7IGktLSkge1xyXG4gICAgICBpZiAoISh0aGlzLmNoaWxkcmVuW2ldIGluc3RhbmNlb2YgQXhlc0hlbHBlcikpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZSh0aGlzLmNoaWxkcmVuW2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZENoaWxkKGNoaWxkOiBPYmplY3QzRCB8IE1lc2gpOiB2b2lkIHtcclxuICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIE1lc2gpIHtcclxuICAgICAgY29uc3QgbWVzaCA9IEN1c3RvbU1lc2guY3JlYXRlKGNoaWxkKTtcclxuICAgICAgLy8gbWVzaC5hZGQobmV3IEF4ZXNIZWxwZXIoMSkpO1xyXG4gICAgICB0aGlzLmFkZChtZXNoKTtcclxuICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBPYmplY3QzRCkge1xyXG4gICAgICBjb25zdCBvYmplY3QzZCA9IG5ldyBDdXN0b21PYmplY3QzRChjaGlsZCwgdGhpcy5jaGlsZFBhcmFtcyk7XHJcbiAgICAgIC8vIG9iamVjdDNkLmFkZChuZXcgQXhlc0hlbHBlcigxKSk7XHJcbiAgICAgIHRoaXMuYWRkKG9iamVjdDNkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlQ2hpbGRUb1Bvc2l0aW9uKHBvczogVmVjdG9yMyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2NoaWxkRWxlbWVudFBvc2l0aW9uQ2hhbmdlZEhhbmRsZXIpIHtcclxuICAgICAgdGhpcy5fY2hpbGRFbGVtZW50UG9zaXRpb25DaGFuZ2VkSGFuZGxlcih0aGlzLl9zZWxlY3RlZE9iamVjdCwgcG9zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkcmFnQ29ubmVjdG9yKGNvbm5lY3RvcjogQ3VzdG9tTWVzaCB8IE1lc2gsIHBvczogVmVjdG9yMyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RyYWdDb25uZWN0b3JIYW5kbGVyKSB7XHJcbiAgICAgIHRoaXMuX2RyYWdDb25uZWN0b3JIYW5kbGVyKGNvbm5lY3RvciwgcG9zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9uZVZpc2libGUoKTogT2JqZWN0M0Qge1xyXG4gICAgLy8gaWYgd2UgaWdub3JlIGFsbCB0aGUgaW52aXNpYmxlIGNoaWxkcmVuIHdlIGNhbiByZXR1cm4gdGhpc1xyXG4gICAgaWYgKHRoaXMuY2hpbGRQYXJhbXMuaWdub3JlSW52aXNpYmxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgT2JqZWN0M0QoKTtcclxuICAgIGdyb3VwLnJvdGF0aW9uLmNvcHkodGhpcy5yb3RhdGlvbik7XHJcbiAgICBncm91cC5wb3NpdGlvbi5jb3B5KHRoaXMucG9zaXRpb24pO1xyXG4gICAgZ3JvdXAuc2NhbGUuY29weSh0aGlzLnNjYWxlKTtcclxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoYzogQ3VzdG9tT2JqZWN0M0QgfCBDdXN0b21NZXNoKSA9PiB7XHJcbiAgICAgIGlmICgoYy52aXNpYmxlIHx8IHRoaXMuY2hpbGRQYXJhbXMuaWdub3JlSW52aXNpYmxlKSAmJiAoYyBpbnN0YW5jZW9mIEN1c3RvbU9iamVjdDNEIHx8IGMgaW5zdGFuY2VvZiBDdXN0b21NZXNoKSkge1xyXG4gICAgICAgIGdyb3VwLmFkZChjLmNsb25lVmlzaWJsZSgpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlUGl2b3QoZm9yY2U/OiBib29sZWFuKSB7XHJcbiAgICAvLyB0aGlzLmRlc2VsZWN0T2JqZWN0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMudmlzaWJsZUNsb25lID09PSB0aGlzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZpc2libGVDbG9uZSkge1xyXG4gICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMudmlzaWJsZUNsb25lKTtcclxuICAgICAgdGhpcy52aXNpYmxlQ2xvbmUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpc2libGVDbG9uZSA9IHRoaXMuY2xvbmVWaXNpYmxlKCk7XHJcblxyXG4gICAgdGhpcy52aXNpYmxlQ2xvbmUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgdGhpcy52aXNpYmxlQ2xvbmUucm90YXRpb24uc2V0KDAsIDAsIDApO1xyXG5cclxuICAgIHRoaXMuY2FsY3VsYXRlSGFsZlNpemUoKTtcclxuICAgIGlmICh0aGlzLmNlbnRlclBpdm90KSB7XHJcbiAgICAgIHRoaXMucmVjYWxjUGl2b3QoKTtcclxuICAgIH1cclxuICAgIHRoaXMudmlzaWJsZUNsb25lLnJvdGF0aW9uLmNvcHkodGhpcy5yb3RhdGlvbik7XHJcbiAgICB0aGlzLnZpc2libGVDbG9uZS5wb3NpdGlvbi5jb3B5KHRoaXMucG9zaXRpb24pO1xyXG4gICAgdGhpcy5oZWlnaHRVcGRhdGVkKCk7XHJcbiAgICB0aGlzLl9zZXRPcmlnaW5hbHMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWaXNpYmxlTWVzaGVzUGFyZW50cygpOiAoSXRlbSB8IEN1c3RvbU1lc2gpW10ge1xyXG4gICAgY29uc3QgdmlzaWJsZUNoaWxkcmVuOiAoSXRlbSB8IEN1c3RvbU1lc2gpW10gPSBbXTtcclxuICAgIHRoaXMudHJhdmVyc2UoYyA9PiB7XHJcbiAgICAgIGlmIChjLnBhcmVudCAmJiBjLnBhcmVudC52aXNpYmxlICYmIGMudmlzaWJsZSAmJiBjIGluc3RhbmNlb2YgQ3VzdG9tTWVzaCkge1xyXG4gICAgICAgIHZpc2libGVDaGlsZHJlbi5wdXNoKGMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB2aXNpYmxlQ2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T2JqZWN0c0J5VXNlckRhdGFQcm9wKHVzZXJEYXRhT2JqZWN0UHJvcDogc3RyaW5nLCBwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBDdXN0b21PYmplY3QzRFtdIHtcclxuICAgIC8vIGZpeCAtPiBmaWx0ZXJcclxuICAgIHJldHVybiA8Q3VzdG9tT2JqZWN0M0RbXT50aGlzLmNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IHtcclxuICAgICAgcmV0dXJuIGNoaWxkLnVzZXJEYXRhICYmXHJcbiAgICAgICAgY2hpbGQudXNlckRhdGEuaGFzT3duUHJvcGVydHkodXNlckRhdGFPYmplY3RQcm9wKSAmJlxyXG4gICAgICAgIGNoaWxkLnVzZXJEYXRhW3VzZXJEYXRhT2JqZWN0UHJvcF0uaGFzT3duUHJvcGVydHkocHJvcCkgJiZcclxuICAgICAgICBjaGlsZC51c2VyRGF0YVt1c2VyRGF0YU9iamVjdFByb3BdW3Byb3BdID09PSB2YWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE92ZXJhbGxQb3NpdGlvbihuZXdCYXNlUG9zaXRpb24/OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcbiAgICByZXR1cm4gbmV3QmFzZVBvc2l0aW9uIHx8IHRoaXMucG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcG9zZWRQb3NpdGlvbnMobmV3QmFzZVBvc2l0aW9uPzogVmVjdG9yMyk6IFZlY3RvcjNbXSB7XHJcbiAgICByZXR1cm4gW25ld0Jhc2VQb3NpdGlvbiB8fCB0aGlzLnBvc2l0aW9uXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb21wb3NlZFJvdGF0aW9ucyhuZXdCYXNlUm90YXRpb24/OiBFdWxlcik6IEV1bGVyW10ge1xyXG4gICAgcmV0dXJuIFtuZXdCYXNlUm90YXRpb24gfHwgdGhpcy5yb3RhdGlvbl07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW5kRHJhZygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyaW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLl9jaGlsZEVsZW1lbnRQbGFjZUhhbmRsZXIpIHtcclxuICAgICAgICB0aGlzLl9jaGlsZEVsZW1lbnRQbGFjZUhhbmRsZXIodGhpcy5fc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdE9iamVjdChpdGVtVHlwZSwgaWQgPSAnJywgaWRlbnRpZmllciA9ICcnLCBtb2RlbFVybCk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VyRGF0YS5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG4gICAgdGhpcy51c2VyRGF0YS5pdGVtSWQgPSBpZDtcclxuICAgIHRoaXMudXNlckRhdGEuaXRlbUlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xyXG4gICAgdGhpcy51c2VyRGF0YS5tb2RlbFVybCA9IG1vZGVsVXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEhhbGZTaXplKCk6IFZlY3RvcjMge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFsZlNpemUuY2xvbmUoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBoYW5kbGVSYXdNZXRhZGF0YSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJhd01ldGFkYXRhOiBNZXRhZGF0YSA9IHRoaXMucmF3TWV0YWRhdGE7XHJcbiAgICBpZiAocmF3TWV0YWRhdGEpIHtcclxuICAgICAgdGhpcy5pbml0T2JqZWN0KHJhd01ldGFkYXRhLml0ZW1UeXBlLCByYXdNZXRhZGF0YS5pdGVtSWQsIHJhd01ldGFkYXRhLml0ZW1JZGVudGlmaWVyLCByYXdNZXRhZGF0YS5tb2RlbFVybCk7XHJcbiAgICAgIGlmIChyYXdNZXRhZGF0YS5yb3RhdGlvbikge1xyXG4gICAgICAgIGlmIChyYXdNZXRhZGF0YS5yb3RhdGlvbiBpbnN0YW5jZW9mIEV1bGVyKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdGF0aW9uLnNldChyYXdNZXRhZGF0YS5yb3RhdGlvbi54LCByYXdNZXRhZGF0YS5yb3RhdGlvbi55LCByYXdNZXRhZGF0YS5yb3RhdGlvbi56KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yb3RhdGlvbi55ID0gcmF3TWV0YWRhdGEucm90YXRpb24gfHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJhd01ldGFkYXRhLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KHJhd01ldGFkYXRhLnBvc2l0aW9uKTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uU2V0ID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uU2V0ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJhd01ldGFkYXRhLnNjYWxlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuU2NhbGVYIHx8IHRoaXMuY2FuU2NhbGVZIHx8IHRoaXMuY2FuU2NhbGVaKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFNjYWxlWFlaKHRoaXMucmF3TWV0YWRhdGEuc2NhbGUueCwgdGhpcy5yYXdNZXRhZGF0YS5zY2FsZS55LCB0aGlzLnJhd01ldGFkYXRhLnNjYWxlLnopO1xyXG4gICAgICAgICAgLy8gdGhpcy5fc2hvdWxkU2V0U2NhbGUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNjYWxlR2VvbWV0cnkocmF3TWV0YWRhdGEuc2NhbGUueCwgcmF3TWV0YWRhdGEuc2NhbGUueSwgcmF3TWV0YWRhdGEuc2NhbGUueik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNjYWxlUGVyY2VudGFnZSAhPT0gMTAwKSB7XHJcbiAgICAgICAgdGhpcy5zY2FsZS5zZXQodGhpcy5zY2FsZVBlcmNlbnRhZ2UgLyAxMDAsIHRoaXMuc2NhbGVQZXJjZW50YWdlIC8gMTAwLCB0aGlzLnNjYWxlUGVyY2VudGFnZSAvIDEwMCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJhd01ldGFkYXRhLmVsZXZhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZWxldmF0aW9uID0gcmF3TWV0YWRhdGEuZWxldmF0aW9uO1xyXG4gICAgICAgIHRoaXMuc2V0WVBvc2l0aW9uQmFzZWRPbkVsZXZhdGlvbigpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZWxldmF0aW9uID0gMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jYWxjdWxhdGVIYWxmU2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIG9uIGlzIGEgYm9vbCAqL1xyXG4gIHByb3RlY3RlZCB1cGRhdGVIaWdobGlnaHQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oaWdoTGlnaHREaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmhpZ2hsaWdodGVkID0gdGhpcy5ob3ZlciB8fCB0aGlzLnNlbGVjdGVkO1xyXG4gICAgaWYgKHRoaXMuc2hvd0hpZGVPdXRsaW5lSGFuZGxlcikge1xyXG4gICAgICB0aGlzLnNob3dIaWRlT3V0bGluZUhhbmRsZXIodGhpcy5fc2VsZWN0ZWRPYmplY3QgPyB0aGlzLl9zZWxlY3RlZE9iamVjdCA6IHRoaXMsIHRoaXMuaGlnaGxpZ2h0ZWQpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5nZXRWaXNpYmxlTWVzaGVzKCkuZm9yRWFjaCgobWVzaDogVEhSRUUuTWVzaCkgPT4ge1xyXG4gICAgLy8gICBjb25zdCBtZXNoQmVsb25nc1RvU2VsZWN0ZWRPYmplY3Q6IGJvb2xlYW4gPVxyXG4gICAgLy8gICAgICh0aGlzLmNvbmZpZ3VyaW5nICYmIG1lc2gucGFyZW50ICYmIHRoaXMuX3NlbGVjdGVkT2JqZWN0ICYmXHJcbiAgICAvLyAgICAgdGhpcy5fc2VsZWN0ZWRPYmplY3QubmFtZSA9PT0gbWVzaC5wYXJlbnQubmFtZSkgfHwgKCF0aGlzLmNvbmZpZ3VyaW5nKTtcclxuICAgIC8vICAgY29uc3QgZW1pc3NpdmUgPSB0aGlzLmhpZ2hsaWdodGVkICYmIG1lc2hCZWxvbmdzVG9TZWxlY3RlZE9iamVjdCA/IHRoaXMuZW1pc3NpdmVDb2xvciA6IDB4MDAwMDAwO1xyXG4gICAgLy8gICBjb25zdCBtYXRlcmlhbHM6IE1hdGVyaWFsW10gPSAhQXJyYXkuaXNBcnJheShtZXNoLm1hdGVyaWFsKSA/IFttZXNoLm1hdGVyaWFsXSA6IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAvLyAgIG1hdGVyaWFscy5mb3JFYWNoKG1hdGVyaWFsID0+IHtcclxuICAgIC8vICAgICBtYXRlcmlhbC5zZXRWYWx1ZXMoe2VtaXNzaXZlfSBhcyBhbnkpO1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIC8qKiAqL1xyXG4gIHB1YmxpYyBtb3VzZU92ZXIobWVzaDogTWVzaCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW91c2VPdmVySGFuZGxlcikge1xyXG4gICAgICB0aGlzLm1vdXNlT3ZlckhhbmRsZXIobWVzaCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhvdmVyID0gdHJ1ZTtcclxuICAgIHRoaXMudXBkYXRlSGlnaGxpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogKi9cclxuICBwdWJsaWMgbW91c2VPZmYoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb3VzZU9mZkhhbmRsZXIpIHtcclxuICAgICAgdGhpcy5tb3VzZU9mZkhhbmRsZXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMuaG92ZXIgPSBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlSGlnaGxpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogKi9cclxuICBwdWJsaWMgc2V0U2VsZWN0ZWQobWVzaD86IE1lc2gsIG1vdXNlUG9zaXRpb24/OiBWZWN0b3IzKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyaW5nKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkT2JqZWN0ID0gbWVzaCA/IG1lc2gucGFyZW50IGFzIEN1c3RvbU9iamVjdDNEIDogdW5kZWZpbmVkO1xyXG4gICAgICBpZiAodGhpcy5fZWxlbWVudFNlbGVjdGVkSGFuZGxlcikge1xyXG4gICAgICAgIHRoaXMuX2VsZW1lbnRTZWxlY3RlZEhhbmRsZXIobWVzaCwgbW91c2VQb3NpdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy51cGRhdGVIaWdobGlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKiAqL1xyXG4gIHB1YmxpYyBzZXRVbnNlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZUhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy5kZXNlbGVjdE9iamVjdCgpO1xyXG4gICAgdGhpcy5jb25maWd1cmluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsaWNrZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSGFuZGxlcih0aGlzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZXNlbGVjdE9iamVjdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnRVbnNlbGVjdGVkSGFuZGxlcikge1xyXG4gICAgICB0aGlzLl9lbGVtZW50VW5zZWxlY3RlZEhhbmRsZXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMudW5zZWxlY3RlZEhhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNpemUoaGVpZ2h0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGRlcHRoOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHggPSB3aWR0aCAvIHRoaXMuZ2V0V2lkdGgoKTtcclxuICAgIGNvbnN0IHkgPSBoZWlnaHQgLyB0aGlzLmdldEhlaWdodCgpO1xyXG4gICAgY29uc3QgeiA9IGRlcHRoIC8gdGhpcy5nZXREZXB0aCgpO1xyXG4gICAgdGhpcy5zZXRTY2FsZSh4LCB5LCB6KTtcclxuICAgIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoZmFsc2UsIHRydWUpO1xyXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjOiBDdXN0b21NZXNoKSA9PiB7XHJcbiAgICAgIGMucmVzZXRCb3VuZGluZ0JveCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzaXplZCgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMucmVjYWxjUGl2b3QoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldEJvdW5kaW5nYm94ZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYXZlcnNlKGNoaWxkID0+IHtcclxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgQ3VzdG9tTWVzaCkge1xyXG4gICAgICAgIGNoaWxkLnJlc2V0Qm91bmRpbmdCb3goKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBwcm90ZWN0ZWQgY3JlYXRlR2xvdyhjb2xvciwgb3BhY2l0eSA9IDAuMiwgaWdub3JlRGVwdGggPSBmYWxzZSk6IEdyb3VwIHtcclxuICAvLyAgIGNvbnN0IGdsb3dNYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7XHJcbiAgLy8gICAgIGNvbG9yLFxyXG4gIC8vICAgICBibGVuZGluZzogQWRkaXRpdmVCbGVuZGluZyxcclxuICAvLyAgICAgb3BhY2l0eSxcclxuICAvLyAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgLy8gICAgIGRlcHRoVGVzdDogIWlnbm9yZURlcHRoXHJcbiAgLy8gICB9KTtcclxuICAvLyAgIGNvbnN0IGdyb3VwID0gVXRpbHMuY2xvbmVHcm91cCh0aGlzLCBnbG93TWF0ZXJpYWwpO1xyXG4gIC8vICAgZ3JvdXAubmFtZSA9IGAke3RoaXMubmFtZX0tZ2xvd2A7XHJcbiAgLy8gICByZXR1cm4gZ3JvdXA7XHJcbiAgLy8gfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVjYWxjUGl2b3QoKSB7XHJcbiAgICBpZiAoIXRoaXMudmlzaWJsZUNsb25lIHx8ICF0aGlzLnZpc2libGVDbG9uZS5jaGlsZHJlbiB8fCB0aGlzLnZpc2libGVDbG9uZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghKGNoaWxkIGluc3RhbmNlb2YgQXhlc0hlbHBlcikpIHtcclxuICAgICAgICAvLyBjaGlsZC5wb3NpdGlvbi5zdWIobmV3IFZlY3RvcjMoMCwgIWlzTmFOKHRoaXMuaGFsZlNpemUueSkgPyB0aGlzLmhhbGZTaXplLnkgOiAwLCAwKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0T3JpZ2luYWxzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaGFsZlNpemU6IFZlY3RvcjMgPSB0aGlzLmdldEhhbGZTaXplV2l0aG91dFNjYWxlKCk7XHJcbiAgICBpZiAoaGFsZlNpemUpIHtcclxuICAgICAgdGhpcy5vcmlnaW5hbExlbmd0aCA9IGhhbGZTaXplLnggKiAyO1xyXG4gICAgICB0aGlzLm9yaWdpbmFsSGVpZ2h0ID0gaGFsZlNpemUueSAqIDI7XHJcbiAgICAgIHRoaXMub3JpZ2luYWxXaWR0aCA9IGhhbGZTaXplLnogKiAyO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
425
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL2l0ZW1zL2l0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsVUFBVSxFQUFFLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQVUsTUFBTSxPQUFPLENBQUM7QUFHakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkRBQTZELENBQUM7QUFJN0YsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRTNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU3RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sSUFBSyxTQUFRLFFBQVE7SUF3RWhDLDJDQUEyQztJQUUzQyxZQUNTLFdBQXFCLEVBQzVCLE1BQVcsRUFDWCxPQUFpQixFQUNqQixRQUFjO1FBRWQsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFMN0IsZ0JBQVcsR0FBWCxXQUFXLENBQVU7UUFyQ3ZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBUW5DLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBVXZCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUV2QyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQywwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFnQjNCLHNFQUFzRTtRQUV0RSxJQUFJLFdB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QUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYTtRQUNuQixNQUFNLFFBQVEsR0FBWSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUN6RCxJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYXNlSXRlbX0gZnJvbSAnLi9iYXNlLWl0ZW0nO1xyXG5pbXBvcnQge0N1c3RvbU1lc2gsIEN1c3RvbU9iamVjdDNEfSBmcm9tICcuL2N1c3RvbS1vYmplY3RzJztcclxuaW1wb3J0IHtBeGVzSGVscGVyLCBFdWxlciwgTWVzaCwgT2JqZWN0M0QsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHR5cGUge01ldGFkYXRhfSBmcm9tICcuL21ldGFkYXRhJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vY29yZS91dGlscyc7XHJcbmltcG9ydCB7SGRlY29Qb3NpdGlvbmluZ30gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL2hkZWNvLXBvc2l0aW9uaW5nLmVudW0nO1xyXG5pbXBvcnQge0FkanVzdGFibGVFbGVtZW50SW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9hZGp1c3RhYmxlLWVsZW1lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtUZXh0dXJlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUnO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge0Nsb25lVXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvY2xvbmUtdXRpbHMnO1xyXG5pbXBvcnQge0NoaWxkUGFyYW1zfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jaGlsZC1wYXJhbXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9vYmplY3QudXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIEFuIEl0ZW0gaXMgYW4gYWJzdHJhY3QgZW50aXR5IGZvciBhbGwgdGhpbmdzIHBsYWNlZCBpbiB0aGUgc2NlbmUsXHJcbiAqIGUuZy4gYXQgd2FsbHMgb3Igb24gdGhlIGZsb29yLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBCYXNlSXRlbSB7XHJcblxyXG4gIHB1YmxpYyBzZXQgYWxsd2F5c0NvbmZpZ3VyZU1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2FsbHdheXNDb25maWd1cmVNb2RlID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fYWxsd2F5c0NvbmZpZ3VyZU1vZGUpIHtcclxuICAgICAgdGhpcy5jb25maWd1cmluZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFsbHdheXNDb25maWd1cmVNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FsbHdheXNDb25maWd1cmVNb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjb25maWd1cmluZyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jb25maWd1cmluZyA9IHZhbHVlIHx8IHRoaXMuYWxsd2F5c0NvbmZpZ3VyZU1vZGU7XHJcbiAgICBpZiAodGhpcy5fY29uZmlndXJpbmcpIHtcclxuICAgICAgdGhpcy5hbGxvd1JvdGF0ZSA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGxvd1JvdGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmluZ0NoYW5nZUhhbmRsZXIpIHtcclxuICAgICAgLy8gdGhpcy5fY29uZmlndXJpbmdDaGFuZ2VIYW5kbGVyKHRoaXMudXNlckRhdGEuaXRlbUlkLCB0aGlzLnVzZXJEYXRhLml0ZW1JZGVudGlmaWVyLCB0aGlzLl9jb25maWd1cmluZyk7XHJcbiAgICAgIHRoaXMuY29uZmlndXJpbmdDaGFuZ2VIYW5kbGVyKHRoaXMubWV0YWRhdGEsIHRoaXMuX2NvbmZpZ3VyaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29uZmlndXJpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29uZmlndXJpbmc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3VsZE1vdmVDaGlsZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE9iamVjdCAmJiB0aGlzLl9zZWxlY3RlZE9iamVjdC51c2VyRGF0YS5zZWxlY3Rpb24gJiZcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRPYmplY3QudXNlckRhdGEuc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgPT09IEhkZWNvUG9zaXRpb25pbmcuVmFyaWFibGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb2Jzb2xldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2hpbGRQYXJhbXM6IENoaWxkUGFyYW1zO1xyXG4gIHB1YmxpYyBoaWdoTGlnaHREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB3YW50c1JvdGF0aW9uOiBFdWxlcjtcclxuICBwdWJsaWMgY29uZmlndXJpbmdDaGFuZ2VIYW5kbGVyOiBGdW5jdGlvbjtcclxuICBwdWJsaWMgbW91c2VPdmVySGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHVibGljIG1vdXNlT2ZmSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHVibGljIHNlbGVjdGVkSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHVibGljIHVuc2VsZWN0ZWRIYW5kbGVyOiBGdW5jdGlvbjtcclxuICBwdWJsaWMgc2hvd0hpZGVPdXRsaW5lSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHVibGljIG9yaWdpbmFsTGVuZ3RoOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBvcmlnaW5hbEhlaWdodDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgb3JpZ2luYWxXaWR0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIGRpZmYgb24gbWF0ZXJpYWxzIHdoZW4gYW4gaXRlbSBpcyBjb2xvcmFibGVcclxuICAgKi9cclxuICBwdWJsaWMgb3JpZ2luYWxJdGVtOiBJdGVtO1xyXG5cclxuICBwcm90ZWN0ZWQgdmlzaWJsZUNsb25lOiBPYmplY3QzRDtcclxuICBwcm90ZWN0ZWQgY2VudGVyUGl2b3Q6IGJvb2xlYW47XHJcbiAgcHJvdGVjdGVkIGlnbm9yZUludmlzaWJsZTogYm9vbGVhbjtcclxuICBwcm90ZWN0ZWQgdXBkYXRlUGl2b3RPbkNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9zaG91bGRTZXRTY2FsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2VsZW1lbnRDb25maWd1cmF0aW9uOiBBZGp1c3RhYmxlRWxlbWVudEludGVyZmFjZVtdO1xyXG4gIHByaXZhdGUgX2FsbHdheXNDb25maWd1cmVNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY29uZmlndXJpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIF9zZWxlY3RlZE9iamVjdDogQ3VzdG9tT2JqZWN0M0Q7XHJcbiAgcHJpdmF0ZSBfZWxlbWVudFNlbGVjdGVkSGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHJpdmF0ZSBfZWxlbWVudFVuc2VsZWN0ZWRIYW5kbGVyOiBGdW5jdGlvbjtcclxuICBwcml2YXRlIF9jaGlsZEVsZW1lbnRQb3NpdGlvbkNoYW5nZWRIYW5kbGVyOiBGdW5jdGlvbjtcclxuICBwcml2YXRlIF9kcmFnQ29ubmVjdG9ySGFuZGxlcjogRnVuY3Rpb247XHJcbiAgcHJpdmF0ZSBfY2hpbGRFbGVtZW50UGxhY2VIYW5kbGVyOiBGdW5jdGlvbjtcclxuICAvLyBwcml2YXRlIF9vdXRsaW5lU2VydmljZTogT3V0bGluZVNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJhd01ldGFkYXRhOiBNZXRhZGF0YSxcclxuICAgIG9iamVjdDogYW55LFxyXG4gICAgdGV4dHVyZT86IFRleHR1cmUsXHJcbiAgICBoYW5kbGVycz86IGFueVxyXG4gICkge1xyXG4gICAgc3VwZXIocmF3TWV0YWRhdGEsIG9iamVjdCwgdGV4dHVyZSk7XHJcbiAgICAvLyB0aGlzLl9vdXRsaW5lU2VydmljZSA9IFNlcnZpY2VMb2NhdG9yLmluamVjdG9yLmdldChPdXRsaW5lU2VydmljZSk7XHJcblxyXG4gICAgaWYgKHJhd01ldGFkYXRhKSB7XHJcbiAgICAgIHRoaXMub2Jzb2xldGUgPSByYXdNZXRhZGF0YS5vYnNvbGV0ZTtcclxuICAgICAgdGhpcy5fZWxlbWVudENvbmZpZ3VyYXRpb24gPSByYXdNZXRhZGF0YS5lbGVtZW50Q29uZmlndXJhdGlvbjtcclxuICAgICAgdGhpcy5jb25maWd1cmluZ0NoYW5nZUhhbmRsZXIgPSBoYW5kbGVycyAmJiBoYW5kbGVycy5jb25maWd1cmluZ0NoYW5nZWQgPyBoYW5kbGVycy5jb25maWd1cmluZ0NoYW5nZWQgOiB0aGlzLl9mYWtlSGFuZGxlcjtcclxuICAgICAgdGhpcy5fZWxlbWVudFNlbGVjdGVkSGFuZGxlciA9IGhhbmRsZXJzICYmIGhhbmRsZXJzLmVsZW1lbnRTZWxlY3RlZCA/IGhhbmRsZXJzLmVsZW1lbnRTZWxlY3RlZCA6IHRoaXMuX2Zha2VIYW5kbGVyO1xyXG4gICAgICB0aGlzLl9lbGVtZW50VW5zZWxlY3RlZEhhbmRsZXIgPSBoYW5kbGVycyAmJiBoYW5kbGVycy5lbGVtZW50VW5zZWxlY3RlZCA/IGhhbmRsZXJzLmVsZW1lbnRVbnNlbGVjdGVkIDogdGhpcy5fZmFrZUhhbmRsZXI7XHJcbiAgICAgIHRoaXMuX2NoaWxkRWxlbWVudFBvc2l0aW9uQ2hhbmdlZEhhbmRsZXIgPVxyXG4gICAgICAgIGhhbmRsZXJzICYmIGhhbmRsZXJzLmNoaWxkRWxlbWVudFBvc2l0aW9uQ2hhbmdlZEhhbmRsZXIgPyBoYW5kbGVycy5jaGlsZEVsZW1lbnRQb3NpdGlvbkNoYW5nZWRIYW5kbGVyIDogdGhpcy5fZmFrZUhhbmRsZXI7XHJcbiAgICAgIHRoaXMuX2RyYWdDb25uZWN0b3JIYW5kbGVyID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMuZHJhZ0Nvbm5lY3RvckhhbmRsZXIgPyBoYW5kbGVycy5kcmFnQ29ubmVjdG9ySGFuZGxlciA6IHRoaXMuX2Zha2VIYW5kbGVyO1xyXG4gICAgICB0aGlzLl9jaGlsZEVsZW1lbnRQbGFjZUhhbmRsZXIgPVxyXG4gICAgICAgIGhhbmRsZXJzICYmIGhhbmRsZXJzLmNoaWxkRWxlbWVudFBsYWNlSGFuZGxlciA/IGhhbmRsZXJzLmNoaWxkRWxlbWVudFBsYWNlSGFuZGxlciA6IHRoaXMuX2Zha2VIYW5kbGVyO1xyXG4gICAgICB0aGlzLm1vdXNlT3ZlckhhbmRsZXIgPSBoYW5kbGVycyAmJiBoYW5kbGVycy5tb3VzZU92ZXIgPyBoYW5kbGVycy5tb3VzZU92ZXIgOiB0aGlzLl9mYWtlSGFuZGxlcjtcclxuICAgICAgdGhpcy5tb3VzZU9mZkhhbmRsZXIgPSBoYW5kbGVycyAmJiBoYW5kbGVycy5tb3VzZU9mZiA/IGhhbmRsZXJzLm1vdXNlT2ZmIDogdGhpcy5fZmFrZUhhbmRsZXI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRIYW5kbGVyID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMuaXRlbVNlbGVjdGVkID8gaGFuZGxlcnMuaXRlbVNlbGVjdGVkIDogdGhpcy5fZmFrZUhhbmRsZXI7XHJcbiAgICAgIHRoaXMudW5zZWxlY3RlZEhhbmRsZXIgPSBoYW5kbGVycyAmJiBoYW5kbGVycy5pdGVtVW5zZWxlY3RlZCA/IGhhbmRsZXJzLml0ZW1VbnNlbGVjdGVkIDogdGhpcy5fZmFrZUhhbmRsZXI7XHJcbiAgICAgIHRoaXMuc2hvd0hpZGVPdXRsaW5lSGFuZGxlciA9IGhhbmRsZXJzICYmIGhhbmRsZXJzLnNob3dIaWRlT3V0bGluZUhhbmRsZXIgPyBoYW5kbGVycy5zaG93SGlkZU91dGxpbmVIYW5kbGVyIDogdGhpcy5fZmFrZUhhbmRsZXI7XHJcblxyXG4gICAgICAvLyB0aGlzLmFkanVzdGFibGUgPSBhZGp1c3RhYmxlO1xyXG4gICAgICB0aGlzLmNlbnRlclBpdm90ID0gcmF3TWV0YWRhdGEuY2VudGVyUGl2b3Q7XHJcbiAgICAgIHRoaXMuaWdub3JlSW52aXNpYmxlID0gcmF3TWV0YWRhdGEuaWdub3JlSW52aXNpYmxlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGlsZFBhcmFtcyA9IHtcclxuICAgICAgaWdub3JlSW52aXNpYmxlOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIGlmIChvYmplY3QgJiYgb2JqZWN0Lmdlb21ldHJ5ICYmIG9iamVjdC5tYXRlcmlhbCkge1xyXG4gICAgICBjb25zdCBtZXNoID0gbmV3IE1lc2gob2JqZWN0Lmdlb21ldHJ5LCBvYmplY3QubWF0ZXJpYWwpO1xyXG4gICAgICBjb25zdCBjdXN0b21NZXNoID0gQ3VzdG9tTWVzaC5jcmVhdGUobWVzaCk7XHJcbiAgICAgIGN1c3RvbU1lc2gubmFtZSA9IGBjdXN0b20tZmxvb3ItZ3JvdXAtJHt0aGlzLm5hbWV9LW1lc2hgO1xyXG4gICAgICB0aGlzLmFkZChjdXN0b21NZXNoKTtcclxuICAgICAgb2JqZWN0ID0gY3VzdG9tTWVzaDtcclxuICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIG9iamVjdCBpbnN0YW5jZW9mIE9iamVjdDNEKSB7XHJcbiAgICAgIG9iamVjdC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogTWVzaCB8IE9iamVjdDNEKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRQYXJhbXMuaWdub3JlSW52aXNpYmxlICYmICFjaGlsZC52aXNpYmxlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51c2VQaXZvdCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVBpdm90KHRoaXMudXBkYXRlUGl2b3RPbkNyZWF0ZSk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmFkZChuZXcgQXhlc0hlbHBlcigyKSk7XHJcbiAgICB0aGlzLl9zZXRPcmlnaW5hbHMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFuIGNsb25lIHdpdGhvdXQgb3duIHByb3BlcnRpZXNcclxuICAgKiBAcGFyYW0gcmVjdXJzaXZlXHJcbiAgICovXHJcbiAgcHVibGljIGNsb25lKHJlY3Vyc2l2ZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHJldHVybiBDbG9uZVV0aWxzLkNsZWFuQ2xvbmVPYmplY3QodGhpcywgcmVjdXJzaXZlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLm9yaWdpbmFsSXRlbSk7XHJcbiAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMudmlzaWJsZUNsb25lKTtcclxuICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5fc2VsZWN0ZWRPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmFrZUhhbmRsZXIoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRJZGVudGlmaWVyRnJvbVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7c2VsZWN0aW9uLmRlY29Ob2RlID8gc2VsZWN0aW9uLmRlY29Ob2RlLm5vZGVJZCArICdfJyA6ICcnfSR7c2VsZWN0aW9uLm5vZGVJZH1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1aWxkRmluaXNoZWQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5idWlsZEZpbmlzaGVkKCk7XHJcbiAgICB0aGlzLmhhbmRsZVJhd01ldGFkYXRhKCk7XHJcbiAgICAvLyBJZiBpdCdzIHBvc3NpYmxlIHRvIGNoYW5nZSBtYXRlcmlhbHMgdGhlbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBvcmlnaW5hbCBpdGVtXHJcbiAgICAvLyBUaGlzIHdheSB3aGVuIHdlIHNhdmUgdGhlIHByb2plY3Qgd2UgY2FuIGRvIGEgZGlmZiBvbiB0aGUgbWF0ZXJpYWxzIGFuZCBzdG9yZVxyXG4gICAgLy8gY2hhbmdlcyBpbnN0ZWFkIG9mIHRoZSB3aG9sZSBtYXRlcmlhbFxyXG4gICAgaWYgKHRoaXMuY29sb3JhYmxlKSB7XHJcbiAgICAgIGlmICh0aGlzLm9yaWdpbmFsSXRlbSkge1xyXG4gICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5vcmlnaW5hbEl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3JpZ2luYWxJdGVtID0gT2JqZWN0VXRpbHMuRGVlcENsb25lT2JqZWN0M0QodGhpcykgYXMgSXRlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25uZWN0b3JGcm9tRWxlbWVudChzZWxlY3Rpb246IFNlbGVjdGlvbik6IEFkanVzdGFibGVFbGVtZW50SW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IGlkOiBzdHJpbmcgPSB0aGlzLl9nZXRJZGVudGlmaWVyRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRDb25maWd1cmF0aW9uID8gdGhpcy5fZWxlbWVudENvbmZpZ3VyYXRpb24uZmluZChlID0+IGUuaWRlbnRpZmllciA9PT0gaWQpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q29ubmVjdG9yKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb25uZWN0b3I6IHN0cmluZywgY29ubmVjdGVkTm9kZUlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fZWxlbWVudENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgdGhpcy5fZWxlbWVudENvbmZpZ3VyYXRpb24gPSBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGlkOiBzdHJpbmcgPSB0aGlzLl9nZXRJZGVudGlmaWVyRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLl9lbGVtZW50Q29uZmlndXJhdGlvbi5maW5kSW5kZXgoZSA9PiBlLmlkZW50aWZpZXIgPT09IGlkKTtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRDb25maWd1cmF0aW9uLnB1c2goe2lkZW50aWZpZXI6IGlkLCBjb25uZWN0b3I6IGNvbm5lY3RvciwgY29ubmVjdGVkTm9kZUlkOiBjb25uZWN0ZWROb2RlSWR9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRDb25maWd1cmF0aW9uW2lkeF0gPSB7aWRlbnRpZmllcjogaWQsIGNvbm5lY3RvcjogY29ubmVjdG9yLCBjb25uZWN0ZWROb2RlSWQ6IGNvbm5lY3RlZE5vZGVJZH07XHJcbiAgICB9XHJcbiAgICB0aGlzLm1ldGFkYXRhLmVsZW1lbnRDb25maWd1cmF0aW9uID0gdGhpcy5fZWxlbWVudENvbmZpZ3VyYXRpb24uc2xpY2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckNoaWxkcmVuKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSBsZW47IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmICghKHRoaXMuY2hpbGRyZW5baV0gaW5zdGFuY2VvZiBBeGVzSGVscGVyKSkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkQ2hpbGQoY2hpbGQ6IE9iamVjdDNEIHwgTWVzaCk6IHZvaWQge1xyXG4gICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTWVzaCkge1xyXG4gICAgICBjb25zdCBtZXNoID0gQ3VzdG9tTWVzaC5jcmVhdGUoY2hpbGQpO1xyXG4gICAgICAvLyBtZXNoLmFkZChuZXcgQXhlc0hlbHBlcigxKSk7XHJcbiAgICAgIHRoaXMuYWRkKG1lc2gpO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIE9iamVjdDNEKSB7XHJcbiAgICAgIGNvbnN0IG9iamVjdDNkID0gbmV3IEN1c3RvbU9iamVjdDNEKGNoaWxkLCB0aGlzLmNoaWxkUGFyYW1zKTtcclxuICAgICAgLy8gb2JqZWN0M2QuYWRkKG5ldyBBeGVzSGVscGVyKDEpKTtcclxuICAgICAgdGhpcy5hZGQob2JqZWN0M2QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdmVDaGlsZFRvUG9zaXRpb24ocG9zOiBWZWN0b3IzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fY2hpbGRFbGVtZW50UG9zaXRpb25DaGFuZ2VkSGFuZGxlcikge1xyXG4gICAgICB0aGlzLl9jaGlsZEVsZW1lbnRQb3NpdGlvbkNoYW5nZWRIYW5kbGVyKHRoaXMuX3NlbGVjdGVkT2JqZWN0LCBwb3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRyYWdDb25uZWN0b3IoY29ubmVjdG9yOiBDdXN0b21NZXNoIHwgTWVzaCwgcG9zOiBWZWN0b3IzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZHJhZ0Nvbm5lY3RvckhhbmRsZXIpIHtcclxuICAgICAgdGhpcy5fZHJhZ0Nvbm5lY3RvckhhbmRsZXIoY29ubmVjdG9yLCBwb3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb25lVmlzaWJsZSgpOiBPYmplY3QzRCB7XHJcbiAgICAvLyBpZiB3ZSBpZ25vcmUgYWxsIHRoZSBpbnZpc2libGUgY2hpbGRyZW4gd2UgY2FuIHJldHVybiB0aGlzXHJcbiAgICBpZiAodGhpcy5jaGlsZFBhcmFtcy5pZ25vcmVJbnZpc2libGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBPYmplY3QzRCgpO1xyXG4gICAgZ3JvdXAucm90YXRpb24uY29weSh0aGlzLnJvdGF0aW9uKTtcclxuICAgIGdyb3VwLnBvc2l0aW9uLmNvcHkodGhpcy5wb3NpdGlvbik7XHJcbiAgICBncm91cC5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xyXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjOiBDdXN0b21PYmplY3QzRCB8IEN1c3RvbU1lc2gpID0+IHtcclxuICAgICAgaWYgKChjLnZpc2libGUgfHwgdGhpcy5jaGlsZFBhcmFtcy5pZ25vcmVJbnZpc2libGUpICYmIChjIGluc3RhbmNlb2YgQ3VzdG9tT2JqZWN0M0QgfHwgYyBpbnN0YW5jZW9mIEN1c3RvbU1lc2gpKSB7XHJcbiAgICAgICAgZ3JvdXAuYWRkKGMuY2xvbmVWaXNpYmxlKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVQaXZvdChmb3JjZT86IGJvb2xlYW4pIHtcclxuICAgIC8vIHRoaXMuZGVzZWxlY3RPYmplY3QoKTtcclxuXHJcbiAgICBpZiAodGhpcy52aXNpYmxlQ2xvbmUgPT09IHRoaXMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmlzaWJsZUNsb25lKSB7XHJcbiAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy52aXNpYmxlQ2xvbmUpO1xyXG4gICAgICB0aGlzLnZpc2libGVDbG9uZSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHRoaXMudmlzaWJsZUNsb25lID0gdGhpcy5jbG9uZVZpc2libGUoKTtcclxuXHJcbiAgICB0aGlzLnZpc2libGVDbG9uZS5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICB0aGlzLnZpc2libGVDbG9uZS5yb3RhdGlvbi5zZXQoMCwgMCwgMCk7XHJcblxyXG4gICAgdGhpcy5jYWxjdWxhdGVIYWxmU2l6ZSgpO1xyXG4gICAgaWYgKHRoaXMuY2VudGVyUGl2b3QpIHtcclxuICAgICAgdGhpcy5yZWNhbGNQaXZvdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aXNpYmxlQ2xvbmUucm90YXRpb24uY29weSh0aGlzLnJvdGF0aW9uKTtcclxuICAgIHRoaXMudmlzaWJsZUNsb25lLnBvc2l0aW9uLmNvcHkodGhpcy5wb3NpdGlvbik7XHJcbiAgICB0aGlzLmhlaWdodFVwZGF0ZWQoKTtcclxuICAgIHRoaXMuX3NldE9yaWdpbmFscygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFZpc2libGVNZXNoZXNQYXJlbnRzKCk6IChJdGVtIHwgQ3VzdG9tTWVzaClbXSB7XHJcbiAgICBjb25zdCB2aXNpYmxlQ2hpbGRyZW46IChJdGVtIHwgQ3VzdG9tTWVzaClbXSA9IFtdO1xyXG4gICAgdGhpcy50cmF2ZXJzZShjID0+IHtcclxuICAgICAgaWYgKGMucGFyZW50ICYmIGMucGFyZW50LnZpc2libGUgJiYgYy52aXNpYmxlICYmIGMgaW5zdGFuY2VvZiBDdXN0b21NZXNoKSB7XHJcbiAgICAgICAgdmlzaWJsZUNoaWxkcmVuLnB1c2goYyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHZpc2libGVDaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPYmplY3RzQnlVc2VyRGF0YVByb3AodXNlckRhdGFPYmplY3RQcm9wOiBzdHJpbmcsIHByb3A6IHN0cmluZywgdmFsdWU6IGFueSk6IEN1c3RvbU9iamVjdDNEW10ge1xyXG4gICAgLy8gZml4IC0+IGZpbHRlclxyXG4gICAgcmV0dXJuIDxDdXN0b21PYmplY3QzRFtdPnRoaXMuY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4ge1xyXG4gICAgICByZXR1cm4gY2hpbGQudXNlckRhdGEgJiZcclxuICAgICAgICBjaGlsZC51c2VyRGF0YS5oYXNPd25Qcm9wZXJ0eSh1c2VyRGF0YU9iamVjdFByb3ApICYmXHJcbiAgICAgICAgY2hpbGQudXNlckRhdGFbdXNlckRhdGFPYmplY3RQcm9wXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxyXG4gICAgICAgIGNoaWxkLnVzZXJEYXRhW3VzZXJEYXRhT2JqZWN0UHJvcF1bcHJvcF0gPT09IHZhbHVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T3ZlcmFsbFBvc2l0aW9uKG5ld0Jhc2VQb3NpdGlvbj86IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuICAgIHJldHVybiBuZXdCYXNlUG9zaXRpb24gfHwgdGhpcy5wb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb21wb3NlZFBvc2l0aW9ucyhuZXdCYXNlUG9zaXRpb24/OiBWZWN0b3IzKTogVmVjdG9yM1tdIHtcclxuICAgIHJldHVybiBbbmV3QmFzZVBvc2l0aW9uIHx8IHRoaXMucG9zaXRpb25dO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbXBvc2VkUm90YXRpb25zKG5ld0Jhc2VSb3RhdGlvbj86IEV1bGVyKTogRXVsZXJbXSB7XHJcbiAgICByZXR1cm4gW25ld0Jhc2VSb3RhdGlvbiB8fCB0aGlzLnJvdGF0aW9uXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbmREcmFnKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlndXJpbmcpIHtcclxuICAgICAgaWYgKHRoaXMuX2NoaWxkRWxlbWVudFBsYWNlSGFuZGxlcikge1xyXG4gICAgICAgIHRoaXMuX2NoaWxkRWxlbWVudFBsYWNlSGFuZGxlcih0aGlzLl9zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0T2JqZWN0KGl0ZW1UeXBlLCBpZCA9ICcnLCBpZGVudGlmaWVyID0gJycsIG1vZGVsVXJsKTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXJEYXRhLml0ZW1UeXBlID0gaXRlbVR5cGU7XHJcbiAgICB0aGlzLnVzZXJEYXRhLml0ZW1JZCA9IGlkO1xyXG4gICAgdGhpcy51c2VyRGF0YS5pdGVtSWRlbnRpZmllciA9IGlkZW50aWZpZXI7XHJcbiAgICB0aGlzLnVzZXJEYXRhLm1vZGVsVXJsID0gbW9kZWxVcmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SGFsZlNpemUoKTogVmVjdG9yMyB7XHJcbiAgICByZXR1cm4gdGhpcy5oYWxmU2l6ZS5jbG9uZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZVJhd01ldGFkYXRhKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcmF3TWV0YWRhdGE6IE1ldGFkYXRhID0gdGhpcy5yYXdNZXRhZGF0YTtcclxuICAgIGlmIChyYXdNZXRhZGF0YSkge1xyXG4gICAgICB0aGlzLmluaXRPYmplY3QocmF3TWV0YWRhdGEuaXRlbVR5cGUsIHJhd01ldGFkYXRhLml0ZW1JZCwgcmF3TWV0YWRhdGEuaXRlbUlkZW50aWZpZXIsIHJhd01ldGFkYXRhLm1vZGVsVXJsKTtcclxuICAgICAgaWYgKHJhd01ldGFkYXRhLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKHJhd01ldGFkYXRhLnJvdGF0aW9uIGluc3RhbmNlb2YgRXVsZXIpIHtcclxuICAgICAgICAgIHRoaXMucm90YXRpb24uc2V0KHJhd01ldGFkYXRhLnJvdGF0aW9uLngsIHJhd01ldGFkYXRhLnJvdGF0aW9uLnksIHJhd01ldGFkYXRhLnJvdGF0aW9uLnopO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJvdGF0aW9uLnkgPSByYXdNZXRhZGF0YS5yb3RhdGlvbiB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocmF3TWV0YWRhdGEucG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkocmF3TWV0YWRhdGEucG9zaXRpb24pO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25TZXQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25TZXQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmF3TWV0YWRhdGEuc2NhbGUpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5TY2FsZVggfHwgdGhpcy5jYW5TY2FsZVkgfHwgdGhpcy5jYW5TY2FsZVopIHtcclxuICAgICAgICAgIHRoaXMuc2V0U2NhbGVYWVoodGhpcy5yYXdNZXRhZGF0YS5zY2FsZS54LCB0aGlzLnJhd01ldGFkYXRhLnNjYWxlLnksIHRoaXMucmF3TWV0YWRhdGEuc2NhbGUueik7XHJcbiAgICAgICAgICAvLyB0aGlzLl9zaG91bGRTZXRTY2FsZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2NhbGVHZW9tZXRyeShyYXdNZXRhZGF0YS5zY2FsZS54LCByYXdNZXRhZGF0YS5zY2FsZS55LCByYXdNZXRhZGF0YS5zY2FsZS56KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2NhbGVQZXJjZW50YWdlICE9PSAxMDApIHtcclxuICAgICAgICB0aGlzLnNjYWxlLnNldCh0aGlzLnNjYWxlUGVyY2VudGFnZSAvIDEwMCwgdGhpcy5zY2FsZVBlcmNlbnRhZ2UgLyAxMDAsIHRoaXMuc2NhbGVQZXJjZW50YWdlIC8gMTAwKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmF3TWV0YWRhdGEuZWxldmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5lbGV2YXRpb24gPSByYXdNZXRhZGF0YS5lbGV2YXRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbGV2YXRpb24gPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbGN1bGF0ZUhhbGZTaXplKCk7XHJcbiAgICB0aGlzLnNldFlQb3NpdGlvbkJhc2VkT25FbGV2YXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8qKiBvbiBpcyBhIGJvb2wgKi9cclxuICBwcm90ZWN0ZWQgdXBkYXRlSGlnaGxpZ2h0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaGlnaExpZ2h0RGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oaWdobGlnaHRlZCA9IHRoaXMuaG92ZXIgfHwgdGhpcy5zZWxlY3RlZDtcclxuICAgIGlmICh0aGlzLnNob3dIaWRlT3V0bGluZUhhbmRsZXIpIHtcclxuICAgICAgdGhpcy5zaG93SGlkZU91dGxpbmVIYW5kbGVyKHRoaXMuX3NlbGVjdGVkT2JqZWN0ID8gdGhpcy5fc2VsZWN0ZWRPYmplY3QgOiB0aGlzLCB0aGlzLmhpZ2hsaWdodGVkKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZ2V0VmlzaWJsZU1lc2hlcygpLmZvckVhY2goKG1lc2g6IFRIUkVFLk1lc2gpID0+IHtcclxuICAgIC8vICAgY29uc3QgbWVzaEJlbG9uZ3NUb1NlbGVjdGVkT2JqZWN0OiBib29sZWFuID1cclxuICAgIC8vICAgICAodGhpcy5jb25maWd1cmluZyAmJiBtZXNoLnBhcmVudCAmJiB0aGlzLl9zZWxlY3RlZE9iamVjdCAmJlxyXG4gICAgLy8gICAgIHRoaXMuX3NlbGVjdGVkT2JqZWN0Lm5hbWUgPT09IG1lc2gucGFyZW50Lm5hbWUpIHx8ICghdGhpcy5jb25maWd1cmluZyk7XHJcbiAgICAvLyAgIGNvbnN0IGVtaXNzaXZlID0gdGhpcy5oaWdobGlnaHRlZCAmJiBtZXNoQmVsb25nc1RvU2VsZWN0ZWRPYmplY3QgPyB0aGlzLmVtaXNzaXZlQ29sb3IgOiAweDAwMDAwMDtcclxuICAgIC8vICAgY29uc3QgbWF0ZXJpYWxzOiBNYXRlcmlhbFtdID0gIUFycmF5LmlzQXJyYXkobWVzaC5tYXRlcmlhbCkgPyBbbWVzaC5tYXRlcmlhbF0gOiBtZXNoLm1hdGVyaWFsO1xyXG4gICAgLy8gICBtYXRlcmlhbHMuZm9yRWFjaChtYXRlcmlhbCA9PiB7XHJcbiAgICAvLyAgICAgbWF0ZXJpYWwuc2V0VmFsdWVzKHtlbWlzc2l2ZX0gYXMgYW55KTtcclxuICAgIC8vICAgICBtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICAvKiogKi9cclxuICBwdWJsaWMgbW91c2VPdmVyKG1lc2g6IE1lc2gpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vdXNlT3ZlckhhbmRsZXIpIHtcclxuICAgICAgdGhpcy5tb3VzZU92ZXJIYW5kbGVyKG1lc2gpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ob3ZlciA9IHRydWU7XHJcbiAgICB0aGlzLnVwZGF0ZUhpZ2hsaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqICovXHJcbiAgcHVibGljIG1vdXNlT2ZmKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW91c2VPZmZIYW5kbGVyKSB7XHJcbiAgICAgIHRoaXMubW91c2VPZmZIYW5kbGVyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhvdmVyID0gZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZUhpZ2hsaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqICovXHJcbiAgcHVibGljIHNldFNlbGVjdGVkKG1lc2g/OiBNZXNoLCBtb3VzZVBvc2l0aW9uPzogVmVjdG9yMyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmluZykge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZE9iamVjdCA9IG1lc2ggPyBtZXNoLnBhcmVudCBhcyBDdXN0b21PYmplY3QzRCA6IHVuZGVmaW5lZDtcclxuICAgICAgaWYgKHRoaXMuX2VsZW1lbnRTZWxlY3RlZEhhbmRsZXIpIHtcclxuICAgICAgICB0aGlzLl9lbGVtZW50U2VsZWN0ZWRIYW5kbGVyKG1lc2gsIG1vdXNlUG9zaXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudXBkYXRlSGlnaGxpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogKi9cclxuICBwdWJsaWMgc2V0VW5zZWxlY3RlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb25maWd1cmFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVIaWdobGlnaHQoKTtcclxuICAgIHRoaXMuZGVzZWxlY3RPYmplY3QoKTtcclxuICAgIHRoaXMuY29uZmlndXJpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGlja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEhhbmRsZXIodGhpcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVzZWxlY3RPYmplY3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZE9iamVjdCA9IHVuZGVmaW5lZDtcclxuICAgIGlmICh0aGlzLl9lbGVtZW50VW5zZWxlY3RlZEhhbmRsZXIpIHtcclxuICAgICAgdGhpcy5fZWxlbWVudFVuc2VsZWN0ZWRIYW5kbGVyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVuc2VsZWN0ZWRIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzaXplKGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBkZXB0aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCB4ID0gd2lkdGggLyB0aGlzLmdldFdpZHRoKCk7XHJcbiAgICBjb25zdCB5ID0gaGVpZ2h0IC8gdGhpcy5nZXRIZWlnaHQoKTtcclxuICAgIGNvbnN0IHogPSBkZXB0aCAvIHRoaXMuZ2V0RGVwdGgoKTtcclxuICAgIHRoaXMuc2V0U2NhbGUoeCwgeSwgeik7XHJcbiAgICB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KGZhbHNlLCB0cnVlKTtcclxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoYzogQ3VzdG9tTWVzaCkgPT4ge1xyXG4gICAgICBjLnJlc2V0Qm91bmRpbmdCb3goKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2l6ZWQoKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnJlY2FsY1Bpdm90KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRCb3VuZGluZ2JveGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy50cmF2ZXJzZShjaGlsZCA9PiB7XHJcbiAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEN1c3RvbU1lc2gpIHtcclxuICAgICAgICBjaGlsZC5yZXNldEJvdW5kaW5nQm94KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJvdGVjdGVkIGNyZWF0ZUdsb3coY29sb3IsIG9wYWNpdHkgPSAwLjIsIGlnbm9yZURlcHRoID0gZmFsc2UpOiBHcm91cCB7XHJcbiAgLy8gICBjb25zdCBnbG93TWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe1xyXG4gIC8vICAgICBjb2xvcixcclxuICAvLyAgICAgYmxlbmRpbmc6IEFkZGl0aXZlQmxlbmRpbmcsXHJcbiAgLy8gICAgIG9wYWNpdHksXHJcbiAgLy8gICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gIC8vICAgICBkZXB0aFRlc3Q6ICFpZ25vcmVEZXB0aFxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICBjb25zdCBncm91cCA9IFV0aWxzLmNsb25lR3JvdXAodGhpcywgZ2xvd01hdGVyaWFsKTtcclxuICAvLyAgIGdyb3VwLm5hbWUgPSBgJHt0aGlzLm5hbWV9LWdsb3dgO1xyXG4gIC8vICAgcmV0dXJuIGdyb3VwO1xyXG4gIC8vIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlY2FsY1Bpdm90KCkge1xyXG4gICAgaWYgKCF0aGlzLnZpc2libGVDbG9uZSB8fCAhdGhpcy52aXNpYmxlQ2xvbmUuY2hpbGRyZW4gfHwgdGhpcy52aXNpYmxlQ2xvbmUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIShjaGlsZCBpbnN0YW5jZW9mIEF4ZXNIZWxwZXIpKSB7XHJcbiAgICAgICAgLy8gY2hpbGQucG9zaXRpb24uc3ViKG5ldyBWZWN0b3IzKDAsICFpc05hTih0aGlzLmhhbGZTaXplLnkpID8gdGhpcy5oYWxmU2l6ZS55IDogMCwgMCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldE9yaWdpbmFscygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGhhbGZTaXplOiBWZWN0b3IzID0gdGhpcy5nZXRIYWxmU2l6ZVdpdGhvdXRTY2FsZSgpO1xyXG4gICAgaWYgKGhhbGZTaXplKSB7XHJcbiAgICAgIHRoaXMub3JpZ2luYWxMZW5ndGggPSBoYWxmU2l6ZS54ICogMjtcclxuICAgICAgdGhpcy5vcmlnaW5hbEhlaWdodCA9IGhhbGZTaXplLnkgKiAyO1xyXG4gICAgICB0aGlzLm9yaWdpbmFsV2lkdGggPSBoYWxmU2l6ZS56ICogMjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|