dcl-npc-toolkit 1.5.2-20250415203310.commit-be60b9e → 1.5.2-20251229114921.commit-4a0a155
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/README.md +35 -1
- package/dist/bubble.js +1 -1
- package/dist/dialog.d.ts +2 -2
- package/dist/dialog.js +25 -17
- package/dist/index.d.ts +3 -2
- package/dist/index.js +4 -3
- package/dist/npc.d.ts +6 -1
- package/dist/npc.js +161 -24
- package/dist/npcData.d.ts +1 -0
- package/dist/npcData.js +3 -2
- package/dist/types.d.ts +1 -0
- package/dist/types.js +1 -1
- package/dist/utils/math.d.ts +28 -0
- package/dist/utils/math.js +239 -0
- package/dist/utils/path.d.ts +18 -0
- package/dist/utils/path.js +125 -0
- package/dist/utils/utils.d.ts +7 -0
- package/dist/utils/utils.js +46 -0
- package/package.json +4 -4
package/dist/types.js
CHANGED
|
@@ -36,4 +36,4 @@ export var NPCPathType;
|
|
|
36
36
|
NPCPathType["SMOOTH_PATH"] = "smooth";
|
|
37
37
|
NPCPathType["RIGID_PATH"] = "rigid";
|
|
38
38
|
})(NPCPathType || (NPCPathType = {}));
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0ZBLE1BQU0sQ0FBTixJQUFZLFlBY1g7QUFkRCxXQUFZLFlBQVk7SUFDdEIsdUJBQU8sQ0FBQTtJQUNQLHVCQUFPLENBQUE7SUFDUCw2QkFBYSxDQUFBO0lBQ2IsMkJBQVcsQ0FBQTtJQUNYLHlDQUF5QixDQUFBO0lBQ3pCLHlDQUF5QixDQUFBO0lBQ3pCLDJDQUEyQixDQUFBO0lBQzNCLHVDQUF1QixDQUFBO0lBQ3ZCLDJDQUEyQixDQUFBO0lBQzNCLDJDQUEyQixDQUFBO0lBQzNCLDZDQUE2QixDQUFBO0lBQzdCLHlDQUF5QixDQUFBO0lBQ3pCLCtCQUFlLENBQUE7QUFDakIsQ0FBQyxFQWRXLFlBQVksS0FBWixZQUFZLFFBY3ZCO0FBNEhELE1BQU0sQ0FBTixJQUFZLFFBS1g7QUFMRCxXQUFZLFFBQVE7SUFDbEIsaUNBQXFCLENBQUE7SUFDckIsK0JBQW1CLENBQUE7SUFDbkIscUNBQXlCLENBQUE7QUFFM0IsQ0FBQyxFQUxXLFFBQVEsS0FBUixRQUFRLFFBS25CO0FBRUQsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNyQixnQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsV0FBVyxLQUFYLFdBQVcsUUFHdEI7QUFFRCxNQUFNLENBQU4sSUFBWSxPQUlYO0FBSkQsV0FBWSxPQUFPO0lBQ2pCLDBCQUFlLENBQUE7SUFDZiw0QkFBaUIsQ0FBQTtJQUNqQiw0QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsT0FBTyxLQUFQLE9BQU8sUUFJbEI7QUFFRCxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLHFDQUFzQixDQUFBO0lBQ3RCLG1DQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSwgUEJBdmF0YXJTaGFwZSwgUEJHbHRmQ29udGFpbmVyIH0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5cbi8qKlxuICogRnJhZ21lbnQgb2YgYSBjb252ZXJzYXRpb24gd2l0aCBhbiBOUENcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEaWFsb2cgLSBBbiBlbnRyeSBpbiBhbiBOUEMgY29udmVyc2F0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGV4dCBUaGUgZGlhbG9nIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIE9wdGlvbmFsIG5hbWUgb2YgdGhlIGRpYWxvZyBlbnRyeSwgdG8gbGluayBvdGhlciBlbnRyaWVzIHRvIHRoaXMgb25lIGFuZCBub3Qgd29ycnkgYWJvdXQgY2hhbmdlcyBpbiB0aGUgYXJyYXkgbGVuZ3RoXG4gKiBAcHJvcGVydHkge251bWJlcn0gZm9udFNpemUgU2l6ZSBvZiB0aGUgdGV4dFxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFggT2Zmc2V0IG9mIHRoZSB0ZXh0IG9uIHRoZSBYIGF4aXMsIHJlbGF0aXZlIHRvIGl0cyBub3JtYWwgcG9zaXRpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gb2Zmc2V0WSBPZmZzZXQgb2YgdGhlIHRleHQgb24gdGhlIFkgYXhpcywgcmVsYXRpdmUgdG8gaXRzIG5vcm1hbCBwb3NpdGlvbi5cbiAqIEBwcm9wZXJ0eSB7SW1hZ2VEYXRhfSBwb3J0cmFpdCBTZXRzIHRoZSBwb3J0cmFpdCBpbWFnZSB0byB1c2Ugb24gdGhlIGxlZnQuIFRoaXMgZmllbGQgZXhwZWN0cyBhIGBQb3J0cmFpdGAgb2JqZWN0LlxuICogQHByb3BlcnR5IHtJbWFnZURhdGF9IGltYWdlIFNldHMgYSBzZWNvbmQgaW1hZ2UgdG8gdXNlIG9uIHRoZSByaWdodCBvZiB0aGUgZGlhbG9nLCBhbmQgc2xpZ2h0bHkgdXAuIFRoaXMgZmllbGQgZXhwZWN0cyBhbiBgSW1hZ2VEYXRhYCBvYmplY3QuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdHlwZVNwZWVkIFRoZSB0ZXh0IGFwcGVhcnMgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUsIHNpbXVsYXRpbmcgdHlwaW5nLiBQbGF5ZXJzIGNhbiBjbGljayB0byBza2lwIHRoZSBhbmltYXRpb24uIFR1bmUgdGhlIHNwZWVkIG9mIHRoaXMgdHlwaW5nICgzMCBieSBkZWZhdWx0KSB0byBnbyBzbG93ZXIgb3IgZmFzdGVyLiBTZXQgdG8gXy0xXyB0byBza2lwIHRoZSBhbmltYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzUXVlc3Rpb24gSWYgdHJ1ZSwgYWxsb3dzIHRvIHVzZSBidXR0b25zIHRvIHRyaWdnZXIgZGlmZmVyZW50IGFjdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNGaXhlZFNjcmVlbiBJZiB0cnVlLCBoYXMgbm8gYnV0dG9ucyBvciBcIm5leHQgcGFnZVwiIGZ1bmN0aW9uYWxpdHlcbiAqIEBwcm9wZXJ0eSB7QnV0dG9uRGF0YVtdfSBidXR0b25zIEFuIGFycmF5IG9mIGJ1dHRvbnMgYEJ1dHRvbkRhdGFgIG9iamVjdHMgdG8gdXNlIGluIGEgcXVlc3Rpb24gZW50cnlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhdWRpbyBQYXRoIHRvIHNvdW5kIGZpbGUgdG8gcGxheSB3aGVuIHRoZSBkaWFsb2cgaXMgc2hvd24gaW4gdGhlIFVJXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNraXBhYmxlIElmIHRydWUsIGEgXCJTa2lwXCIgYnV0dG9uIG9uIHRoZSBVSSBsZXRzIHBsYXllcnMgc2tpcCB0byB0aGUgbmV4dCBub24tc2tpcGFibGUgZW50cnkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZU9uIEhvdyBsb25nIHRvIGtlZXAgdGhlIHRleHQgdmlzaWJsZSBiZWZvcmUgbW92aW5nIG9uIHRvIHRoZSBuZXh0IGVudHJ5LiBPbmx5IGZvciBidWJibGUgZGlhbG9ncyFcbiAqXG4gKi9cbmV4cG9ydCB0eXBlIERpYWxvZyA9IHtcbiAgdGV4dDogc3RyaW5nXG4gIHdpbmRvd0hlaWdodD86ICdhdXRvJyB8IG51bWJlclxuICBuYW1lPzogc3RyaW5nXG4gIGZvbnRTaXplPzogbnVtYmVyXG4gIG9mZnNldFg/OiBudW1iZXJcbiAgb2Zmc2V0WT86IG51bWJlclxuICB0eXBlU3BlZWQ/OiBudW1iZXJcbiAgaXNFbmRPZkRpYWxvZz86IGJvb2xlYW5cbiAgdHJpZ2dlcmVkQnlOZXh0PzogKCkgPT4gdm9pZFxuICBwb3J0cmFpdD86IEltYWdlRGF0YVxuICBpbWFnZT86IEltYWdlRGF0YVxuICBpc1F1ZXN0aW9uPzogYm9vbGVhblxuICBpc0ZpeGVkU2NyZWVuPzogYm9vbGVhblxuICBidXR0b25zPzogQnV0dG9uRGF0YVtdXG4gIGF1ZGlvPzogc3RyaW5nXG4gIHNraXBhYmxlPzogYm9vbGVhblxuICB0aW1lT24/OiBudW1iZXJcbn1cblxuLyoqXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gVHJpZ2dlckRhdGEgLSBPYmplY3Qgd2l0aCBkYXRhIGZvciBhIE5QQ1RyaWdnZXJDb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsYXllciAgbGF5ZXIgb2YgdGhlIFRyaWdnZXIsIHVzZWZ1bCB0byBkaXNjcmltaW5hdGUgYmV0d2VlbiB0cmlnZ2VyIGV2ZW50cy4gWW91IGNhbiBzZXQgbXVsdGlwbGUgbGF5ZXJzIGJ5IHVzaW5nIGEgfCBzeW1ib2wuIGRlZmF1bHRzIHRvIE5PX0xBWUVSU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRyaWdnZXJlZEJ5TGF5ZXIgYWdhaW5zdCB3aGljaCBsYXllcnMgdG8gY2hlY2sgY29sbGlzaW9ucy4gZGVmYXVsdHMgdG8gTEFZRVJfMVxuICogQHByb3BlcnR5IHsoZW50aXR5OiBFbnRpdHkpID0+IHZvaWQgfSBvblRyaWdnZXJFbnRlciBjYWxsYmFjayB3aGVuIGFuIGVudGl0eSBvZiBhIHZhbGlkIGxheWVyIGVudGVycyB0aGUgdHJpZ2dlciBhcmVhXG4gKiBAcHJvcGVydHkgeyhlbnRpdHk6IEVudGl0eSkgPT4gdm9pZH0gb25UcmlnZ2VyRXhpdCBjYWxsYmFjayB3aGVuIGFuIGVudGl0eSBvZiBhIHZhbGlkIGxheWVyIGxlYXZlcyB0aGUgdHJpZ2dlciBhcmVhXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IG9uQ2FtZXJhRW50ZXIgY2FsbGJhY2sgd2hlbiB0aGUgcGxheWVyIGVudGVycyB0aGUgdHJpZ2dlciBhcmVhXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IG9uQ2FtZXJhRXhpdCBjYWxsYmFjayB3aGVuIHRoZSBwbGF5ZXIgbGVhdmVzIHRoZSB0cmlnZ2VyIGFyZWFcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlRGVidWcgd2hlbiB0cnVlIG1ha2VzIHRoZSB0cmlnZ2VyIGFyZWEgdmlzaWJsZSBmb3IgZGVidWcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFRyaWdnZXJEYXRhID0ge1xuICBsYXllcj86IG51bWJlclxuICB0cmlnZ2VyZWRCeUxheWVyPzogbnVtYmVyXG4gIG9uVHJpZ2dlckVudGVyPzogKG90aGVyOiBFbnRpdHkpID0+IHZvaWRcbiAgb25UcmlnZ2VyRXhpdD86IChvdGhlcjogRW50aXR5KSA9PiB2b2lkXG4gIG9uQ2FtZXJhRW50ZXI/OiAob3RoZXI6IEVudGl0eSkgPT4gdm9pZFxuICBvbkNhbWVyYUV4aXQ/OiAob3RoZXI6IEVudGl0eSkgPT4gdm9pZFxuICBlbmFibGVEZWJ1Zz86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBEYXRhIGZvciBCdXR0b24gdG8gc2hvdyBvbiBhIHF1ZXN0aW9uIGluIGEgRGlhbG9nIGVudHJ5XG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQnV0dG9uRGF0YSAtIE9iamVjdCB3aXRoIGRhdGEgZm9yIGEgRGlhbG9nIFVJIGJ1dHRvblxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSBnb1RvRGlhbG9nIFRoZSBpbmRleCBvciBuYW1lIG9mIHRoZSBuZXh0IGRpYWxvZyBlbnRyeSB0byBkaXNwbGF5IHdoZW4gYWN0aXZhdGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVsIFRoZSBsYWJlbCB0byBzaG93IG9uIHRoZSBidXR0b24uXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IHRyaWdnZXJlZEFjdGlvbnMgQW4gYWRkaXRpb25hbCBmdW5jdGlvbiB0byBydW4gd2hlbmV2ZXIgdGhlIGJ1dHRvbiBpcyBhY3RpdmF0ZWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmb250U2l6ZSBGb250IHNpemUgb2YgdGhlIHRleHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfW9mZnNldFggT2Zmc2V0IG9mIHRoZSB0ZXh0IG9uIHRoZSBYIGF4aXMsIHJlbGF0aXZlIHRvIGl0cyBub3JtYWwgcG9zaXRpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gb2Zmc2V0WSBPZmZzZXQgb2YgdGhlIHRleHQgb24gdGhlIFkgYXhpcywgcmVsYXRpdmUgdG8gaXRzIG5vcm1hbCBwb3NpdGlvbi5cbiAqXG4gKi9cbmV4cG9ydCB0eXBlIEJ1dHRvbkRhdGEgPSB7XG4gIGdvVG9EaWFsb2c6IG51bWJlciB8IHN0cmluZ1xuICBsYWJlbDogc3RyaW5nXG4gIHRyaWdnZXJlZEFjdGlvbnM/OiAoKSA9PiB2b2lkXG4gIGZvbnRTaXplPzogbnVtYmVyXG4gIG9mZnNldFg/OiBudW1iZXJcbiAgb2Zmc2V0WT86IG51bWJlclxuICBzaXplPzogbnVtYmVyIHwgJ2F1dG8nXG59XG5cbmV4cG9ydCBlbnVtIEJ1dHRvblN0eWxlcyB7XG4gIEUgPSBgZWAsXG4gIEYgPSBgZmAsXG4gIERBUksgPSBgZGFya2AsXG4gIFJFRCA9IGByZWRgLFxuICBST1VOREJMQUNLID0gYHJvdW5kYmxhY2tgLFxuICBST1VORFdISVRFID0gYHJvdW5kd2hpdGVgLFxuICBST1VORFNJTFZFUiA9IGByb3VuZHNpbHZlcmAsXG4gIFJPVU5ER09MRCA9IGByb3VuZGdvbGRgLFxuICBTUVVBUkVCTEFDSyA9IGBzcXVhcmVibGFja2AsXG4gIFNRVUFSRVdISVRFID0gYHNxdWFyZXdoaXRlYCxcbiAgU1FVQVJFU0lMVkVSID0gYHNxdWFyZXNpbHZlcmAsXG4gIFNRVUFSRUdPTEQgPSBgc3F1YXJlZ29sZGAsXG4gIFdISVRFID0gYHdoaXRlYFxufVxuXG4vKipcbiAqIEFuIE5QQyBjYXBhYmxlIG9mIGhhdmluZyBjb252ZXJzYXRpb25zIHdpdGggdGhlIHBsYXllciwgYW5kIHBsYXkgZGlmZmVyZW50IGFuaW1hdGlvbnMuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gTlBDRGF0YSBPYmplY3Qgd2l0aCBkYXRhIHRvIGluc3RhbmNlIGEgbmV3IE5QQ1xuICogQHByb3BlcnR5IHtzdHJpbmd8SW1hZ2VEYXRhfSBwb3J0cmFpdCAyRCBpbWFnZSB0byBzaG93IG9uIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgZGlhbG9nIHdpbmRvdy4gVGhlIHN0cnVjdHVyZSBvZiBhbiBgSW1hZ2VEYXRhYCBvYmplY3QgaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByZWFjdERpc3RhbmNlIFJhZGl1cyBpbiBtZXRlcnMgZm9yIHRoZSBwbGF5ZXIgdG8gYWN0aXZhdGUgdGhlIE5QQyBvciB0cmlnZ2VyIHRoZSBgb25XYWxrQXdheSgpYCBmdW5jdGlvbiB3aGVuIGxlYXZpbmcgdGhlIHJhZGl1cy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZGxlQW5pbSBOYW1lIG9mIHRoZSBpZGxlIGFuaW1hdGlvbiBpbiB0aGUgbW9kZWwuIFRoaXMgYW5pbWF0aW9uIGlzIGFsd2F5cyBsb29wZWQuIEFmdGVyIHBsYXlpbmcgYSBub24tbG9vcGluZyBhbmltYXRpb24gaXQgcmV0dXJucyB0byBsb29waW5nIHRoaXMgb25lLlxuICogQHByb3BlcnR5IHtib29sZWFufSBmYWNlVXNlciBTZXQgaWYgdGhlIE5QQyByb3RhdGVzIHRvIGZhY2UgdGhlIHVzZXIgd2hpbGUgYWN0aXZlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBvbmx5RXh0ZXJuYWxUcmlnZ2VyIElmIHRydWUsIHRoZSBOUEMgY2FuJ3QgYmUgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIG9yIHdhbGtpbmcgbmVhci4gSnVzdCBieSBjYWxsaW5nIGl0cyBgYWN0aXZhdGUoKWAgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9ubHlDbGlja1RyaWdnZXIgSWYgdHJ1ZSwgdGhlIE5QQyBjYW4ndCBiZSBhY3RpdmF0ZWQgYnkgd2Fsa2luZyBuZWFyLiBKdXN0IGJ5IGNsaWNraW5nIG9uIGl0IG9yIGNhbGxpbmcgaXRzIGBhY3RpdmF0ZSgpYCBmdW5jdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb25seUVUcmlnZ2VyIElmIHRydWUsIHRoZSBOUEMgY2FuJ3QgYmUgYWN0aXZhdGVkIGJ5IHdhbGtpbmcgbmVhci4gSnVzdCBieSBwcmVzc2luZyBFIG9uIGl0IG9yIGNhbGxpbmcgaXRzIGBhY3RpdmF0ZSgpYCBmdW5jdGlvbi5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gb25XYWxrQXdheSBGdW5jdGlvbiB0byBjYWxsIGV2ZXJ5IHRpbWUgdGhlIHBsYXllciB3YWxrcyBvdXQgb2YgdGhlIGByZWFjdERpc3RhbmNlYCByYWRpdXMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNvbnRpbnVlT25XYWxrQXdheSBmIHRydWUsd2hlbiB0aGUgcGxheWVyIHdhbGtzIG91dCBvZiB0aGUgYHJlYWN0RGlzdGFuY2VgIHJhZGl1cywgdGhlIGRpYWxvZyB3aW5kb3cgc3RheXMgb3BlbiBhbmQgdGhlIE5QQyBrZWVwcyB0dXJuaW5nIHRvIGZhY2UgdGhlIHBsYXllciAoaWYgYXBwbGljYWJsZSkuIEl0IGRvZXNuJ3QgYWZmZWN0IHRoZSB0cmlnZ2VyaW5nIG9mIHRoZSBgb25XYWxrQXdheSgpYCBmdW5jdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGFya1VJIElmIHRydWUsIHRoZSBkaWFsb2cgVUkgdXNlcyB0aGUgZGFyayB0aGVtZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb29sRG93bkR1cmF0aW9uIENoYW5nZSB0aGUgY29vbGRvd24gcGVyaW9kIGZvciBhY3RpdmF0aW5nIHRoZSBOUEMgYWdhaW4uIFRoZSBudW1iZXIgaXMgaW4gc2Vjb25kcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBob3ZlclRleHQgU2V0IHRoZSBVSSBob3ZlciBmZWVkYmFjayB3aGVuIHBvaW50aW5nIHRoZSBjdXJzb3IgYXQgdGhlIE5QQy4gX1RBTEtfIGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGlhbG9nU291bmQgUGF0aCB0byBzb3VuZCBmaWxlIHRvIHBsYXkgb25jZSBmb3IgZXZlcnkgbGluZSBvZiBkaWFsb2cgcmVhZCBvbiB0aGUgVUkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2Fsa2luZ0FuaW0gQW5pbWF0aW9uIHRvIHBsYXkgd2hlbiB3YWxraW5nIHdpdGggZm9sbG93UGF0aFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdhbGtpbmdTcGVlZCBEZWZhdWx0IHNwZWVkIHRvIHVzZSB3aGVuIHdhbGtpbmcgd2l0aCBmb2xsb3dQYXRoXG4gKiBAcHJvcGVydHkge1ZlY3RvcjNbXX0gcGF0aCBBcnJheSBvZiBWZWN0b3IzIHBvaW50cyByZXByZXNlbnRpbmcgdGhlIGRlZmF1bHQgcGF0aCB0byB3YWxrIG92ZXIuIFRoZSBOUEMgd2lsbCB3YWxrIGxvb3Bpbmcgb3ZlciB0aGVzZSBwb2ludHNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGV4dEJ1YmJsZSBJZiB0cnVlLCB0aGUgTlBDIGNhbiBkaXNwbGF5IHRleHQgYnViYmxlcyB3aXRoIGRpYWxvZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBidWJibGVIZWlnaHQgVGhlIGRlZmF1bHQgaGVpZ2h0IHRvIGRpc3BsYXkgdGV4dCBidWJibGVzIG92ZXIgdGhlIE5QQydzIHBvc2l0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vVUkgSWYgdHJ1ZSwgbm8gVUkgZGlhbG9nIGVsZW1lbnRzIGFyZSBjb25zdHJ1Y3RlZC4gVGhlIE5QQyBjYW4gdXNlIHNwZWVjaCBidWJibGVzLlxuICpcbiAqL1xuXG5leHBvcnQgdHlwZSBOUENEYXRhID0ge1xuICB0eXBlOiBOUENUeXBlXG4gIGJvZHk/OiBOUENCb2R5VHlwZVxuICBtb2RlbD86IHN0cmluZyB8IFBCR2x0ZkNvbnRhaW5lciB8IFBCQXZhdGFyU2hhcGVcblxuICB3YWxraW5nQW5pbT86IHN0cmluZ1xuICBwb3J0cmFpdD86IHN0cmluZyB8IEltYWdlRGF0YVxuICByZWFjdERpc3RhbmNlPzogbnVtYmVyXG4gIGlkbGVBbmltPzogc3RyaW5nXG4gIGZhY2VVc2VyPzogYm9vbGVhblxuICB0dXJuaW5nU3BlZWQ/OiBudW1iZXJcbiAgb25seUV4dGVybmFsVHJpZ2dlcj86IGJvb2xlYW5cbiAgb25seUNsaWNrVHJpZ2dlcj86IGJvb2xlYW5cbiAgb25seUVUcmlnZ2VyPzogYm9vbGVhblxuICBvbkFjdGl2YXRlOiAob3RoZXI6IEVudGl0eSkgPT4gdm9pZFxuICBvbldhbGtBd2F5PzogKG90aGVyOiBFbnRpdHkpID0+IHZvaWRcbiAgY29udGludWVPbldhbGtBd2F5PzogYm9vbGVhblxuICBkYXJrVUk/OiBib29sZWFuXG4gIGNvb2xEb3duRHVyYXRpb24/OiBudW1iZXJcbiAgaG92ZXJUZXh0Pzogc3RyaW5nXG4gIGRpYWxvZ1NvdW5kPzogc3RyaW5nXG4gIC8vZGlhbG9nQ3VzdG9tVGhlbWU/OiBUZXh0dXJlXG4gIHRleHRCdWJibGU/OiBib29sZWFuXG4gIGJ1YmJsZUhlaWdodD86IG51bWJlclxuICBub1VJPzogYm9vbGVhblxuXG4gIHBhdGhEYXRhPzogRm9sbG93UGF0aERhdGFcblxuICBidWJibGVYT2Zmc2V0PzogbnVtYmVyXG4gIGJ1YmJsZVlPZmZzZXQ/OiBudW1iZXJcbn1cblxuLyoqXG4gKiBNYWtlIGFuIE5QQyB3YWxrIGZvbGxvd2luZyBhIHBhdGhcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGb2xsb3dQYXRoRGF0YSAtIE9iamVjdCB3aXRoIGRhdGEgdG8gZGVzY3JpYmUgYSBwYXRoIHRoYXQgYW4gTlBDIGNhbiB3YWxrXG4gKiBAcHJvcGVydHkge1ZlY3RvcjNbXX0gcGF0aCBBcnJheSBvZiBgVmVjdG9yM2AgcG9zaXRpb25zIHRvIHdhbGsgb3Zlci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzcGVlZCBTcGVlZCB0byBtb3ZlIGF0IHdoaWxlIHdhbGtpbmcgdGhpcyBwYXRoLiBJZiBubyBgc3BlZWRgIG9yIGB0b3RhbER1cmF0aW9uYCBpcyBwcm92aWRlZCwgaXQgdXNlcyB0aGUgTlBDJ3MgYHdhbGtpbmdTcGVlZGAsIHdoaWNoIGlzIF8yXyBieSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsRHVyYXRpb24gVGhlIGR1cmF0aW9uIGluIF9zZWNvbmRzXyB0aGF0IHRoZSB3aG9sZSBwYXRoIHNob3VsZCB0YWtlLiBUaGUgTlBDIHdpbGwgbW92ZSBhdCB0aGUgY29uc3RhbnQgc3BlZWQgcmVxdWlyZWQgdG8gZmluaXNoIGluIHRoYXQgdGltZS4gVGhpcyB2YWx1ZSBvdmVycmlkZXMgdGhhdCBvZiB0aGUgX3NwZWVkXy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9vcCBfYm9vbGVhbl8gSWYgdHJ1ZSwgdGhlIE5QQyB3YWxrcyBpbiBjaXJjbGVzIG92ZXIgdGhlIHByb3ZpZGVkIHNldCBvZiBwb2ludHMgaW4gdGhlIHBhdGguIF9mYWxzZV8gYnkgZGVmYXVsdCwgdW5sZXNzIHRoZSBOUEMgaXMgaW5pdGlhdGVkIHdpdGggYSBgcGF0aGAsIGluIHdoaWNoIGNhc2UgaXQgc3RhcnRzIGFzIF90cnVlXy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY3VydmUgX2Jvb2xlYW5fIElmIHRydWUsIHRoZSBwYXRoIGlzIHRyYWNlZCBhIHNpbmdsZSBzbW9vdGggY3VydmUgdGhhdCBwYXNzZXMgb3ZlciBlYWNoIG9mIHRoZSBpbmRpY2F0ZWQgcG9pbnRzLiBUaGUgY3VydmUgaXMgbWFkZSBvdXQgb2Ygc3RyYWlnaHQtbGluZSBzZWdtZW50cywgdGhlIHBhdGggaXMgc3RvcmVkIHdpdGggNCB0aW1lcyBhcyBtYW55IHBvaW50cyBhcyBvcmlnaW5hbGx5IGRlZmluZWQuIF9mYWxzZV8gYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzdGFydGluZ1BvaW50IEluZGV4IHBvc2l0aW9uIGZvciB3aGF0IHBvaW50IHRvIHN0YXJ0IGZyb20gb24gdGhlIHBhdGguIF8wXyBieSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBvbkZpbmlzaENhbGxiYWNrIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgTlBDIGZpbmlzaGVkIHdhbGtpbmcgb3ZlciBhbGwgdGhlIHBvaW50cyBvbiB0aGUgcGF0aC4gVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGBsb29wYCBpcyBfZmFsc2VfLlxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBvblJlYWNoZWRQb2ludENhbGxiYWNrIEZ1bmN0aW9uIHRvIGNhbGwgb25jZSBldmVyeSB0aW1lIHRoZSBOUEMgcmVhY2hlcyBhIHBvaW50IGluIHRoZSBwYXRoLlxuICpcbiAqL1xuZXhwb3J0IHR5cGUgRm9sbG93UGF0aERhdGEgPSB7XG4gIHN0YXJ0aW5nUG9pbnQ/OiBudW1iZXJcbiAgbG9vcD86IGJvb2xlYW5cbiAgY3VydmU/OiBib29sZWFuXG4gIHRvdGFsRHVyYXRpb246IG51bWJlclxuICBzcGVlZD86IG51bWJlclxuICBwYXRoPzogVmVjdG9yM1tdXG4gIHBhdGhUeXBlPzogTlBDUGF0aFR5cGVcbiAgb25GaW5pc2hDYWxsYmFjaz86ICgpID0+IHZvaWRcbiAgb25SZWFjaGVkUG9pbnRDYWxsYmFjaz86ICgpID0+IHZvaWRcbn1cblxuLyoqXG4gKiBDdXQgb3V0IGEgc2VjdGlvbiBvZiBhbiBpbWFnZSBmaWxlXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gSW1hZ2VTZWN0aW9uIC0gT2JqZWN0IHdpdGggZGF0YSB0byBvbmx5IGRpc3BsYXkgYSBzZWN0aW9uIG9mIGFuIGltYWdlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc291cmNlV2lkdGggV2lkdGggaW4gcGl4ZWxzIHRvIHNlbGVjdCBmcm9tIGltYWdlLCBzdGFydGluZyBmcm9tIHRoZSBzb3VyY2VMZWZ0LCBnb2luZyByaWdodFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNvdXJjZUhlaWdodCBIZWlnaHQgaW4gcGl4ZWxzIHRvIHNlbGVjdCBmcm9tIGltYWdlLCBzdGFydGluZyBmcm9tIHRoZSBzb3VyY2VUb3AsIGdvaW5nIGRvd25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzb3VyY2VMZWZ0IExlZnRtb3N0IHBpeGVsIHRvIHNlbGVjdCBmcm9tIGltYWdlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc291cmNlVG9wIFRvcG1vc3QgcGl4ZWwgdG8gc2VsZWN0IGZyb20gaW1hZ2VcbiAqXG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlU2VjdGlvbiA9IHtcbiAgc291cmNlV2lkdGg6IG51bWJlclxuICBzb3VyY2VIZWlnaHQ6IG51bWJlclxuICBzb3VyY2VMZWZ0PzogbnVtYmVyXG4gIHNvdXJjZVRvcD86IG51bWJlclxufVxuXG4vKipcbiAqXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gSW1hZ2VEYXRhIC0gT2JqZWN0IHdpdGggZGF0YSBmb3IgZGlzcGxheWluZyBhbiBpbWFnZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggUGF0aCB0byB0aGUgaW1hZ2UgZmlsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBvZmZzZXRYIE9mZnNldCBvbiBYLCByZWxhdGl2ZSB0byB0aGUgbm9ybWFsIHBvc2l0aW9uIG9mIHRoZSBpbWFnZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBvZmZzZXRZIE9mZnNldCBvbiBZLCByZWxhdGl2ZSB0byB0aGUgbm9ybWFsIHBvc2l0aW9uIG9mIHRoZSBpbWFnZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgVGhlIGhlaWdodCB0byBzaG93IHRoZSBpbWFnZSBvbnNjcmVlbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCBUaGUgd2lkdGggdG8gc2hvdyB0aGUgaW1hZ2Ugb25zY3JlZW4uXG4gKiBAcHJvcGVydHkge0ltYWdlU2VjdGlvbn0gc2VjdGlvbiBVc2Ugb25seSBhIHNlY3Rpb24gb2YgdGhlIGltYWdlIGZpbGUsIHVzZWZ1bCB3aGVuIGFycmFuZ2luZyBtdWx0aXBsZSBpY29ucyBpbnRvIGFuIGltYWdlIGF0bGFzLiBUaGlzIGZpZWxkIHRha2VzIGFuIGBJbWFnZVNlY3Rpb25gIG9iamVjdCwgc3BlY2lmeWluZyBgc291cmNlV2lkdGhgIGFuZCBgc291cmNlSGVpZ2h0YCwgYW5kIG9wdGlvbmFsbHkgYWxzbyBgc291cmNlTGVmdGAgYW5kIGBzb3VyY2VUb3BgLlxuICpcbiAqL1xuZXhwb3J0IHR5cGUgSW1hZ2VEYXRhID0ge1xuICBwYXRoOiBzdHJpbmdcbiAgb2Zmc2V0WD86IG51bWJlclxuICBvZmZzZXRZPzogbnVtYmVyXG4gIGhlaWdodD86IG51bWJlclxuICB3aWR0aD86IG51bWJlclxuICBzZWN0aW9uPzogSW1hZ2VTZWN0aW9uXG59XG5cbmV4cG9ydCBlbnVtIE5QQ1N0YXRlIHtcbiAgU1RBTkRJTkcgPSAnc3RhbmRpbmcnLFxuICBUQUxLSU5HID0gJ3RhbGtpbmcnLFxuICBGT0xMT1dQQVRIID0gJ2ZvbGxvd1BhdGgnXG4gIC8vRk9MTE9XUExBWUVSID0gJ2ZvbGxvd1BsYXllcidcbn1cblxuZXhwb3J0IGVudW0gTlBDQm9keVR5cGUge1xuICBNQUxFID0gJ0Jhc2VNYWxlJyxcbiAgRkVNQUxFID0gJ0Jhc2VGZW1hbGUnXG59XG5cbmV4cG9ydCBlbnVtIE5QQ1R5cGUge1xuICBCTEFOSyA9ICdibGFuaycsXG4gIENVU1RPTSA9ICdjdXN0b20nLFxuICBBVkFUQVIgPSAnYXZhdGFyJ1xufVxuXG5leHBvcnQgZW51bSBOUENQYXRoVHlwZSB7XG4gIFNNT09USF9QQVRIID0gJ3Ntb290aCcsIC8vd2lsbCBmb2xsb3cgdGhlIHBhdGggYnV0IGNhbiBjdXQgc2hhcnAgY29ybmVyc1xuICBSSUdJRF9QQVRIID0gJ3JpZ2lkJyAvL3dpbGwgZW5zdXJlIGVhY2ggY29ybmVyIGlzIGhpdFxufVxuIl19
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0ZBLE1BQU0sQ0FBTixJQUFZLFlBY1g7QUFkRCxXQUFZLFlBQVk7SUFDdEIsdUJBQU8sQ0FBQTtJQUNQLHVCQUFPLENBQUE7SUFDUCw2QkFBYSxDQUFBO0lBQ2IsMkJBQVcsQ0FBQTtJQUNYLHlDQUF5QixDQUFBO0lBQ3pCLHlDQUF5QixDQUFBO0lBQ3pCLDJDQUEyQixDQUFBO0lBQzNCLHVDQUF1QixDQUFBO0lBQ3ZCLDJDQUEyQixDQUFBO0lBQzNCLDJDQUEyQixDQUFBO0lBQzNCLDZDQUE2QixDQUFBO0lBQzdCLHlDQUF5QixDQUFBO0lBQ3pCLCtCQUFlLENBQUE7QUFDakIsQ0FBQyxFQWRXLFlBQVksS0FBWixZQUFZLFFBY3ZCO0FBK0hELE1BQU0sQ0FBTixJQUFZLFFBS1g7QUFMRCxXQUFZLFFBQVE7SUFDbEIsaUNBQXFCLENBQUE7SUFDckIsK0JBQW1CLENBQUE7SUFDbkIscUNBQXlCLENBQUE7QUFFM0IsQ0FBQyxFQUxXLFFBQVEsS0FBUixRQUFRLFFBS25CO0FBRUQsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNyQixnQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsV0FBVyxLQUFYLFdBQVcsUUFHdEI7QUFFRCxNQUFNLENBQU4sSUFBWSxPQUlYO0FBSkQsV0FBWSxPQUFPO0lBQ2pCLDBCQUFlLENBQUE7SUFDZiw0QkFBaUIsQ0FBQTtJQUNqQiw0QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsT0FBTyxLQUFQLE9BQU8sUUFJbEI7QUFFRCxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLHFDQUFzQixDQUFBO0lBQ3RCLG1DQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSwgUEJBdmF0YXJTaGFwZSwgUEJHbHRmQ29udGFpbmVyIH0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5cbi8qKlxuICogRnJhZ21lbnQgb2YgYSBjb252ZXJzYXRpb24gd2l0aCBhbiBOUENcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEaWFsb2cgLSBBbiBlbnRyeSBpbiBhbiBOUEMgY29udmVyc2F0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGV4dCBUaGUgZGlhbG9nIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIE9wdGlvbmFsIG5hbWUgb2YgdGhlIGRpYWxvZyBlbnRyeSwgdG8gbGluayBvdGhlciBlbnRyaWVzIHRvIHRoaXMgb25lIGFuZCBub3Qgd29ycnkgYWJvdXQgY2hhbmdlcyBpbiB0aGUgYXJyYXkgbGVuZ3RoXG4gKiBAcHJvcGVydHkge251bWJlcn0gZm9udFNpemUgU2l6ZSBvZiB0aGUgdGV4dFxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFggT2Zmc2V0IG9mIHRoZSB0ZXh0IG9uIHRoZSBYIGF4aXMsIHJlbGF0aXZlIHRvIGl0cyBub3JtYWwgcG9zaXRpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gb2Zmc2V0WSBPZmZzZXQgb2YgdGhlIHRleHQgb24gdGhlIFkgYXhpcywgcmVsYXRpdmUgdG8gaXRzIG5vcm1hbCBwb3NpdGlvbi5cbiAqIEBwcm9wZXJ0eSB7SW1hZ2VEYXRhfSBwb3J0cmFpdCBTZXRzIHRoZSBwb3J0cmFpdCBpbWFnZSB0byB1c2Ugb24gdGhlIGxlZnQuIFRoaXMgZmllbGQgZXhwZWN0cyBhIGBQb3J0cmFpdGAgb2JqZWN0LlxuICogQHByb3BlcnR5IHtJbWFnZURhdGF9IGltYWdlIFNldHMgYSBzZWNvbmQgaW1hZ2UgdG8gdXNlIG9uIHRoZSByaWdodCBvZiB0aGUgZGlhbG9nLCBhbmQgc2xpZ2h0bHkgdXAuIFRoaXMgZmllbGQgZXhwZWN0cyBhbiBgSW1hZ2VEYXRhYCBvYmplY3QuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdHlwZVNwZWVkIFRoZSB0ZXh0IGFwcGVhcnMgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUsIHNpbXVsYXRpbmcgdHlwaW5nLiBQbGF5ZXJzIGNhbiBjbGljayB0byBza2lwIHRoZSBhbmltYXRpb24uIFR1bmUgdGhlIHNwZWVkIG9mIHRoaXMgdHlwaW5nICgzMCBieSBkZWZhdWx0KSB0byBnbyBzbG93ZXIgb3IgZmFzdGVyLiBTZXQgdG8gXy0xXyB0byBza2lwIHRoZSBhbmltYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzUXVlc3Rpb24gSWYgdHJ1ZSwgYWxsb3dzIHRvIHVzZSBidXR0b25zIHRvIHRyaWdnZXIgZGlmZmVyZW50IGFjdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNGaXhlZFNjcmVlbiBJZiB0cnVlLCBoYXMgbm8gYnV0dG9ucyBvciBcIm5leHQgcGFnZVwiIGZ1bmN0aW9uYWxpdHlcbiAqIEBwcm9wZXJ0eSB7QnV0dG9uRGF0YVtdfSBidXR0b25zIEFuIGFycmF5IG9mIGJ1dHRvbnMgYEJ1dHRvbkRhdGFgIG9iamVjdHMgdG8gdXNlIGluIGEgcXVlc3Rpb24gZW50cnlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhdWRpbyBQYXRoIHRvIHNvdW5kIGZpbGUgdG8gcGxheSB3aGVuIHRoZSBkaWFsb2cgaXMgc2hvd24gaW4gdGhlIFVJXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNraXBhYmxlIElmIHRydWUsIGEgXCJTa2lwXCIgYnV0dG9uIG9uIHRoZSBVSSBsZXRzIHBsYXllcnMgc2tpcCB0byB0aGUgbmV4dCBub24tc2tpcGFibGUgZW50cnkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZU9uIEhvdyBsb25nIHRvIGtlZXAgdGhlIHRleHQgdmlzaWJsZSBiZWZvcmUgbW92aW5nIG9uIHRvIHRoZSBuZXh0IGVudHJ5LiBPbmx5IGZvciBidWJibGUgZGlhbG9ncyFcbiAqXG4gKi9cbmV4cG9ydCB0eXBlIERpYWxvZyA9IHtcbiAgdGV4dDogc3RyaW5nXG4gIHdpbmRvd0hlaWdodD86ICdhdXRvJyB8IG51bWJlclxuICBuYW1lPzogc3RyaW5nXG4gIGZvbnRTaXplPzogbnVtYmVyXG4gIG9mZnNldFg/OiBudW1iZXJcbiAgb2Zmc2V0WT86IG51bWJlclxuICB0eXBlU3BlZWQ/OiBudW1iZXJcbiAgaXNFbmRPZkRpYWxvZz86IGJvb2xlYW5cbiAgdHJpZ2dlcmVkQnlOZXh0PzogKCkgPT4gdm9pZFxuICBwb3J0cmFpdD86IEltYWdlRGF0YVxuICBpbWFnZT86IEltYWdlRGF0YVxuICBpc1F1ZXN0aW9uPzogYm9vbGVhblxuICBpc0ZpeGVkU2NyZWVuPzogYm9vbGVhblxuICBidXR0b25zPzogQnV0dG9uRGF0YVtdXG4gIGF1ZGlvPzogc3RyaW5nXG4gIHNraXBhYmxlPzogYm9vbGVhblxuICB0aW1lT24/OiBudW1iZXJcbn1cblxuLyoqXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gVHJpZ2dlckRhdGEgLSBPYmplY3Qgd2l0aCBkYXRhIGZvciBhIE5QQ1RyaWdnZXJDb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsYXllciAgbGF5ZXIgb2YgdGhlIFRyaWdnZXIsIHVzZWZ1bCB0byBkaXNjcmltaW5hdGUgYmV0d2VlbiB0cmlnZ2VyIGV2ZW50cy4gWW91IGNhbiBzZXQgbXVsdGlwbGUgbGF5ZXJzIGJ5IHVzaW5nIGEgfCBzeW1ib2wuIGRlZmF1bHRzIHRvIE5PX0xBWUVSU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRyaWdnZXJlZEJ5TGF5ZXIgYWdhaW5zdCB3aGljaCBsYXllcnMgdG8gY2hlY2sgY29sbGlzaW9ucy4gZGVmYXVsdHMgdG8gTEFZRVJfMVxuICogQHByb3BlcnR5IHsoZW50aXR5OiBFbnRpdHkpID0+IHZvaWQgfSBvblRyaWdnZXJFbnRlciBjYWxsYmFjayB3aGVuIGFuIGVudGl0eSBvZiBhIHZhbGlkIGxheWVyIGVudGVycyB0aGUgdHJpZ2dlciBhcmVhXG4gKiBAcHJvcGVydHkgeyhlbnRpdHk6IEVudGl0eSkgPT4gdm9pZH0gb25UcmlnZ2VyRXhpdCBjYWxsYmFjayB3aGVuIGFuIGVudGl0eSBvZiBhIHZhbGlkIGxheWVyIGxlYXZlcyB0aGUgdHJpZ2dlciBhcmVhXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IG9uQ2FtZXJhRW50ZXIgY2FsbGJhY2sgd2hlbiB0aGUgcGxheWVyIGVudGVycyB0aGUgdHJpZ2dlciBhcmVhXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IG9uQ2FtZXJhRXhpdCBjYWxsYmFjayB3aGVuIHRoZSBwbGF5ZXIgbGVhdmVzIHRoZSB0cmlnZ2VyIGFyZWFcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlRGVidWcgd2hlbiB0cnVlIG1ha2VzIHRoZSB0cmlnZ2VyIGFyZWEgdmlzaWJsZSBmb3IgZGVidWcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFRyaWdnZXJEYXRhID0ge1xuICBsYXllcj86IG51bWJlclxuICB0cmlnZ2VyZWRCeUxheWVyPzogbnVtYmVyXG4gIG9uVHJpZ2dlckVudGVyPzogKG90aGVyOiBFbnRpdHkpID0+IHZvaWRcbiAgb25UcmlnZ2VyRXhpdD86IChvdGhlcjogRW50aXR5KSA9PiB2b2lkXG4gIG9uQ2FtZXJhRW50ZXI/OiAob3RoZXI6IEVudGl0eSkgPT4gdm9pZFxuICBvbkNhbWVyYUV4aXQ/OiAob3RoZXI6IEVudGl0eSkgPT4gdm9pZFxuICBlbmFibGVEZWJ1Zz86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBEYXRhIGZvciBCdXR0b24gdG8gc2hvdyBvbiBhIHF1ZXN0aW9uIGluIGEgRGlhbG9nIGVudHJ5XG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gQnV0dG9uRGF0YSAtIE9iamVjdCB3aXRoIGRhdGEgZm9yIGEgRGlhbG9nIFVJIGJ1dHRvblxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSBnb1RvRGlhbG9nIFRoZSBpbmRleCBvciBuYW1lIG9mIHRoZSBuZXh0IGRpYWxvZyBlbnRyeSB0byBkaXNwbGF5IHdoZW4gYWN0aXZhdGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVsIFRoZSBsYWJlbCB0byBzaG93IG9uIHRoZSBidXR0b24uXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IHRyaWdnZXJlZEFjdGlvbnMgQW4gYWRkaXRpb25hbCBmdW5jdGlvbiB0byBydW4gd2hlbmV2ZXIgdGhlIGJ1dHRvbiBpcyBhY3RpdmF0ZWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmb250U2l6ZSBGb250IHNpemUgb2YgdGhlIHRleHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfW9mZnNldFggT2Zmc2V0IG9mIHRoZSB0ZXh0IG9uIHRoZSBYIGF4aXMsIHJlbGF0aXZlIHRvIGl0cyBub3JtYWwgcG9zaXRpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gb2Zmc2V0WSBPZmZzZXQgb2YgdGhlIHRleHQgb24gdGhlIFkgYXhpcywgcmVsYXRpdmUgdG8gaXRzIG5vcm1hbCBwb3NpdGlvbi5cbiAqXG4gKi9cbmV4cG9ydCB0eXBlIEJ1dHRvbkRhdGEgPSB7XG4gIGdvVG9EaWFsb2c6IG51bWJlciB8IHN0cmluZ1xuICBsYWJlbDogc3RyaW5nXG4gIHRyaWdnZXJlZEFjdGlvbnM/OiAoKSA9PiB2b2lkXG4gIGZvbnRTaXplPzogbnVtYmVyXG4gIG9mZnNldFg/OiBudW1iZXJcbiAgb2Zmc2V0WT86IG51bWJlclxuICBzaXplPzogbnVtYmVyIHwgJ2F1dG8nXG59XG5cbmV4cG9ydCBlbnVtIEJ1dHRvblN0eWxlcyB7XG4gIEUgPSBgZWAsXG4gIEYgPSBgZmAsXG4gIERBUksgPSBgZGFya2AsXG4gIFJFRCA9IGByZWRgLFxuICBST1VOREJMQUNLID0gYHJvdW5kYmxhY2tgLFxuICBST1VORFdISVRFID0gYHJvdW5kd2hpdGVgLFxuICBST1VORFNJTFZFUiA9IGByb3VuZHNpbHZlcmAsXG4gIFJPVU5ER09MRCA9IGByb3VuZGdvbGRgLFxuICBTUVVBUkVCTEFDSyA9IGBzcXVhcmVibGFja2AsXG4gIFNRVUFSRVdISVRFID0gYHNxdWFyZXdoaXRlYCxcbiAgU1FVQVJFU0lMVkVSID0gYHNxdWFyZXNpbHZlcmAsXG4gIFNRVUFSRUdPTEQgPSBgc3F1YXJlZ29sZGAsXG4gIFdISVRFID0gYHdoaXRlYFxufVxuXG4vKipcbiAqIEFuIE5QQyBjYXBhYmxlIG9mIGhhdmluZyBjb252ZXJzYXRpb25zIHdpdGggdGhlIHBsYXllciwgYW5kIHBsYXkgZGlmZmVyZW50IGFuaW1hdGlvbnMuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gTlBDRGF0YSBPYmplY3Qgd2l0aCBkYXRhIHRvIGluc3RhbmNlIGEgbmV3IE5QQ1xuICogQHByb3BlcnR5IHtzdHJpbmd8SW1hZ2VEYXRhfSBwb3J0cmFpdCAyRCBpbWFnZSB0byBzaG93IG9uIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgZGlhbG9nIHdpbmRvdy4gVGhlIHN0cnVjdHVyZSBvZiBhbiBgSW1hZ2VEYXRhYCBvYmplY3QgaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByZWFjdERpc3RhbmNlIFJhZGl1cyBpbiBtZXRlcnMgZm9yIHRoZSBwbGF5ZXIgdG8gYWN0aXZhdGUgdGhlIE5QQyBvciB0cmlnZ2VyIHRoZSBgb25XYWxrQXdheSgpYCBmdW5jdGlvbiB3aGVuIGxlYXZpbmcgdGhlIHJhZGl1cy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZGxlQW5pbSBOYW1lIG9mIHRoZSBpZGxlIGFuaW1hdGlvbiBpbiB0aGUgbW9kZWwuIFRoaXMgYW5pbWF0aW9uIGlzIGFsd2F5cyBsb29wZWQuIEFmdGVyIHBsYXlpbmcgYSBub24tbG9vcGluZyBhbmltYXRpb24gaXQgcmV0dXJucyB0byBsb29waW5nIHRoaXMgb25lLlxuICogQHByb3BlcnR5IHtib29sZWFufSBmYWNlVXNlciBTZXQgaWYgdGhlIE5QQyByb3RhdGVzIHRvIGZhY2UgdGhlIHVzZXIgd2hpbGUgYWN0aXZlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBvbmx5RXh0ZXJuYWxUcmlnZ2VyIElmIHRydWUsIHRoZSBOUEMgY2FuJ3QgYmUgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIG9yIHdhbGtpbmcgbmVhci4gSnVzdCBieSBjYWxsaW5nIGl0cyBgYWN0aXZhdGUoKWAgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9ubHlDbGlja1RyaWdnZXIgSWYgdHJ1ZSwgdGhlIE5QQyBjYW4ndCBiZSBhY3RpdmF0ZWQgYnkgd2Fsa2luZyBuZWFyLiBKdXN0IGJ5IGNsaWNraW5nIG9uIGl0IG9yIGNhbGxpbmcgaXRzIGBhY3RpdmF0ZSgpYCBmdW5jdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb25seUVUcmlnZ2VyIElmIHRydWUsIHRoZSBOUEMgY2FuJ3QgYmUgYWN0aXZhdGVkIGJ5IHdhbGtpbmcgbmVhci4gSnVzdCBieSBwcmVzc2luZyBFIG9uIGl0IG9yIGNhbGxpbmcgaXRzIGBhY3RpdmF0ZSgpYCBmdW5jdGlvbi5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gb25XYWxrQXdheSBGdW5jdGlvbiB0byBjYWxsIGV2ZXJ5IHRpbWUgdGhlIHBsYXllciB3YWxrcyBvdXQgb2YgdGhlIGByZWFjdERpc3RhbmNlYCByYWRpdXMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNvbnRpbnVlT25XYWxrQXdheSBmIHRydWUsd2hlbiB0aGUgcGxheWVyIHdhbGtzIG91dCBvZiB0aGUgYHJlYWN0RGlzdGFuY2VgIHJhZGl1cywgdGhlIGRpYWxvZyB3aW5kb3cgc3RheXMgb3BlbiBhbmQgdGhlIE5QQyBrZWVwcyB0dXJuaW5nIHRvIGZhY2UgdGhlIHBsYXllciAoaWYgYXBwbGljYWJsZSkuIEl0IGRvZXNuJ3QgYWZmZWN0IHRoZSB0cmlnZ2VyaW5nIG9mIHRoZSBgb25XYWxrQXdheSgpYCBmdW5jdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGFya1VJIElmIHRydWUsIHRoZSBkaWFsb2cgVUkgdXNlcyB0aGUgZGFyayB0aGVtZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb29sRG93bkR1cmF0aW9uIENoYW5nZSB0aGUgY29vbGRvd24gcGVyaW9kIGZvciBhY3RpdmF0aW5nIHRoZSBOUEMgYWdhaW4uIFRoZSBudW1iZXIgaXMgaW4gc2Vjb25kcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBob3ZlclRleHQgU2V0IHRoZSBVSSBob3ZlciBmZWVkYmFjayB3aGVuIHBvaW50aW5nIHRoZSBjdXJzb3IgYXQgdGhlIE5QQy4gX1RBTEtfIGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGlhbG9nU291bmQgUGF0aCB0byBzb3VuZCBmaWxlIHRvIHBsYXkgb25jZSBmb3IgZXZlcnkgbGluZSBvZiBkaWFsb2cgcmVhZCBvbiB0aGUgVUkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2Fsa2luZ0FuaW0gQW5pbWF0aW9uIHRvIHBsYXkgd2hlbiB3YWxraW5nIHdpdGggZm9sbG93UGF0aFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdhbGtpbmdTcGVlZCBEZWZhdWx0IHNwZWVkIHRvIHVzZSB3aGVuIHdhbGtpbmcgd2l0aCBmb2xsb3dQYXRoXG4gKiBAcHJvcGVydHkge1ZlY3RvcjNbXX0gcGF0aCBBcnJheSBvZiBWZWN0b3IzIHBvaW50cyByZXByZXNlbnRpbmcgdGhlIGRlZmF1bHQgcGF0aCB0byB3YWxrIG92ZXIuIFRoZSBOUEMgd2lsbCB3YWxrIGxvb3Bpbmcgb3ZlciB0aGVzZSBwb2ludHNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGV4dEJ1YmJsZSBJZiB0cnVlLCB0aGUgTlBDIGNhbiBkaXNwbGF5IHRleHQgYnViYmxlcyB3aXRoIGRpYWxvZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBidWJibGVIZWlnaHQgVGhlIGRlZmF1bHQgaGVpZ2h0IHRvIGRpc3BsYXkgdGV4dCBidWJibGVzIG92ZXIgdGhlIE5QQydzIHBvc2l0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vVUkgSWYgdHJ1ZSwgbm8gVUkgZGlhbG9nIGVsZW1lbnRzIGFyZSBjb25zdHJ1Y3RlZC4gVGhlIE5QQyBjYW4gdXNlIHNwZWVjaCBidWJibGVzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHZvbHVtZSBTZXRzIHRoZSB2b2x1bWUgb2YgdGhlIE5QQydzIGF1ZGlvXG4gKlxuICovXG5cbmV4cG9ydCB0eXBlIE5QQ0RhdGEgPSB7XG4gIHR5cGU6IE5QQ1R5cGVcbiAgYm9keT86IE5QQ0JvZHlUeXBlXG4gIG1vZGVsPzogc3RyaW5nIHwgUEJHbHRmQ29udGFpbmVyIHwgUEJBdmF0YXJTaGFwZVxuXG4gIHdhbGtpbmdBbmltPzogc3RyaW5nXG4gIHBvcnRyYWl0Pzogc3RyaW5nIHwgSW1hZ2VEYXRhXG4gIHJlYWN0RGlzdGFuY2U/OiBudW1iZXJcbiAgaWRsZUFuaW0/OiBzdHJpbmdcbiAgZmFjZVVzZXI/OiBib29sZWFuXG4gIHR1cm5pbmdTcGVlZD86IG51bWJlclxuICBvbmx5RXh0ZXJuYWxUcmlnZ2VyPzogYm9vbGVhblxuICBvbmx5Q2xpY2tUcmlnZ2VyPzogYm9vbGVhblxuICBvbmx5RVRyaWdnZXI/OiBib29sZWFuXG4gIG9uQWN0aXZhdGU6IChvdGhlcjogRW50aXR5KSA9PiB2b2lkXG4gIG9uV2Fsa0F3YXk/OiAob3RoZXI6IEVudGl0eSkgPT4gdm9pZFxuICBjb250aW51ZU9uV2Fsa0F3YXk/OiBib29sZWFuXG4gIGRhcmtVST86IGJvb2xlYW5cbiAgY29vbERvd25EdXJhdGlvbj86IG51bWJlclxuICBob3ZlclRleHQ/OiBzdHJpbmdcbiAgZGlhbG9nU291bmQ/OiBzdHJpbmdcbiAgLy9kaWFsb2dDdXN0b21UaGVtZT86IFRleHR1cmVcbiAgdGV4dEJ1YmJsZT86IGJvb2xlYW5cbiAgYnViYmxlSGVpZ2h0PzogbnVtYmVyXG4gIG5vVUk/OiBib29sZWFuXG5cbiAgcGF0aERhdGE/OiBGb2xsb3dQYXRoRGF0YVxuXG4gIGJ1YmJsZVhPZmZzZXQ/OiBudW1iZXJcbiAgYnViYmxlWU9mZnNldD86IG51bWJlclxuXG4gIHZvbHVtZTogYW55XG59XG5cbi8qKlxuICogTWFrZSBhbiBOUEMgd2FsayBmb2xsb3dpbmcgYSBwYXRoXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gRm9sbG93UGF0aERhdGEgLSBPYmplY3Qgd2l0aCBkYXRhIHRvIGRlc2NyaWJlIGEgcGF0aCB0aGF0IGFuIE5QQyBjYW4gd2Fsa1xuICogQHByb3BlcnR5IHtWZWN0b3IzW119IHBhdGggQXJyYXkgb2YgYFZlY3RvcjNgIHBvc2l0aW9ucyB0byB3YWxrIG92ZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3BlZWQgU3BlZWQgdG8gbW92ZSBhdCB3aGlsZSB3YWxraW5nIHRoaXMgcGF0aC4gSWYgbm8gYHNwZWVkYCBvciBgdG90YWxEdXJhdGlvbmAgaXMgcHJvdmlkZWQsIGl0IHVzZXMgdGhlIE5QQydzIGB3YWxraW5nU3BlZWRgLCB3aGljaCBpcyBfMl8gYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3RhbER1cmF0aW9uIFRoZSBkdXJhdGlvbiBpbiBfc2Vjb25kc18gdGhhdCB0aGUgd2hvbGUgcGF0aCBzaG91bGQgdGFrZS4gVGhlIE5QQyB3aWxsIG1vdmUgYXQgdGhlIGNvbnN0YW50IHNwZWVkIHJlcXVpcmVkIHRvIGZpbmlzaCBpbiB0aGF0IHRpbWUuIFRoaXMgdmFsdWUgb3ZlcnJpZGVzIHRoYXQgb2YgdGhlIF9zcGVlZF8uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvb3AgX2Jvb2xlYW5fIElmIHRydWUsIHRoZSBOUEMgd2Fsa3MgaW4gY2lyY2xlcyBvdmVyIHRoZSBwcm92aWRlZCBzZXQgb2YgcG9pbnRzIGluIHRoZSBwYXRoLiBfZmFsc2VfIGJ5IGRlZmF1bHQsIHVubGVzcyB0aGUgTlBDIGlzIGluaXRpYXRlZCB3aXRoIGEgYHBhdGhgLCBpbiB3aGljaCBjYXNlIGl0IHN0YXJ0cyBhcyBfdHJ1ZV8uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGN1cnZlIF9ib29sZWFuXyBJZiB0cnVlLCB0aGUgcGF0aCBpcyB0cmFjZWQgYSBzaW5nbGUgc21vb3RoIGN1cnZlIHRoYXQgcGFzc2VzIG92ZXIgZWFjaCBvZiB0aGUgaW5kaWNhdGVkIHBvaW50cy4gVGhlIGN1cnZlIGlzIG1hZGUgb3V0IG9mIHN0cmFpZ2h0LWxpbmUgc2VnbWVudHMsIHRoZSBwYXRoIGlzIHN0b3JlZCB3aXRoIDQgdGltZXMgYXMgbWFueSBwb2ludHMgYXMgb3JpZ2luYWxseSBkZWZpbmVkLiBfZmFsc2VfIGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3RhcnRpbmdQb2ludCBJbmRleCBwb3NpdGlvbiBmb3Igd2hhdCBwb2ludCB0byBzdGFydCBmcm9tIG9uIHRoZSBwYXRoLiBfMF8gYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gb25GaW5pc2hDYWxsYmFjayBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIE5QQyBmaW5pc2hlZCB3YWxraW5nIG92ZXIgYWxsIHRoZSBwb2ludHMgb24gdGhlIHBhdGguIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBgbG9vcGAgaXMgX2ZhbHNlXy5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gb25SZWFjaGVkUG9pbnRDYWxsYmFjayBGdW5jdGlvbiB0byBjYWxsIG9uY2UgZXZlcnkgdGltZSB0aGUgTlBDIHJlYWNoZXMgYSBwb2ludCBpbiB0aGUgcGF0aC5cbiAqXG4gKi9cbmV4cG9ydCB0eXBlIEZvbGxvd1BhdGhEYXRhID0ge1xuICBzdGFydGluZ1BvaW50PzogbnVtYmVyXG4gIGxvb3A/OiBib29sZWFuXG4gIGN1cnZlPzogYm9vbGVhblxuICB0b3RhbER1cmF0aW9uOiBudW1iZXJcbiAgc3BlZWQ/OiBudW1iZXJcbiAgcGF0aD86IFZlY3RvcjNbXVxuICBwYXRoVHlwZT86IE5QQ1BhdGhUeXBlXG4gIG9uRmluaXNoQ2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4gIG9uUmVhY2hlZFBvaW50Q2FsbGJhY2s/OiAoKSA9PiB2b2lkXG59XG5cbi8qKlxuICogQ3V0IG91dCBhIHNlY3Rpb24gb2YgYW4gaW1hZ2UgZmlsZVxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEltYWdlU2VjdGlvbiAtIE9iamVjdCB3aXRoIGRhdGEgdG8gb25seSBkaXNwbGF5IGEgc2VjdGlvbiBvZiBhbiBpbWFnZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNvdXJjZVdpZHRoIFdpZHRoIGluIHBpeGVscyB0byBzZWxlY3QgZnJvbSBpbWFnZSwgc3RhcnRpbmcgZnJvbSB0aGUgc291cmNlTGVmdCwgZ29pbmcgcmlnaHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzb3VyY2VIZWlnaHQgSGVpZ2h0IGluIHBpeGVscyB0byBzZWxlY3QgZnJvbSBpbWFnZSwgc3RhcnRpbmcgZnJvbSB0aGUgc291cmNlVG9wLCBnb2luZyBkb3duXG4gKiBAcHJvcGVydHkge251bWJlcn0gc291cmNlTGVmdCBMZWZ0bW9zdCBwaXhlbCB0byBzZWxlY3QgZnJvbSBpbWFnZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNvdXJjZVRvcCBUb3Btb3N0IHBpeGVsIHRvIHNlbGVjdCBmcm9tIGltYWdlXG4gKlxuICovXG5leHBvcnQgdHlwZSBJbWFnZVNlY3Rpb24gPSB7XG4gIHNvdXJjZVdpZHRoOiBudW1iZXJcbiAgc291cmNlSGVpZ2h0OiBudW1iZXJcbiAgc291cmNlTGVmdD86IG51bWJlclxuICBzb3VyY2VUb3A/OiBudW1iZXJcbn1cblxuLyoqXG4gKlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEltYWdlRGF0YSAtIE9iamVjdCB3aXRoIGRhdGEgZm9yIGRpc3BsYXlpbmcgYW4gaW1hZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gdGhlIGltYWdlIGZpbGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gb2Zmc2V0WCBPZmZzZXQgb24gWCwgcmVsYXRpdmUgdG8gdGhlIG5vcm1hbCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gb2Zmc2V0WSBPZmZzZXQgb24gWSwgcmVsYXRpdmUgdG8gdGhlIG5vcm1hbCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IFRoZSBoZWlnaHQgdG8gc2hvdyB0aGUgaW1hZ2Ugb25zY3JlZW4uXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGggVGhlIHdpZHRoIHRvIHNob3cgdGhlIGltYWdlIG9uc2NyZWVuLlxuICogQHByb3BlcnR5IHtJbWFnZVNlY3Rpb259IHNlY3Rpb24gVXNlIG9ubHkgYSBzZWN0aW9uIG9mIHRoZSBpbWFnZSBmaWxlLCB1c2VmdWwgd2hlbiBhcnJhbmdpbmcgbXVsdGlwbGUgaWNvbnMgaW50byBhbiBpbWFnZSBhdGxhcy4gVGhpcyBmaWVsZCB0YWtlcyBhbiBgSW1hZ2VTZWN0aW9uYCBvYmplY3QsIHNwZWNpZnlpbmcgYHNvdXJjZVdpZHRoYCBhbmQgYHNvdXJjZUhlaWdodGAsIGFuZCBvcHRpb25hbGx5IGFsc28gYHNvdXJjZUxlZnRgIGFuZCBgc291cmNlVG9wYC5cbiAqXG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlRGF0YSA9IHtcbiAgcGF0aDogc3RyaW5nXG4gIG9mZnNldFg/OiBudW1iZXJcbiAgb2Zmc2V0WT86IG51bWJlclxuICBoZWlnaHQ/OiBudW1iZXJcbiAgd2lkdGg/OiBudW1iZXJcbiAgc2VjdGlvbj86IEltYWdlU2VjdGlvblxufVxuXG5leHBvcnQgZW51bSBOUENTdGF0ZSB7XG4gIFNUQU5ESU5HID0gJ3N0YW5kaW5nJyxcbiAgVEFMS0lORyA9ICd0YWxraW5nJyxcbiAgRk9MTE9XUEFUSCA9ICdmb2xsb3dQYXRoJ1xuICAvL0ZPTExPV1BMQVlFUiA9ICdmb2xsb3dQbGF5ZXInXG59XG5cbmV4cG9ydCBlbnVtIE5QQ0JvZHlUeXBlIHtcbiAgTUFMRSA9ICdCYXNlTWFsZScsXG4gIEZFTUFMRSA9ICdCYXNlRmVtYWxlJ1xufVxuXG5leHBvcnQgZW51bSBOUENUeXBlIHtcbiAgQkxBTksgPSAnYmxhbmsnLFxuICBDVVNUT00gPSAnY3VzdG9tJyxcbiAgQVZBVEFSID0gJ2F2YXRhcidcbn1cblxuZXhwb3J0IGVudW0gTlBDUGF0aFR5cGUge1xuICBTTU9PVEhfUEFUSCA9ICdzbW9vdGgnLCAvL3dpbGwgZm9sbG93IHRoZSBwYXRoIGJ1dCBjYW4gY3V0IHNoYXJwIGNvcm5lcnNcbiAgUklHSURfUEFUSCA9ICdyaWdpZCcgLy93aWxsIGVuc3VyZSBlYWNoIGNvcm5lciBpcyBoaXRcbn1cbiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Entity } from '@dcl/sdk/ecs';
|
|
2
|
+
import { Vector3, Quaternion } from '@dcl/sdk/math';
|
|
3
|
+
export declare function remap(value: number, min1: number, max1: number, min2: number, max2: number): number;
|
|
4
|
+
export declare function getWorldPosition(entity: Entity): Vector3;
|
|
5
|
+
export declare function getWorldRotation(entity: Entity): Quaternion;
|
|
6
|
+
export declare enum InterpolationType {
|
|
7
|
+
LINEAR = "linear",
|
|
8
|
+
EASEINQUAD = "easeinquad",
|
|
9
|
+
EASEOUTQUAD = "easeoutquad",
|
|
10
|
+
EASEQUAD = "easequad",
|
|
11
|
+
EASEINSINE = "easeinsine",
|
|
12
|
+
EASEOUTSINE = "easeoutsine",
|
|
13
|
+
EASESINE = "easeinoutsine",
|
|
14
|
+
EASEINEXPO = "easeinexpo",
|
|
15
|
+
EASEOUTEXPO = "easeoutexpo",
|
|
16
|
+
EASEEXPO = "easeinoutexpo",
|
|
17
|
+
EASEINELASTIC = "easeinelastic",
|
|
18
|
+
EASEOUTELASTIC = "easeoutelastic",
|
|
19
|
+
EASEELASTIC = "easeinoutelastic",
|
|
20
|
+
EASEINBOUNCE = "easeinbounce",
|
|
21
|
+
EASEOUTEBOUNCE = "easeoutbounce",
|
|
22
|
+
EASEBOUNCE = "easeinoutbounce"
|
|
23
|
+
}
|
|
24
|
+
export declare function interpolate(type: InterpolationType, t: number): number;
|
|
25
|
+
export declare function createCatmullRomSpline(points: Vector3[], nbPoints: number, closed?: boolean): Vector3[];
|
|
26
|
+
export declare function areAABBIntersecting(aMin: Vector3, aMax: Vector3, bMin: Vector3, bMax: Vector3): boolean;
|
|
27
|
+
export declare function areSpheresIntersecting(aPos: Vector3, aRadius: number, bPos: Vector3, bRadius: number): boolean;
|
|
28
|
+
export declare function areAABBSphereIntersecting(boxMin: Vector3, boxMax: Vector3, spherePos: Vector3, sphereRadius: number): boolean;
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { Transform } from '@dcl/sdk/ecs';
|
|
2
|
+
import { Vector3, Quaternion } from '@dcl/sdk/math';
|
|
3
|
+
export function remap(value, min1, max1, min2, max2) {
|
|
4
|
+
let range1 = max1 - min1;
|
|
5
|
+
let range2 = max2 - min2;
|
|
6
|
+
return ((value - min1) / range1) * range2 + min2;
|
|
7
|
+
}
|
|
8
|
+
export function getWorldPosition(entity) {
|
|
9
|
+
let transform = Transform.getOrNull(entity);
|
|
10
|
+
if (!transform)
|
|
11
|
+
return Vector3.Zero();
|
|
12
|
+
let parent = transform.parent;
|
|
13
|
+
if (!parent) {
|
|
14
|
+
return transform.position;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
let parentRotation = Transform.get(parent).rotation;
|
|
18
|
+
return Vector3.add(getWorldPosition(parent), Vector3.rotate(transform.position, getWorldRotation(parent)));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function getWorldRotation(entity) {
|
|
22
|
+
let transform = Transform.getOrNull(entity);
|
|
23
|
+
if (!transform)
|
|
24
|
+
return Quaternion.Identity();
|
|
25
|
+
let parent = transform.parent;
|
|
26
|
+
if (!parent) {
|
|
27
|
+
return transform.rotation;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return Quaternion.multiply(transform.rotation, getWorldRotation(parent));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export var InterpolationType;
|
|
34
|
+
(function (InterpolationType) {
|
|
35
|
+
InterpolationType["LINEAR"] = "linear";
|
|
36
|
+
InterpolationType["EASEINQUAD"] = "easeinquad";
|
|
37
|
+
InterpolationType["EASEOUTQUAD"] = "easeoutquad";
|
|
38
|
+
InterpolationType["EASEQUAD"] = "easequad";
|
|
39
|
+
InterpolationType["EASEINSINE"] = "easeinsine";
|
|
40
|
+
InterpolationType["EASEOUTSINE"] = "easeoutsine";
|
|
41
|
+
InterpolationType["EASESINE"] = "easeinoutsine";
|
|
42
|
+
InterpolationType["EASEINEXPO"] = "easeinexpo";
|
|
43
|
+
InterpolationType["EASEOUTEXPO"] = "easeoutexpo";
|
|
44
|
+
InterpolationType["EASEEXPO"] = "easeinoutexpo";
|
|
45
|
+
InterpolationType["EASEINELASTIC"] = "easeinelastic";
|
|
46
|
+
InterpolationType["EASEOUTELASTIC"] = "easeoutelastic";
|
|
47
|
+
InterpolationType["EASEELASTIC"] = "easeinoutelastic";
|
|
48
|
+
InterpolationType["EASEINBOUNCE"] = "easeinbounce";
|
|
49
|
+
InterpolationType["EASEOUTEBOUNCE"] = "easeoutbounce";
|
|
50
|
+
InterpolationType["EASEBOUNCE"] = "easeinoutbounce";
|
|
51
|
+
})(InterpolationType || (InterpolationType = {}));
|
|
52
|
+
export function interpolate(type, t) {
|
|
53
|
+
switch (type) {
|
|
54
|
+
case InterpolationType.LINEAR:
|
|
55
|
+
return InterpolateLinear(t);
|
|
56
|
+
case InterpolationType.EASEINQUAD:
|
|
57
|
+
return InterpolateEaseInQuad(t);
|
|
58
|
+
case InterpolationType.EASEOUTQUAD:
|
|
59
|
+
return InterpolateEaseOutQuad(t);
|
|
60
|
+
case InterpolationType.EASEQUAD:
|
|
61
|
+
return InterpolateEaseQuad(t);
|
|
62
|
+
case InterpolationType.EASEINSINE:
|
|
63
|
+
return InterpolateEaseInSine(t);
|
|
64
|
+
case InterpolationType.EASEOUTSINE:
|
|
65
|
+
return InterpolateEaseOutSine(t);
|
|
66
|
+
case InterpolationType.EASESINE:
|
|
67
|
+
return InterpolateEaseInOutSine(t);
|
|
68
|
+
case InterpolationType.EASEINEXPO:
|
|
69
|
+
return InterpolateEaseInExpo(t);
|
|
70
|
+
case InterpolationType.EASEOUTEXPO:
|
|
71
|
+
return InterpolateEaseOutExpo(t);
|
|
72
|
+
case InterpolationType.EASEEXPO:
|
|
73
|
+
return InterpolateEaseInOutExpo(t);
|
|
74
|
+
case InterpolationType.EASEINELASTIC:
|
|
75
|
+
return InterpolateEaseInElastic(t);
|
|
76
|
+
case InterpolationType.EASEOUTELASTIC:
|
|
77
|
+
return InterpolateEaseOutElastic(t);
|
|
78
|
+
case InterpolationType.EASEELASTIC:
|
|
79
|
+
return InterpolateEaseInOutElastic(t);
|
|
80
|
+
case InterpolationType.EASEINBOUNCE:
|
|
81
|
+
return InterpolateEaseInBounce(t);
|
|
82
|
+
case InterpolationType.EASEOUTEBOUNCE:
|
|
83
|
+
return InterpolateEaseOutBounce(t);
|
|
84
|
+
case InterpolationType.EASEBOUNCE:
|
|
85
|
+
return InterpolateEaseInOutBounce(t);
|
|
86
|
+
default:
|
|
87
|
+
return InterpolateLinear(t);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function InterpolateLinear(t) {
|
|
91
|
+
return t;
|
|
92
|
+
}
|
|
93
|
+
function InterpolateEaseInQuad(t) {
|
|
94
|
+
return t * t;
|
|
95
|
+
}
|
|
96
|
+
function InterpolateEaseOutQuad(t) {
|
|
97
|
+
return t * (2 - t);
|
|
98
|
+
}
|
|
99
|
+
function InterpolateEaseQuad(t) {
|
|
100
|
+
return (t * t) / (2.0 * (t * t - t) + 1.0);
|
|
101
|
+
}
|
|
102
|
+
function InterpolateEaseInSine(t) {
|
|
103
|
+
return 1 - Math.cos((t * Math.PI) / 2);
|
|
104
|
+
}
|
|
105
|
+
function InterpolateEaseOutSine(t) {
|
|
106
|
+
return Math.sin((t * Math.PI) / 2);
|
|
107
|
+
}
|
|
108
|
+
function InterpolateEaseInOutSine(t) {
|
|
109
|
+
return -(Math.cos(Math.PI * t) - 1) / 2;
|
|
110
|
+
}
|
|
111
|
+
function InterpolateEaseInExpo(t) {
|
|
112
|
+
return t === 0 ? 0 : Math.pow(2, 10 * t - 10);
|
|
113
|
+
}
|
|
114
|
+
function InterpolateEaseOutExpo(t) {
|
|
115
|
+
return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);
|
|
116
|
+
}
|
|
117
|
+
function InterpolateEaseInOutExpo(t) {
|
|
118
|
+
return t === 0
|
|
119
|
+
? 0
|
|
120
|
+
: t === 1
|
|
121
|
+
? 1
|
|
122
|
+
: t < 0.5
|
|
123
|
+
? Math.pow(2, 20 * t - 10) / 2
|
|
124
|
+
: (2 - Math.pow(2, -20 * t + 10)) / 2;
|
|
125
|
+
}
|
|
126
|
+
function InterpolateEaseInElastic(t) {
|
|
127
|
+
const c4 = (2 * Math.PI) / 3;
|
|
128
|
+
return t === 0
|
|
129
|
+
? 0
|
|
130
|
+
: t === 1
|
|
131
|
+
? 1
|
|
132
|
+
: -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * c4);
|
|
133
|
+
}
|
|
134
|
+
function InterpolateEaseOutElastic(t) {
|
|
135
|
+
const c5 = (2 * Math.PI) / 3;
|
|
136
|
+
return t === 0
|
|
137
|
+
? 0
|
|
138
|
+
: t === 1
|
|
139
|
+
? 1
|
|
140
|
+
: Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c5) + 1;
|
|
141
|
+
}
|
|
142
|
+
function InterpolateEaseInOutElastic(t) {
|
|
143
|
+
const c6 = (2 * Math.PI) / 4.5;
|
|
144
|
+
return t === 0
|
|
145
|
+
? 0
|
|
146
|
+
: t === 1
|
|
147
|
+
? 1
|
|
148
|
+
: t < 0.5
|
|
149
|
+
? -(Math.pow(2, 20 * t - 10) * Math.sin((20 * t - 11.125) * c6)) / 2
|
|
150
|
+
: (Math.pow(2, -20 * t + 10) * Math.sin((20 * t - 11.125) * c6)) / 2 + 1;
|
|
151
|
+
}
|
|
152
|
+
function InterpolateEaseInBounce(t) {
|
|
153
|
+
return 1 - bounce(1 - t);
|
|
154
|
+
}
|
|
155
|
+
function InterpolateEaseOutBounce(t) {
|
|
156
|
+
return bounce(t);
|
|
157
|
+
}
|
|
158
|
+
function InterpolateEaseInOutBounce(t) {
|
|
159
|
+
return t < 0.5 ? (1 - bounce(1 - 2 * t)) / 2 : (1 + bounce(2 * t - 1)) / 2;
|
|
160
|
+
}
|
|
161
|
+
function bounce(x) {
|
|
162
|
+
const n1 = 7.5625;
|
|
163
|
+
const d1 = 2.75;
|
|
164
|
+
if (x < 1 / d1) {
|
|
165
|
+
return n1 * x * x;
|
|
166
|
+
}
|
|
167
|
+
else if (x < 2 / d1) {
|
|
168
|
+
return n1 * (x -= 1.5 / d1) * x + 0.75;
|
|
169
|
+
}
|
|
170
|
+
else if (x < 2.5 / d1) {
|
|
171
|
+
return n1 * (x -= 2.25 / d1) * x + 0.9375;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
return n1 * (x -= 2.625 / d1) * x + 0.984375;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export function createCatmullRomSpline(points, nbPoints, closed) {
|
|
178
|
+
const catmullRom = new Array();
|
|
179
|
+
const step = 1.0 / nbPoints;
|
|
180
|
+
let amount = 0.0;
|
|
181
|
+
if (closed) {
|
|
182
|
+
const pointsCount = points.length;
|
|
183
|
+
for (let i = 0; i < pointsCount; i++) {
|
|
184
|
+
amount = 0;
|
|
185
|
+
for (let c = 0; c < nbPoints; c++) {
|
|
186
|
+
catmullRom.push(Vector3.catmullRom(points[i % pointsCount], points[(i + 1) % pointsCount], points[(i + 2) % pointsCount], points[(i + 3) % pointsCount], amount));
|
|
187
|
+
amount += step;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catmullRom.push(catmullRom[0]);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
const totalPoints = new Array();
|
|
194
|
+
totalPoints.push(Vector3.clone(points[0]));
|
|
195
|
+
Array.prototype.push.apply(totalPoints, points);
|
|
196
|
+
totalPoints.push(Vector3.clone(points[points.length - 1]));
|
|
197
|
+
let i = 0;
|
|
198
|
+
for (; i < totalPoints.length - 3; i++) {
|
|
199
|
+
amount = 0;
|
|
200
|
+
for (let c = 0; c < nbPoints; c++) {
|
|
201
|
+
catmullRom.push(Vector3.catmullRom(totalPoints[i], totalPoints[i + 1], totalPoints[i + 2], totalPoints[i + 3], amount));
|
|
202
|
+
amount += step;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
i--;
|
|
206
|
+
catmullRom.push(Vector3.catmullRom(totalPoints[i], totalPoints[i + 1], totalPoints[i + 2], totalPoints[i + 3], amount));
|
|
207
|
+
}
|
|
208
|
+
return catmullRom;
|
|
209
|
+
}
|
|
210
|
+
export function areAABBIntersecting(aMin, aMax, bMin, bMax) {
|
|
211
|
+
return (aMin.x <= bMax.x &&
|
|
212
|
+
aMax.x >= bMin.x &&
|
|
213
|
+
aMin.y <= bMax.y &&
|
|
214
|
+
aMax.y >= bMin.y &&
|
|
215
|
+
aMin.z <= bMax.z &&
|
|
216
|
+
aMax.z >= bMin.z);
|
|
217
|
+
}
|
|
218
|
+
export function areSpheresIntersecting(aPos, aRadius, bPos, bRadius) {
|
|
219
|
+
const sqDist = Vector3.distanceSquared(aPos, bPos);
|
|
220
|
+
const radiusSum = aRadius + bRadius;
|
|
221
|
+
return sqDist < radiusSum * radiusSum;
|
|
222
|
+
}
|
|
223
|
+
export function areAABBSphereIntersecting(boxMin, boxMax, spherePos, sphereRadius) {
|
|
224
|
+
let dmin = 0;
|
|
225
|
+
if (spherePos.x < boxMin.x)
|
|
226
|
+
dmin += (boxMin.x - spherePos.x) * (boxMin.x - spherePos.x);
|
|
227
|
+
if (spherePos.x > boxMax.x)
|
|
228
|
+
dmin += (spherePos.x - boxMax.x) * (spherePos.x - boxMax.x);
|
|
229
|
+
if (spherePos.y < boxMin.y)
|
|
230
|
+
dmin += (boxMin.y - spherePos.y) * (boxMin.y - spherePos.y);
|
|
231
|
+
if (spherePos.y > boxMax.y)
|
|
232
|
+
dmin += (spherePos.y - boxMax.y) * (spherePos.y - boxMax.y);
|
|
233
|
+
if (spherePos.z < boxMin.z)
|
|
234
|
+
dmin += (boxMin.z - spherePos.z) * (boxMin.z - spherePos.z);
|
|
235
|
+
if (spherePos.z > boxMax.z)
|
|
236
|
+
dmin += (spherePos.z - boxMax.z) * (spherePos.z - boxMax.z);
|
|
237
|
+
return dmin < sphereRadius * sphereRadius;
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFhbkQsTUFBTSxVQUFVLEtBQUssQ0FDbkIsS0FBYSxFQUNiLElBQVksRUFDWixJQUFZLEVBQ1osSUFBWSxFQUNaLElBQVk7SUFFWixJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFBO0lBQ3hCLElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUE7SUFDeEIsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUE7QUFDbEQsQ0FBQztBQVNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFjO0lBQzdDLElBQUksU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7SUFHM0MsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUVyQyxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO0lBRTdCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQTtJQUMzQixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksY0FBYyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFBO1FBQ25ELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMs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QU0sVUFBVSx5QkFBeUIsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFFLFNBQWtCLEVBQUUsWUFBb0I7SUFDbEgsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBRVosSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFN0QsT0FBTyxJQUFJLEdBQUcsWUFBWSxHQUFHLFlBQVksQ0FBQTtBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5LCBUcmFuc2Zvcm0gfSBmcm9tICdAZGNsL3Nkay9lY3MnXG5pbXBvcnQgeyBWZWN0b3IzLCBRdWF0ZXJuaW9uIH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcblxuLyoqXG4gKiBSZW1hcHMgYSB2YWx1ZSBmcm9tIG9uZSByYW5nZSBvZiB2YWx1ZXMgdG8gaXRzIGVxdWl2YWxlbnQsIHNjYWxlZCBpbiBwcm9wb3J0aW9uIHRvIGFub3RoZXIgcmFuZ2Ugb2YgdmFsdWVzLCB1c2luZyBtYXhpbXVtIGFuZCBtaW5pbXVtLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIGlucHV0IG51bWJlclxuICogQHBhcmFtIG1pbjEgLSBtaW4xIE1pbmltdW0gdmFsdWUgaW4gdGhlIHJhbmdlIG9mIHRoZSBpbnB1dC5cbiAqIEBwYXJhbSBtYXgxIC0gbWF4MSBNYXhpbXVtIHZhbHVlIGluIHRoZSByYW5nZSBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gbWluMiAtIG1pbjIgTWluaW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2YgdGhlIG91dHB1dC5cbiAqIEBwYXJhbSBtYXgyIC0gbWF4MiBNYXhpbXVtIHZhbHVlIGluIHRoZSByYW5nZSBvZiB0aGUgb3V0cHV0LlxuICogQHJldHVybnMgVGhlIHJlc3VsdGluZyByZW1hcHBlZCB2YWx1ZSBiZXR3ZWVuIHRoZSBuZXcgbWluIGFuZCBtYXhcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWFwKFxuICB2YWx1ZTogbnVtYmVyLFxuICBtaW4xOiBudW1iZXIsXG4gIG1heDE6IG51bWJlcixcbiAgbWluMjogbnVtYmVyLFxuICBtYXgyOiBudW1iZXJcbikge1xuICBsZXQgcmFuZ2UxID0gbWF4MSAtIG1pbjFcbiAgbGV0IHJhbmdlMiA9IG1heDIgLSBtaW4yXG4gIHJldHVybiAoKHZhbHVlIC0gbWluMSkgLyByYW5nZTEpICogcmFuZ2UyICsgbWluMlxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIGFuIGVudGl0eSB0aGF0IGlzIGEgY2hpbGQgb2Ygb3RoZXIgZW50aXRpZXMsIHJlbGF0aXZlIHRvIHRoZSBzY2VuZSBpbnN0ZWFkIG9mIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQuIFJldHVybnMgYSBWZWN0b3IzLlxuICpcbiAqIEBwYXJhbSBlbnRpdHkgLSBFbnRpdHkgdG8gY2FsY3VsYXRlIHBvc2l0aW9uXG4gKiBAcmV0dXJucyBUaGUgRW50aXR5J3MgZ2xvYmFsIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBzY2VuZSdzIG9yaWdpblxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ybGRQb3NpdGlvbihlbnRpdHk6IEVudGl0eSk6IFZlY3RvcjMge1xuICBsZXQgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE9yTnVsbChlbnRpdHkpXG5cblxuICBpZiAoIXRyYW5zZm9ybSkgcmV0dXJuIFZlY3RvcjMuWmVybygpXG5cbiAgbGV0IHBhcmVudCA9IHRyYW5zZm9ybS5wYXJlbnRcblxuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm0ucG9zaXRpb25cbiAgfSBlbHNlIHtcbiAgICBsZXQgcGFyZW50Um90YXRpb24gPSBUcmFuc2Zvcm0uZ2V0KHBhcmVudCkucm90YXRpb25cbiAgICByZXR1cm4gVmVjdG9yMy5hZGQoZ2V0V29ybGRQb3NpdGlvbihwYXJlbnQpLCBWZWN0b3IzLnJvdGF0ZSh0cmFuc2Zvcm0ucG9zaXRpb24sIGdldFdvcmxkUm90YXRpb24ocGFyZW50KSkpXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiBhbiBlbnRpdHkgdGhhdCBpcyBhIGNoaWxkIG9mIG90aGVyIGVudGl0aWVzLCByZWxhdGl2ZSB0byB0aGUgc2NlbmUgaW5zdGVhZCBvZiByZWxhdGl2ZSB0byB0aGUgcGFyZW50LiBSZXR1cm5zIGEgVmVjdG9yMy5cbiAqXG4gKiBAcGFyYW0gZW50aXR5IC0gRW50aXR5IHRvIGNhbGN1bGF0ZSBwb3NpdGlvblxuICogQHJldHVybnMgVGhlIEVudGl0eSdzIGdsb2JhbCByb3RhdGlvbiBpbiByZWZlcmVuY2UgdG8gdGhlIHNjZW5lJ3Mgb3JpZ2luXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JsZFJvdGF0aW9uKGVudGl0eTogRW50aXR5KTogUXVhdGVybmlvbiB7XG4gIGxldCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVudGl0eSlcblxuICBpZiAoIXRyYW5zZm9ybSlcbiAgICByZXR1cm4gUXVhdGVybmlvbi5JZGVudGl0eSgpXG5cbiAgbGV0IHBhcmVudCA9IHRyYW5zZm9ybS5wYXJlbnRcblxuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm0ucm90YXRpb25cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUXVhdGVybmlvbi5tdWx0aXBseSh0cmFuc2Zvcm0ucm90YXRpb24sIGdldFdvcmxkUm90YXRpb24ocGFyZW50KSlcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGVudW0gSW50ZXJwb2xhdGlvblR5cGUge1xuICBMSU5FQVIgPSAnbGluZWFyJyxcblxuICBFQVNFSU5RVUFEID0gJ2Vhc2VpbnF1YWQnLFxuICBFQVNFT1VUUVVBRCA9ICdlYXNlb3V0cXVhZCcsXG4gIEVBU0VRVUFEID0gJ2Vhc2VxdWFkJyxcblxuICBFQVNFSU5TSU5FID0gJ2Vhc2VpbnNpbmUnLFxuICBFQVNFT1VUU0lORSA9ICdlYXNlb3V0c2luZScsXG4gIEVBU0VTSU5FID0gJ2Vhc2Vpbm91dHNpbmUnLFxuXG4gIEVBU0VJTkVYUE8gPSAnZWFzZWluZXhwbycsXG4gIEVBU0VPVVRFWFBPID0gJ2Vhc2VvdXRleHBvJyxcbiAgRUFTRUVYUE8gPSAnZWFzZWlub3V0ZXhwbycsXG5cbiAgRUFTRUlORUxBU1RJQyA9ICdlYXNlaW5lbGFzdGljJyxcbiAgRUFTRU9VVEVMQVNUSUMgPSAnZWFzZW91dGVsYXN0aWMnLFxuICBFQVNFRUxBU1RJQyA9ICdlYXNlaW5vdXRlbGFzdGljJyxcblxuICBFQVNFSU5CT1VOQ0UgPSAnZWFzZWluYm91bmNlJyxcbiAgRUFTRU9VVEVCT1VOQ0UgPSAnZWFzZW91dGJvdW5jZScsXG4gIEVBU0VCT1VOQ0UgPSAnZWFzZWlub3V0Ym91bmNlJyxcbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBvbGF0ZSh0eXBlOiBJbnRlcnBvbGF0aW9uVHlwZSwgdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBJbnRlcnBvbGF0aW9uVHlwZS5MSU5FQVI6XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVMaW5lYXIodClcbiAgICBjYXNlIEludGVycG9sYXRpb25UeXBlLkVBU0VJTlFVQUQ6XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVFYXNlSW5RdWFkKHQpXG4gICAgY2FzZSBJbnRlcnBvbGF0aW9uVHlwZS5FQVNFT1VUUVVBRDpcbiAgICAgIHJldHVybiBJbnRlcnBvbGF0ZUVhc2VPdXRRdWFkKHQpXG4gICAgY2FzZSBJbnRlcnBvbGF0aW9uVHlwZS5FQVNFUVVBRDpcbiAgICAgIHJldHVybiBJbnRlcnBvbGF0ZUVhc2VRdWFkKHQpXG5cdCAgY2FzZSBJbnRlcnBvbGF0aW9uVHlwZS5FQVNFSU5TSU5FOlxuXHRcdCAgcmV0dXJuIEludGVycG9sYXRlRWFzZUluU2luZSh0KVxuICAgIGNhc2UgSW50ZXJwb2xhdGlvblR5cGUuRUFTRU9VVFNJTkU6XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVFYXNlT3V0U2luZSh0KVxuICAgIGNhc2UgSW50ZXJwb2xhdGlvblR5cGUuRUFTRVNJTkU6XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVFYXNlSW5PdXRTaW5lKHQpXG4gICAgY2FzZSBJbnRlcnBvbGF0aW9uVHlwZS5FQVNFSU5FWFBPOlxuICAgICAgcmV0dXJuIEludGVycG9sYXRlRWFzZUluRXhwbyh0KVxuICAgIGNhc2UgSW50ZXJwb2xhdGlvblR5cGUuRUFTRU9VVEVYUE86XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVFYXNlT3V0RXhwbyh0KVxuICAgIGNhc2UgSW50ZXJwb2xhdGlvblR5cGUuRUFTRUVYUE86XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVFYXNlSW5PdXRFeHBvKHQpXG4gICAgY2FzZSBJbnRlcnBvbGF0aW9uVHlwZS5FQVNFSU5FTEFTVElDOlxuICAgICAgcmV0dXJuIEludGVycG9sYXRlRWFzZUluRWxhc3RpYyh0KVxuICAgIGNhc2UgSW50ZXJwb2xhdGlvblR5cGUuRUFTRU9VVEVMQVNUSUM6XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVFYXNlT3V0RWxhc3RpYyh0KVxuICAgIGNhc2UgSW50ZXJwb2xhdGlvblR5cGUuRUFTRUVMQVNUSUM6XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVFYXNlSW5PdXRFbGFzdGljKHQpXG4gICAgY2FzZSBJbnRlcnBvbGF0aW9uVHlwZS5FQVNFSU5CT1VOQ0U6XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVFYXNlSW5Cb3VuY2UodClcbiAgICBjYXNlIEludGVycG9sYXRpb25UeXBlLkVBU0VPVVRFQk9VTkNFOlxuICAgICAgcmV0dXJuIEludGVycG9sYXRlRWFzZU91dEJvdW5jZSh0KVxuICAgIGNhc2UgSW50ZXJwb2xhdGlvblR5cGUuRUFTRUJPVU5DRTpcbiAgICAgIHJldHVybiBJbnRlcnBvbGF0ZUVhc2VJbk91dEJvdW5jZSh0KVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gSW50ZXJwb2xhdGVMaW5lYXIodClcbiAgfVxufVxuXG5mdW5jdGlvbiBJbnRlcnBvbGF0ZUxpbmVhcih0OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdFxufVxuXG5mdW5jdGlvbiBJbnRlcnBvbGF0ZUVhc2VJblF1YWQodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHQgKiB0XG59XG5cbmZ1bmN0aW9uIEludGVycG9sYXRlRWFzZU91dFF1YWQodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHQgKiAoMiAtIHQpXG59XG5cbmZ1bmN0aW9uIEludGVycG9sYXRlRWFzZVF1YWQodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuICh0ICogdCkgLyAoMi4wICogKHQgKiB0IC0gdCkgKyAxLjApXG59XG5cbmZ1bmN0aW9uIEludGVycG9sYXRlRWFzZUluU2luZSh0OiBudW1iZXIpOiBudW1iZXIge1xuXHRyZXR1cm4gMSAtIE1hdGguY29zKCh0ICogTWF0aC5QSSkgLyAyKVxufVxuXG5mdW5jdGlvbiBJbnRlcnBvbGF0ZUVhc2VPdXRTaW5lKHQ6IG51bWJlcik6IG51bWJlciB7XG5cdHJldHVybiBNYXRoLnNpbigodCAqIE1hdGguUEkpIC8gMilcbn1cblxuZnVuY3Rpb24gSW50ZXJwb2xhdGVFYXNlSW5PdXRTaW5lKHQ6IG51bWJlcik6IG51bWJlciB7XG5cdHJldHVybiAtKE1hdGguY29zKE1hdGguUEkgKiB0KSAtIDEpIC8gMlxufVxuXG5mdW5jdGlvbiBJbnRlcnBvbGF0ZUVhc2VJbkV4cG8odDogbnVtYmVyKTogbnVtYmVyIHtcblx0cmV0dXJuIHQgPT09IDAgPyAwIDogTWF0aC5wb3coMiwgMTAgKiB0IC0gMTApXG59XG5cbmZ1bmN0aW9uIEludGVycG9sYXRlRWFzZU91dEV4cG8odDogbnVtYmVyKTogbnVtYmVyIHtcblx0cmV0dXJuIHQgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0xMCAqIHQpXG59XG5cbmZ1bmN0aW9uIEludGVycG9sYXRlRWFzZUluT3V0RXhwbyh0OiBudW1iZXIpOiBudW1iZXIge1xuXHRyZXR1cm4gdCA9PT0gMFxuXHRcdFx0PyAwXG5cdFx0XHQ6IHQgPT09IDFcblx0XHRcdD8gMVxuXHRcdFx0OiB0IDwgMC41XG5cdFx0XHQ/IE1hdGgucG93KDIsIDIwICogdCAtIDEwKSAvIDJcblx0XHRcdDogKDIgLSBNYXRoLnBvdygyLCAtMjAgKiB0ICsgMTApKSAvIDJcbn1cblxuXG5mdW5jdGlvbiBJbnRlcnBvbGF0ZUVhc2VJbkVsYXN0aWModDogbnVtYmVyKTogbnVtYmVyIHtcblx0Y29uc3QgYzQgPSAoMiAqIE1hdGguUEkpIC8gM1xuXG5cdHJldHVybiB0ID09PSAwXG5cdFx0XHQ/IDBcblx0XHRcdDogdCA9PT0gMVxuXHRcdFx0PyAxXG5cdFx0XHQ6IC1NYXRoLnBvdygyLCAxMCAqIHQgLSAxMCkgKiBNYXRoLnNpbigodCAqIDEwIC0gMTAuNzUpICogYzQpXG59XG5cbmZ1bmN0aW9uIEludGVycG9sYXRlRWFzZU91dEVsYXN0aWModDogbnVtYmVyKTogbnVtYmVyIHtcblx0Y29uc3QgYzUgPSAoMiAqIE1hdGguUEkpIC8gM1xuXG5cdHJldHVybiB0ID09PSAwXG5cdFx0XHQ/IDBcblx0XHRcdDogdCA9PT0gMVxuXHRcdFx0PyAxXG5cdFx0XHQ6IE1hdGgucG93KDIsIC0xMCAqIHQpICogTWF0aC5zaW4oKHQgKiAxMCAtIDAuNzUpICogYzUpICsgMVxufVxuXG5mdW5jdGlvbiBJbnRlcnBvbGF0ZUVhc2VJbk91dEVsYXN0aWModDogbnVtYmVyKTogbnVtYmVyIHtcblx0Y29uc3QgYzYgPSAoMiAqIE1hdGguUEkpIC8gNC41XG5cblx0cmV0dXJuIHQgPT09IDBcblx0XHRcdD8gMFxuXHRcdFx0OiB0ID09PSAxXG5cdFx0XHQ/IDFcblx0XHRcdDogdCA8IDAuNVxuXHRcdFx0PyAtKE1hdGgucG93KDIsIDIwICogdCAtIDEwKSAqIE1hdGguc2luKCgyMCAqIHQgLSAxMS4xMjUpICogYzYpKSAvIDJcblx0XHRcdDogKE1hdGgucG93KDIsIC0yMCAqIHQgKyAxMCkgKiBNYXRoLnNpbigoMjAgKiB0IC0gMTEuMTI1KSAqIGM2KSkgLyAyICsgMVxufVxuXG5mdW5jdGlvbiBJbnRlcnBvbGF0ZUVhc2VJbkJvdW5jZSh0OiBudW1iZXIpOiBudW1iZXIge1xuXHRyZXR1cm4gMSAtIGJvdW5jZSgxIC0gdClcbn1cblxuZnVuY3Rpb24gSW50ZXJwb2xhdGVFYXNlT3V0Qm91bmNlKHQ6IG51bWJlcik6IG51bWJlciB7XG5cdHJldHVybiBib3VuY2UodClcbn1cblxuZnVuY3Rpb24gSW50ZXJwb2xhdGVFYXNlSW5PdXRCb3VuY2UodDogbnVtYmVyKTogbnVtYmVyIHtcblx0cmV0dXJuIHQgPCAwLjUgPyAoMSAtIGJvdW5jZSgxIC0gMiAqIHQpKSAvIDIgOiAoMSArIGJvdW5jZSgyICogdCAtIDEpKSAvIDJcbn1cblxuZnVuY3Rpb24gYm91bmNlKHg6IG51bWJlcikge1xuXHRjb25zdCBuMSA9IDcuNTYyNVxuXHRjb25zdCBkMSA9IDIuNzVcblxuXHRpZiAoeCA8IDEgLyBkMSkge1xuXHRcdHJldHVybiBuMSAqIHggKiB4XG5cdH0gZWxzZSBpZiAoeCA8IDIgLyBkMSkge1xuXHRcdHJldHVybiBuMSAqICh4IC09IDEuNSAvIGQxKSAqIHggKyAwLjc1XG5cdH0gZWxzZSBpZiAoeCA8IDIuNSAvIGQxKSB7XG5cdFx0cmV0dXJuIG4xICogKHggLT0gMi4yNSAvIGQxKSAqIHggKyAwLjkzNzVcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbjEgKiAoeCAtPSAyLjYyNSAvIGQxKSAqIHggKyAwLjk4NDM3NVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXRtdWxsUm9tU3BsaW5lKHBvaW50czogVmVjdG9yM1tdLCBuYlBvaW50czogbnVtYmVyLCBjbG9zZWQ/OiBib29sZWFuKTogVmVjdG9yM1tdIHtcblx0Y29uc3QgY2F0bXVsbFJvbSA9IG5ldyBBcnJheTxWZWN0b3IzPigpO1xuXHRjb25zdCBzdGVwID0gMS4wIC8gbmJQb2ludHM7XG5cdGxldCBhbW91bnQgPSAwLjA7XG5cdGlmIChjbG9zZWQpIHtcblx0XHRjb25zdCBwb2ludHNDb3VudCA9IHBvaW50cy5sZW5ndGg7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHNDb3VudDsgaSsrKSB7XG5cdFx0XHRhbW91bnQgPSAwO1xuXHRcdFx0Zm9yIChsZXQgYyA9IDA7IGMgPCBuYlBvaW50czsgYysrKSB7XG5cdFx0XHRcdGNhdG11bGxSb20ucHVzaChcblx0XHRcdFx0XHRWZWN0b3IzLmNhdG11bGxSb20ocG9pbnRzW2kgJSBwb2ludHNDb3VudF0sIHBvaW50c1soaSArIDEpICUgcG9pbnRzQ291bnRdLCBwb2ludHNbKGkgKyAyKSAlIHBvaW50c0NvdW50XSwgcG9pbnRzWyhpICsgMykgJSBwb2ludHNDb3VudF0sIGFtb3VudClcblx0XHRcdFx0KTtcblx0XHRcdFx0YW1vdW50ICs9IHN0ZXA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNhdG11bGxSb20ucHVzaChjYXRtdWxsUm9tWzBdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCB0b3RhbFBvaW50cyA9IG5ldyBBcnJheTxWZWN0b3IzPigpO1xuXHRcdHRvdGFsUG9pbnRzLnB1c2goVmVjdG9yMy5jbG9uZShwb2ludHNbMF0pKTtcblx0XHRBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b3RhbFBvaW50cywgcG9pbnRzKTtcblx0XHR0b3RhbFBvaW50cy5wdXNoKFZlY3RvcjMuY2xvbmUocG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSkpO1xuXHRcdGxldCBpID0gMDtcblx0XHRmb3IgKDsgaSA8IHRvdGFsUG9pbnRzLmxlbmd0aCAtIDM7IGkrKykge1xuXHRcdFx0YW1vdW50ID0gMDtcblx0XHRcdGZvciAobGV0IGMgPSAwOyBjIDwgbmJQb2ludHM7IGMrKykge1xuXHRcdFx0XHRjYXRtdWxsUm9tLnB1c2goVmVjdG9yMy5jYXRtdWxsUm9tKHRvdGFsUG9pbnRzW2ldLCB0b3RhbFBvaW50c1tpICsgMV0sIHRvdGFsUG9pbnRzW2kgKyAyXSwgdG90YWxQb2ludHNbaSArIDNdLCBhbW91bnQpKTtcblx0XHRcdFx0YW1vdW50ICs9IHN0ZXA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGktLTtcblx0XHRjYXRtdWxsUm9tLnB1c2goVmVjdG9yMy5jYXRtdWxsUm9tKHRvdGFsUG9pbnRzW2ldLCB0b3RhbFBvaW50c1tpICsgMV0sIHRvdGFsUG9pbnRzW2kgKyAyXSwgdG90YWxQb2ludHNbaSArIDNdLCBhbW91bnQpKTtcblx0fVxuXHRyZXR1cm4gY2F0bXVsbFJvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFyZUFBQkJJbnRlcnNlY3RpbmcoYU1pbjogVmVjdG9yMywgYU1heDogVmVjdG9yMywgYk1pbjogVmVjdG9yMywgYk1heDogVmVjdG9yMyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdGFNaW4ueCA8PSBiTWF4LnggJiZcblx0XHRhTWF4LnggPj0gYk1pbi54ICYmXG5cdFx0YU1pbi55IDw9IGJNYXgueSAmJlxuXHRcdGFNYXgueSA+PSBiTWluLnkgJiZcblx0XHRhTWluLnogPD0gYk1heC56ICYmXG5cdFx0YU1heC56ID49IGJNaW4uelxuXHQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmVTcGhlcmVzSW50ZXJzZWN0aW5nKGFQb3M6IFZlY3RvcjMsIGFSYWRpdXM6IG51bWJlciwgYlBvczogVmVjdG9yMywgYlJhZGl1czogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNxRGlzdCA9IFZlY3RvcjMuZGlzdGFuY2VTcXVhcmVkKGFQb3MsIGJQb3MpXG4gIGNvbnN0IHJhZGl1c1N1bSA9IGFSYWRpdXMgKyBiUmFkaXVzXG4gIHJldHVybiBzcURpc3QgPCByYWRpdXNTdW0gKiByYWRpdXNTdW1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFyZUFBQkJTcGhlcmVJbnRlcnNlY3RpbmcoYm94TWluOiBWZWN0b3IzLCBib3hNYXg6IFZlY3RvcjMsIHNwaGVyZVBvczogVmVjdG9yMywgc3BoZXJlUmFkaXVzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgbGV0IGRtaW4gPSAwXG5cbiAgaWYgKHNwaGVyZVBvcy54IDwgYm94TWluLngpXG4gICAgZG1pbiArPSAoYm94TWluLnggLSBzcGhlcmVQb3MueCkgKiAoYm94TWluLnggLSBzcGhlcmVQb3MueClcbiAgaWYgKHNwaGVyZVBvcy54ID4gYm94TWF4LngpXG4gICAgZG1pbiArPSAoc3BoZXJlUG9zLnggLSBib3hNYXgueCkgKiAoc3BoZXJlUG9zLnggLSBib3hNYXgueClcbiAgaWYgKHNwaGVyZVBvcy55IDwgYm94TWluLnkpXG4gICAgZG1pbiArPSAoYm94TWluLnkgLSBzcGhlcmVQb3MueSkgKiAoYm94TWluLnkgLSBzcGhlcmVQb3MueSlcbiAgaWYgKHNwaGVyZVBvcy55ID4gYm94TWF4LnkpXG4gICAgZG1pbiArPSAoc3BoZXJlUG9zLnkgLSBib3hNYXgueSkgKiAoc3BoZXJlUG9zLnkgLSBib3hNYXgueSlcbiAgaWYgKHNwaGVyZVBvcy56IDwgYm94TWluLnopXG4gICAgZG1pbiArPSAoYm94TWluLnogLSBzcGhlcmVQb3MueikgKiAoYm94TWluLnogLSBzcGhlcmVQb3MueilcbiAgaWYgKHNwaGVyZVBvcy56ID4gYm94TWF4LnopXG4gICAgZG1pbiArPSAoc3BoZXJlUG9zLnogLSBib3hNYXgueikgKiAoc3BoZXJlUG9zLnogLSBib3hNYXgueilcblxuICByZXR1cm4gZG1pbiA8IHNwaGVyZVJhZGl1cyAqIHNwaGVyZVJhZGl1c1xufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Entity, IEngine } from '@dcl/sdk/ecs';
|
|
2
|
+
import { Vector3 } from '@dcl/sdk/math';
|
|
3
|
+
export type Paths = ReturnType<typeof createPaths>;
|
|
4
|
+
export type OnFinishCallback = () => void;
|
|
5
|
+
export type OnPointReachedCallback = (pointIndex: number, point: Vector3, nextPoint: Vector3) => void;
|
|
6
|
+
declare function createPaths(targetEngine: IEngine): {
|
|
7
|
+
startStraightPath(entity: Entity, points: Vector3[], duration: number, faceDirection?: boolean, onFinishCallback?: OnFinishCallback, onPointReachedCallback?: OnPointReachedCallback): void;
|
|
8
|
+
startSmoothPath(entity: Entity, points: Vector3[], duration: number, segmentCount: number, faceDirection?: boolean, onFinishCallback?: OnFinishCallback, onPointReachedCallback?: OnPointReachedCallback): void;
|
|
9
|
+
stopPath(entity: Entity): void;
|
|
10
|
+
getOnFinishCallback(entity: Entity): OnFinishCallback | undefined;
|
|
11
|
+
};
|
|
12
|
+
export declare const paths: {
|
|
13
|
+
startStraightPath(entity: Entity, points: Vector3[], duration: number, faceDirection?: boolean, onFinishCallback?: OnFinishCallback, onPointReachedCallback?: OnPointReachedCallback): void;
|
|
14
|
+
startSmoothPath(entity: Entity, points: Vector3[], duration: number, segmentCount: number, faceDirection?: boolean, onFinishCallback?: OnFinishCallback, onPointReachedCallback?: OnPointReachedCallback): void;
|
|
15
|
+
stopPath(entity: Entity): void;
|
|
16
|
+
getOnFinishCallback(entity: Entity): OnFinishCallback | undefined;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { engine, EntityState, Schemas, Transform } from '@dcl/sdk/ecs';
|
|
2
|
+
import { Scalar, Vector3, Quaternion } from '@dcl/sdk/math';
|
|
3
|
+
import { createCatmullRomSpline } from './math';
|
|
4
|
+
function createPaths(targetEngine) {
|
|
5
|
+
const FollowPath = targetEngine.defineComponent('dcl.utils.FollowPath', {
|
|
6
|
+
points: Schemas.Array(Schemas.Vector3),
|
|
7
|
+
faceDirection: Schemas.Boolean,
|
|
8
|
+
speed: Schemas.Number,
|
|
9
|
+
normalizedTime: Schemas.Number,
|
|
10
|
+
currentIndex: Schemas.Number,
|
|
11
|
+
segmentTimes: Schemas.Array(Schemas.Number),
|
|
12
|
+
curveSegmentCount: Schemas.Number
|
|
13
|
+
});
|
|
14
|
+
const finishCbs = new Map();
|
|
15
|
+
const pointReachedCbs = new Map();
|
|
16
|
+
function unregisterEntity(entity) {
|
|
17
|
+
finishCbs.delete(entity);
|
|
18
|
+
pointReachedCbs.delete(entity);
|
|
19
|
+
FollowPath.deleteFrom(entity);
|
|
20
|
+
}
|
|
21
|
+
function system(dt) {
|
|
22
|
+
const deadPaths = [];
|
|
23
|
+
const pointReachedPaths = [];
|
|
24
|
+
for (const entity of finishCbs.keys()) {
|
|
25
|
+
if (targetEngine.getEntityState(entity) == EntityState.Removed || !FollowPath.has(entity)) {
|
|
26
|
+
unregisterEntity(entity);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const transform = Transform.getMutable(entity);
|
|
30
|
+
const path = FollowPath.getMutable(entity);
|
|
31
|
+
path.normalizedTime = Scalar.clamp(path.normalizedTime + dt * path.speed, 0, 1);
|
|
32
|
+
if (path.normalizedTime >= 1)
|
|
33
|
+
deadPaths.push(entity);
|
|
34
|
+
while (path.normalizedTime >= path.segmentTimes[path.currentIndex] &&
|
|
35
|
+
path.currentIndex < path.points.length - 1) {
|
|
36
|
+
if (path.faceDirection) {
|
|
37
|
+
const direction = Vector3.subtract(path.points[path.currentIndex + 1], path.points[path.currentIndex]);
|
|
38
|
+
transform.rotation = Quaternion.lookRotation(direction);
|
|
39
|
+
}
|
|
40
|
+
if (path.currentIndex > 0 && path.currentIndex % path.curveSegmentCount == 0) {
|
|
41
|
+
const pointIndex = path.currentIndex / path.curveSegmentCount;
|
|
42
|
+
const pointCoords = path.points[path.currentIndex];
|
|
43
|
+
const nextPointCoords = path.points[path.currentIndex + path.curveSegmentCount];
|
|
44
|
+
pointReachedPaths.push({ entity: entity, index: pointIndex, coords: pointCoords, nextCoords: nextPointCoords });
|
|
45
|
+
}
|
|
46
|
+
path.currentIndex += 1;
|
|
47
|
+
}
|
|
48
|
+
const timeDiff = path.segmentTimes[path.currentIndex] - path.segmentTimes[path.currentIndex - 1];
|
|
49
|
+
const coef = (path.segmentTimes[path.currentIndex] - path.normalizedTime) / timeDiff;
|
|
50
|
+
transform.position = Vector3.lerp(path.points[path.currentIndex], path.points[path.currentIndex - 1], coef);
|
|
51
|
+
}
|
|
52
|
+
for (const pointReached of pointReachedPaths) {
|
|
53
|
+
const callback = pointReachedCbs.get(pointReached.entity);
|
|
54
|
+
if (callback) {
|
|
55
|
+
callback(pointReached.index, pointReached.coords, pointReached.nextCoords);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const entity of deadPaths) {
|
|
59
|
+
const callback = finishCbs.get(entity);
|
|
60
|
+
unregisterEntity(entity);
|
|
61
|
+
if (callback)
|
|
62
|
+
callback();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
targetEngine.addSystem(system);
|
|
66
|
+
function startPath(entity, points, duration, faceDirection, curveSegmentCount, onFinishCallback, onPointReachedCallback) {
|
|
67
|
+
if (points.length < 2)
|
|
68
|
+
throw new Error('At least 2 points are required to form a path.');
|
|
69
|
+
if (duration == 0)
|
|
70
|
+
throw new Error('Path duration must not be zero');
|
|
71
|
+
if (curveSegmentCount) {
|
|
72
|
+
const loop = Vector3.equals(points[0], points[points.length - 1]);
|
|
73
|
+
if (loop) {
|
|
74
|
+
points.pop();
|
|
75
|
+
points.unshift(points.pop());
|
|
76
|
+
}
|
|
77
|
+
points = createCatmullRomSpline(points, curveSegmentCount, loop);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
curveSegmentCount = 1;
|
|
81
|
+
}
|
|
82
|
+
finishCbs.set(entity, onFinishCallback);
|
|
83
|
+
pointReachedCbs.set(entity, onPointReachedCallback);
|
|
84
|
+
let totalLength = 0;
|
|
85
|
+
const segmentLengths = [];
|
|
86
|
+
for (let i = 0; i < points.length - 1; i++) {
|
|
87
|
+
let sqDist = Vector3.distance(points[i], points[i + 1]);
|
|
88
|
+
totalLength += sqDist;
|
|
89
|
+
segmentLengths.push(sqDist);
|
|
90
|
+
}
|
|
91
|
+
const segmentTimes = [0];
|
|
92
|
+
for (let i = 0; i < segmentLengths.length; i++) {
|
|
93
|
+
segmentTimes.push(segmentLengths[i] / totalLength + segmentTimes[i]);
|
|
94
|
+
}
|
|
95
|
+
FollowPath.createOrReplace(entity, {
|
|
96
|
+
points: points,
|
|
97
|
+
segmentTimes: segmentTimes,
|
|
98
|
+
curveSegmentCount: curveSegmentCount,
|
|
99
|
+
speed: 1 / duration,
|
|
100
|
+
normalizedTime: 0,
|
|
101
|
+
currentIndex: 0,
|
|
102
|
+
faceDirection: faceDirection
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
startStraightPath(entity, points, duration, faceDirection, onFinishCallback, onPointReachedCallback) {
|
|
107
|
+
return startPath(entity, points, duration, faceDirection, 0, onFinishCallback, onPointReachedCallback);
|
|
108
|
+
},
|
|
109
|
+
startSmoothPath(entity, points, duration, segmentCount, faceDirection, onFinishCallback, onPointReachedCallback) {
|
|
110
|
+
if (segmentCount < 2 || !Number.isInteger(segmentCount))
|
|
111
|
+
throw new Error(`segmentCount must be an integer that is greater than 2, got: ${segmentCount}`);
|
|
112
|
+
return startPath(entity, points, duration, faceDirection, segmentCount, onFinishCallback, onPointReachedCallback);
|
|
113
|
+
},
|
|
114
|
+
stopPath(entity) {
|
|
115
|
+
unregisterEntity(entity);
|
|
116
|
+
},
|
|
117
|
+
getOnFinishCallback(entity) {
|
|
118
|
+
if (!finishCbs.has(entity))
|
|
119
|
+
throw new Error(`Entity ${entity} is not registered in triggers system`);
|
|
120
|
+
return finishCbs.get(entity);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export const paths = createPaths(engine);
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVUsV0FBVyxFQUFXLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQVEvQyxTQUFTLFdBQVcsQ0FBQyxZQUFxQjtJQUN4QyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUFFO1FBQ3RFLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDdEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQzlCLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTTtRQUNyQixjQUFjLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDOUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQzVCLFlBQVksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDM0MsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDbEMsQ0FBQyxDQUFBO0lBS0YsTUFBTSxTQUFTLEdBQXNCLElBQUksR0FBRyxFQUFFLENBQUE7SUFDOUMsTUFBTSxlQUFlLEdBQThCLElBQUksR0FBRyxFQUFFLENBQUE7SUFFNUQsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFjO1FBQ3RDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM5QixVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxTQUFT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O1FBQ0QsbUJBQW1CLENBQUMsTUFBYztZQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxNQUFNLHVDQUF1QyxDQUFDLENBQUE7WUFDMUUsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlCLENBQUM7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbmdpbmUsIEVudGl0eSwgRW50aXR5U3RhdGUsIElFbmdpbmUsIFNjaGVtYXMsIFRyYW5zZm9ybSB9IGZyb20gJ0BkY2wvc2RrL2VjcydcbmltcG9ydCB7IFNjYWxhciwgVmVjdG9yMywgUXVhdGVybmlvbiB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5pbXBvcnQgeyBjcmVhdGVDYXRtdWxsUm9tU3BsaW5lIH0gZnJvbSAnLi9tYXRoJ1xuXG5cbmV4cG9ydCB0eXBlIFBhdGhzID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlUGF0aHM+XG5cbmV4cG9ydCB0eXBlIE9uRmluaXNoQ2FsbGJhY2sgPSAoKSA9PiB2b2lkXG5leHBvcnQgdHlwZSBPblBvaW50UmVhY2hlZENhbGxiYWNrID0gKHBvaW50SW5kZXg6IG51bWJlciwgcG9pbnQ6IFZlY3RvcjMsIG5leHRQb2ludDogVmVjdG9yMykgPT4gdm9pZFxuXG5mdW5jdGlvbiBjcmVhdGVQYXRocyh0YXJnZXRFbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgRm9sbG93UGF0aCA9IHRhcmdldEVuZ2luZS5kZWZpbmVDb21wb25lbnQoJ2RjbC51dGlscy5Gb2xsb3dQYXRoJywge1xuICAgIHBvaW50czogU2NoZW1hcy5BcnJheShTY2hlbWFzLlZlY3RvcjMpLFxuICAgIGZhY2VEaXJlY3Rpb246IFNjaGVtYXMuQm9vbGVhbixcbiAgICBzcGVlZDogU2NoZW1hcy5OdW1iZXIsXG4gICAgbm9ybWFsaXplZFRpbWU6IFNjaGVtYXMuTnVtYmVyLFxuICAgIGN1cnJlbnRJbmRleDogU2NoZW1hcy5OdW1iZXIsXG4gICAgc2VnbWVudFRpbWVzOiBTY2hlbWFzLkFycmF5KFNjaGVtYXMuTnVtYmVyKSxcbiAgICBjdXJ2ZVNlZ21lbnRDb3VudDogU2NoZW1hcy5OdW1iZXJcbiAgfSlcblxuICB0eXBlIEZpbmlzaENhbGxiYWNrTWFwID0gTWFwPEVudGl0eSwgT25GaW5pc2hDYWxsYmFjayB8IHVuZGVmaW5lZD5cbiAgdHlwZSBPblBvaW50UmVhY2hlZENhbGxiYWNrTWFwID0gTWFwPEVudGl0eSwgT25Qb2ludFJlYWNoZWRDYWxsYmFjayB8IHVuZGVmaW5lZD5cblxuICBjb25zdCBmaW5pc2hDYnM6IEZpbmlzaENhbGxiYWNrTWFwID0gbmV3IE1hcCgpXG4gIGNvbnN0IHBvaW50UmVhY2hlZENiczogT25Qb2ludFJlYWNoZWRDYWxsYmFja01hcCA9IG5ldyBNYXAoKVxuXG4gIGZ1bmN0aW9uIHVucmVnaXN0ZXJFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBmaW5pc2hDYnMuZGVsZXRlKGVudGl0eSlcbiAgICBwb2ludFJlYWNoZWRDYnMuZGVsZXRlKGVudGl0eSlcbiAgICBGb2xsb3dQYXRoLmRlbGV0ZUZyb20oZW50aXR5KVxuICB9XG5cbiAgZnVuY3Rpb24gc3lzdGVtKGR0OiBudW1iZXIpIHtcbiAgICBjb25zdCBkZWFkUGF0aHMgPSBbXVxuICAgIGNvbnN0IHBvaW50UmVhY2hlZFBhdGhzID0gW11cblxuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGZpbmlzaENicy5rZXlzKCkpIHtcbiAgICAgIGlmICh0YXJnZXRFbmdpbmUuZ2V0RW50aXR5U3RhdGUoZW50aXR5KSA9PSBFbnRpdHlTdGF0ZS5SZW1vdmVkIHx8ICFGb2xsb3dQYXRoLmhhcyhlbnRpdHkpKSB7XG4gICAgICAgIHVucmVnaXN0ZXJFbnRpdHkoZW50aXR5KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShlbnRpdHkpXG4gICAgICBjb25zdCBwYXRoID0gRm9sbG93UGF0aC5nZXRNdXRhYmxlKGVudGl0eSlcbiAgICAgIHBhdGgubm9ybWFsaXplZFRpbWUgPSBTY2FsYXIuY2xhbXAocGF0aC5ub3JtYWxpemVkVGltZSArIGR0ICogcGF0aC5zcGVlZCwgMCwgMSlcbiAgICAgIGlmIChwYXRoLm5vcm1hbGl6ZWRUaW1lID49IDEpXG4gICAgICAgIGRlYWRQYXRocy5wdXNoKGVudGl0eSlcblxuICAgICAgd2hpbGUgKFxuICAgICAgICBwYXRoLm5vcm1hbGl6ZWRUaW1lID49IHBhdGguc2VnbWVudFRpbWVzW3BhdGguY3VycmVudEluZGV4XSAmJlxuICAgICAgICBwYXRoLmN1cnJlbnRJbmRleCA8IHBhdGgucG9pbnRzLmxlbmd0aCAtIDFcbiAgICAgICkge1xuICAgICAgICBpZiAocGF0aC5mYWNlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gVmVjdG9yMy5zdWJ0cmFjdChwYXRoLnBvaW50c1twYXRoLmN1cnJlbnRJbmRleCArIDFdLCBwYXRoLnBvaW50c1twYXRoLmN1cnJlbnRJbmRleF0pXG4gICAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gUXVhdGVybmlvbi5sb29rUm90YXRpb24oZGlyZWN0aW9uKVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoLmN1cnJlbnRJbmRleCA+IDAgJiYgcGF0aC5jdXJyZW50SW5kZXggJSBwYXRoLmN1cnZlU2VnbWVudENvdW50ID09IDApIHtcbiAgICAgICAgICBjb25zdCBwb2ludEluZGV4ID0gcGF0aC5jdXJyZW50SW5kZXggLyBwYXRoLmN1cnZlU2VnbWVudENvdW50XG4gICAgICAgICAgY29uc3QgcG9pbnRDb29yZHMgPSBwYXRoLnBvaW50c1twYXRoLmN1cnJlbnRJbmRleF1cbiAgICAgICAgICBjb25zdCBuZXh0UG9pbnRDb29yZHMgPSBwYXRoLnBvaW50c1twYXRoLmN1cnJlbnRJbmRleCArIHBhdGguY3VydmVTZWdtZW50Q291bnRdXG4gICAgICAgICAgcG9pbnRSZWFjaGVkUGF0aHMucHVzaCh7ZW50aXR5OiBlbnRpdHksIGluZGV4OiBwb2ludEluZGV4LCBjb29yZHM6IHBvaW50Q29vcmRzLCBuZXh0Q29vcmRzOiBuZXh0UG9pbnRDb29yZHN9KVxuICAgICAgICB9XG4gICAgICAgIHBhdGguY3VycmVudEluZGV4ICs9IDFcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGltZURpZmYgPSBwYXRoLnNlZ21lbnRUaW1lc1twYXRoLmN1cnJlbnRJbmRleF0gLSBwYXRoLnNlZ21lbnRUaW1lc1twYXRoLmN1cnJlbnRJbmRleCAtIDFdXG4gICAgICBjb25zdCBjb2VmID0gKHBhdGguc2VnbWVudFRpbWVzW3BhdGguY3VycmVudEluZGV4XSAtIHBhdGgubm9ybWFsaXplZFRpbWUpIC8gdGltZURpZmZcbiAgICAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IFZlY3RvcjMubGVycChwYXRoLnBvaW50c1twYXRoLmN1cnJlbnRJbmRleF0sIHBhdGgucG9pbnRzW3BhdGguY3VycmVudEluZGV4IC0gMV0sIGNvZWYpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwb2ludFJlYWNoZWQgb2YgcG9pbnRSZWFjaGVkUGF0aHMpIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcG9pbnRSZWFjaGVkQ2JzLmdldChwb2ludFJlYWNoZWQuZW50aXR5KVxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKHBvaW50UmVhY2hlZC5pbmRleCwgcG9pbnRSZWFjaGVkLmNvb3JkcywgcG9pbnRSZWFjaGVkLm5leHRDb29yZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZGVhZFBhdGhzKSB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IGZpbmlzaENicy5nZXQoZW50aXR5KVxuICAgICAgdW5yZWdpc3RlckVudGl0eShlbnRpdHkpXG4gICAgICBpZiAoY2FsbGJhY2spXG4gICAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICB0YXJnZXRFbmdpbmUuYWRkU3lzdGVtKHN5c3RlbSlcblxuICBmdW5jdGlvbiBzdGFydFBhdGgoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgcG9pbnRzOiBWZWN0b3IzW10sXG4gICAgZHVyYXRpb246IG51bWJlcixcbiAgICBmYWNlRGlyZWN0aW9uPzogYm9vbGVhbixcbiAgICBjdXJ2ZVNlZ21lbnRDb3VudD86IG51bWJlcixcbiAgICBvbkZpbmlzaENhbGxiYWNrPzogT25GaW5pc2hDYWxsYmFjayxcbiAgICBvblBvaW50UmVhY2hlZENhbGxiYWNrPzogT25Qb2ludFJlYWNoZWRDYWxsYmFja1xuICApIHtcbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0IGxlYXN0IDIgcG9pbnRzIGFyZSByZXF1aXJlZCB0byBmb3JtIGEgcGF0aC4nKVxuXG4gICAgaWYgKGR1cmF0aW9uID09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggZHVyYXRpb24gbXVzdCBub3QgYmUgemVybycpXG5cbiAgICBpZiAoY3VydmVTZWdtZW50Q291bnQpIHtcbiAgICAgIGNvbnN0IGxvb3AgPSBWZWN0b3IzLmVxdWFscyhwb2ludHNbMF0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pXG4gICAgICBpZiAobG9vcCkge1xuICAgICAgICBwb2ludHMucG9wKClcbiAgICAgICAgcG9pbnRzLnVuc2hpZnQocG9pbnRzLnBvcCgpISlcbiAgICAgIH1cbiAgICAgIHBvaW50cyA9IGNyZWF0ZUNhdG11bGxSb21TcGxpbmUocG9pbnRzLCBjdXJ2ZVNlZ21lbnRDb3VudCwgbG9vcClcbiAgICB9IGVsc2Uge1xuICAgICAgY3VydmVTZWdtZW50Q291bnQgPSAxXG4gICAgfVxuXG4gICAgZmluaXNoQ2JzLnNldChlbnRpdHksIG9uRmluaXNoQ2FsbGJhY2spXG4gICAgcG9pbnRSZWFjaGVkQ2JzLnNldChlbnRpdHksIG9uUG9pbnRSZWFjaGVkQ2FsbGJhY2spXG5cbiAgICBsZXQgdG90YWxMZW5ndGggPSAwXG4gICAgY29uc3Qgc2VnbWVudExlbmd0aHMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgbGV0IHNxRGlzdCA9IFZlY3RvcjMuZGlzdGFuY2UocG9pbnRzW2ldLCBwb2ludHNbaSArIDFdKVxuICAgICAgdG90YWxMZW5ndGggKz0gc3FEaXN0XG4gICAgICBzZWdtZW50TGVuZ3Rocy5wdXNoKHNxRGlzdClcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50VGltZXMgPSBbMF1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRMZW5ndGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzZWdtZW50VGltZXMucHVzaChzZWdtZW50TGVuZ3Roc1tpXSAvIHRvdGFsTGVuZ3RoICsgc2VnbWVudFRpbWVzW2ldKVxuICAgIH1cblxuICAgIEZvbGxvd1BhdGguY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgICAgcG9pbnRzOiBwb2ludHMsXG4gICAgICBzZWdtZW50VGltZXM6IHNlZ21lbnRUaW1lcyxcbiAgICAgIGN1cnZlU2VnbWVudENvdW50OiBjdXJ2ZVNlZ21lbnRDb3VudCxcbiAgICAgIHNwZWVkOiAxIC8gZHVyYXRpb24sXG4gICAgICBub3JtYWxpemVkVGltZTogMCxcbiAgICAgIGN1cnJlbnRJbmRleDogMCxcbiAgICAgIGZhY2VEaXJlY3Rpb246IGZhY2VEaXJlY3Rpb25cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0cmFpZ2h0UGF0aChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgcG9pbnRzOiBWZWN0b3IzW10sXG4gICAgICBkdXJhdGlvbjogbnVtYmVyLFxuICAgICAgZmFjZURpcmVjdGlvbj86IGJvb2xlYW4sXG4gICAgICBvbkZpbmlzaENhbGxiYWNrPzogT25GaW5pc2hDYWxsYmFjayxcbiAgICAgIG9uUG9pbnRSZWFjaGVkQ2FsbGJhY2s/OiBPblBvaW50UmVhY2hlZENhbGxiYWNrXG4gICAgKSB7XG4gICAgICByZXR1cm4gc3RhcnRQYXRoKGVudGl0eSwgcG9pbnRzLCBkdXJhdGlvbiwgZmFjZURpcmVjdGlvbiwgMCwgb25GaW5pc2hDYWxsYmFjaywgb25Qb2ludFJlYWNoZWRDYWxsYmFjaylcbiAgICB9LFxuICAgIHN0YXJ0U21vb3RoUGF0aChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgcG9pbnRzOiBWZWN0b3IzW10sXG4gICAgICBkdXJhdGlvbjogbnVtYmVyLFxuICAgICAgc2VnbWVudENvdW50OiBudW1iZXIsXG4gICAgICBmYWNlRGlyZWN0aW9uPzogYm9vbGVhbixcbiAgICAgIG9uRmluaXNoQ2FsbGJhY2s/OiBPbkZpbmlzaENhbGxiYWNrLFxuICAgICAgb25Qb2ludFJlYWNoZWRDYWxsYmFjaz86IE9uUG9pbnRSZWFjaGVkQ2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGlmIChzZWdtZW50Q291bnQgPCAyIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHNlZ21lbnRDb3VudCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2VnbWVudENvdW50IG11c3QgYmUgYW4gaW50ZWdlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiAyLCBnb3Q6ICR7c2VnbWVudENvdW50fWApXG4gICAgICByZXR1cm4gc3RhcnRQYXRoKGVudGl0eSwgcG9pbnRzLCBkdXJhdGlvbiwgZmFjZURpcmVjdGlvbiwgc2VnbWVudENvdW50LCBvbkZpbmlzaENhbGxiYWNrLCBvblBvaW50UmVhY2hlZENhbGxiYWNrKVxuICAgIH0sXG4gICAgc3RvcFBhdGgoZW50aXR5OiBFbnRpdHkpIHtcbiAgICAgIHVucmVnaXN0ZXJFbnRpdHkoZW50aXR5KVxuICAgIH0sXG4gICAgZ2V0T25GaW5pc2hDYWxsYmFjayhlbnRpdHk6IEVudGl0eSkge1xuICAgICAgaWYgKCFmaW5pc2hDYnMuaGFzKGVudGl0eSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW50aXR5ICR7ZW50aXR5fSBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0cmlnZ2VycyBzeXN0ZW1gKVxuICAgICAgcmV0dXJuIGZpbmlzaENicy5nZXQoZW50aXR5KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcGF0aHMgPSBjcmVhdGVQYXRocyhlbmdpbmUpXG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type DelayedHandle = {
|
|
2
|
+
id: string;
|
|
3
|
+
cancel: () => void;
|
|
4
|
+
};
|
|
5
|
+
export declare const delayedFunction: (cb: () => void, delayMs: number) => DelayedHandle;
|
|
6
|
+
export declare function clearDelayedFunction(handleOrId: DelayedHandle | string | undefined | null): void;
|
|
7
|
+
export declare function debugTriggers(): void;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { engine, MeshRenderer, TriggerArea, Material } from "@dcl/sdk/ecs";
|
|
2
|
+
import { Color4 } from "@dcl/sdk/math";
|
|
3
|
+
let __delayedId = 0;
|
|
4
|
+
export const delayedFunction = (cb, delayMs) => {
|
|
5
|
+
const id = `delayedFunction_${++__delayedId}`;
|
|
6
|
+
let timeMs = 0;
|
|
7
|
+
let cancelled = false;
|
|
8
|
+
const system = (dt) => {
|
|
9
|
+
if (cancelled) {
|
|
10
|
+
engine.removeSystem(id);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
timeMs += dt * 1000;
|
|
14
|
+
if (timeMs < delayMs)
|
|
15
|
+
return;
|
|
16
|
+
timeMs = 0;
|
|
17
|
+
engine.removeSystem(id);
|
|
18
|
+
if (!cancelled) {
|
|
19
|
+
cb && cb();
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
engine.addSystem(system, undefined, id);
|
|
23
|
+
const cancel = () => {
|
|
24
|
+
cancelled = true;
|
|
25
|
+
engine.removeSystem(id);
|
|
26
|
+
};
|
|
27
|
+
return { id, cancel };
|
|
28
|
+
};
|
|
29
|
+
export function clearDelayedFunction(handleOrId) {
|
|
30
|
+
if (!handleOrId)
|
|
31
|
+
return;
|
|
32
|
+
if (typeof handleOrId === 'string') {
|
|
33
|
+
engine.removeSystem(handleOrId);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
handleOrId.cancel();
|
|
37
|
+
}
|
|
38
|
+
export function debugTriggers() {
|
|
39
|
+
for (const [entity] of engine.getEntitiesWith(TriggerArea)) {
|
|
40
|
+
MeshRenderer.setSphere(entity);
|
|
41
|
+
Material.setPbrMaterial(entity, {
|
|
42
|
+
albedoColor: Color4.create(1, 0, 0, 0.3)
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxRSxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztBQU9wQixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxFQUFjLEVBQUUsT0FBZSxFQUFpQixFQUFFO0lBQzlFLE1BQU0sRUFBRSxHQUFHLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFBO0lBQzdDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztJQUV0QixNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFO1FBQzVCLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3ZCLE9BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxNQUFNLEdBQUcsT0FBTztZQUFFLE9BQU87UUFDN0IsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNYLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV4QyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDbEIsU0FBUyxHQUFHLElBQUksQ0FBQTtRQUNoQixNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3pCLENBQUMsQ0FBQTtJQUVELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUE7QUFDekIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQXFEO0lBQ3hGLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTTtJQUN2QixJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBRW5DLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDL0IsT0FBTTtJQUNSLENBQUM7SUFDRCxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUE7QUFDckIsQ0FBQztBQUlDLE1BQU0sVUFBVSxhQUFhO0lBRTNCLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlCLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQzlCLFdBQVcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztTQUN6QyxDQUFDLENBQUE7SUFDSixDQUFDO0FBSUgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuZ2luZSwgTWVzaFJlbmRlcmVyLCBUcmlnZ2VyQXJlYSwgTWF0ZXJpYWwgfSBmcm9tIFwiQGRjbC9zZGsvZWNzXCJcbmltcG9ydCB7IENvbG9yMywgQ29sb3I0IH0gZnJvbSBcIkBkY2wvc2RrL21hdGhcIjtcblxubGV0IF9fZGVsYXllZElkID0gMDtcblxuZXhwb3J0IHR5cGUgRGVsYXllZEhhbmRsZSA9IHtcbiAgaWQ6IHN0cmluZ1xuICBjYW5jZWw6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IGRlbGF5ZWRGdW5jdGlvbiA9IChjYjogKCkgPT4gdm9pZCwgZGVsYXlNczogbnVtYmVyKTogRGVsYXllZEhhbmRsZSA9PiB7XG4gICAgY29uc3QgaWQgPSBgZGVsYXllZEZ1bmN0aW9uXyR7KytfX2RlbGF5ZWRJZH1gXG4gICAgbGV0IHRpbWVNcyA9IDA7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3lzdGVtID0gKGR0OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgZW5naW5lLnJlbW92ZVN5c3RlbShpZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aW1lTXMgKz0gZHQgKiAxMDAwO1xuICAgICAgaWYgKHRpbWVNcyA8IGRlbGF5TXMpIHJldHVybjtcbiAgICAgIHRpbWVNcyA9IDA7XG4gICAgICBlbmdpbmUucmVtb3ZlU3lzdGVtKGlkKTtcbiAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgIGNiICYmIGNiKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZW5naW5lLmFkZFN5c3RlbShzeXN0ZW0sIHVuZGVmaW5lZCwgaWQpO1xuXG4gICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgZW5naW5lLnJlbW92ZVN5c3RlbShpZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBpZCwgY2FuY2VsIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRGVsYXllZEZ1bmN0aW9uKGhhbmRsZU9ySWQ6IERlbGF5ZWRIYW5kbGUgfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gIGlmICghaGFuZGxlT3JJZCkgcmV0dXJuXG4gIGlmICh0eXBlb2YgaGFuZGxlT3JJZCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBjYW5jZWwgYnkgaWQvbmFtZVxuICAgIGVuZ2luZS5yZW1vdmVTeXN0ZW0oaGFuZGxlT3JJZClcbiAgICByZXR1cm5cbiAgfVxuICBoYW5kbGVPcklkLmNhbmNlbCgpXG59XG5cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBkZWJ1Z1RyaWdnZXJzKCl7XG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHldIG9mIGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoVHJpZ2dlckFyZWEpKSB7XG4gICAgICBNZXNoUmVuZGVyZXIuc2V0U3BoZXJlKGVudGl0eSlcbiAgICAgIE1hdGVyaWFsLnNldFBick1hdGVyaWFsKGVudGl0eSwge1xuICAgICAgICBhbGJlZG9Db2xvcjogQ29sb3I0LmNyZWF0ZSgxLCAwLCAwLCAwLjMpXG4gICAgICB9KVxuICAgIH1cblxuXG5cbiAgfSJdfQ==
|