@discordeno/gateway 19.0.0-next.a1ff90f → 19.0.0-next.c1efa83
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/dist/Shard.d.ts +4 -2
- package/dist/Shard.d.ts.map +1 -1
- package/dist/Shard.js +2 -2
- package/dist/manager.d.ts +1 -1
- package/dist/manager.js +2 -2
- package/package.json +5 -4
package/dist/Shard.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/// <reference types="ws" />
|
|
2
|
+
import WebSocket from 'isomorphic-ws';
|
|
1
3
|
import type { DiscordGatewayPayload } from '@discordeno/types';
|
|
2
4
|
import type { BotStatusUpdate, ShardEvents, ShardGatewayConfig, ShardHeart, ShardSocketRequest } from './types.js';
|
|
3
5
|
import { ShardState } from './types.js';
|
|
@@ -53,9 +55,9 @@ export declare class Shard {
|
|
|
53
55
|
/** Shutdown the this. Forcefully disconnect the shard from Discord. The shard may not attempt to reconnect with Discord. */
|
|
54
56
|
shutdown(): Promise<void>;
|
|
55
57
|
/** Handle a gateway connection close. */
|
|
56
|
-
handleClose(close: CloseEvent): Promise<void>;
|
|
58
|
+
handleClose(close: WebSocket.CloseEvent): Promise<void>;
|
|
57
59
|
/** Handle an incoming gateway message. */
|
|
58
|
-
handleMessage(message: MessageEvent): Promise<void>;
|
|
60
|
+
handleMessage(message: WebSocket.MessageEvent): Promise<void>;
|
|
59
61
|
/**
|
|
60
62
|
* Override in order to make the shards presence.
|
|
61
63
|
* async in case devs create the presence based on eg. database values.
|
package/dist/Shard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../src/Shard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAA8B,MAAM,mBAAmB,CAAA;AAI1F,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAClH,OAAO,EAAyB,UAAU,EAAE,MAAM,YAAY,CAAA;AAE9D,qBAAa,KAAK;IAChB,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,qFAAqF;IACrF,UAAU,EAAE,kBAAkB,CAAA;IAC9B,kDAAkD;IAClD,KAAK,EAAE,UAAU,CAAA;IACjB,4HAA4H;IAC5H,2BAA2B,EAAE,MAAM,CAAM;IACzC,4CAA4C;IAC5C,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAO;IAC5C,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAQ;IACtC,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iFAAiF;IACjF,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,0CAA0C;IAC1C,KAAK,aAAqB;IAC1B,mFAAmF;IACnF,gBAAgB,EAAE,MAAM,CAAK;IAC7B,wCAAwC;IACxC,MAAM,EAAE,WAAW,CAAK;IACxB,qGAAqG;IACrG,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,CAAK;IACnD,mFAAmF;IACnF,QAAQ,yDAA8D,qBAAqB,KAAK,IAAI,EAAG;IACvG,oHAAoH;IACpH,MAAM,0CAIJ;gBAEW,OAAO,EAAE,kBAAkB;IAWxC,qEAAqE;IACrE,IAAI,aAAa,IAAK,kBAAkB,CAEvC;IAED,6JAA6J;IAC7J,qBAAqB,IAAK,MAAM;IAO1B,YAAY,CAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzD,yDAAyD;IACzD,KAAK,CAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAM1C,kHAAkH;IAC5G,OAAO,IAAK,OAAO,CAAC,KAAK,CAAC;IA2ChC,4GAA4G;IACtG,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;IAmDhC,iEAAiE;IACjE,MAAM,IAAK,OAAO;IAIlB,sEAAsE;IAChE,MAAM,IAAK,OAAO,CAAC,IAAI,CAAC;IAiD9B;;OAEG;IACG,IAAI,CAAE,OAAO,EAAE,kBAAkB,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7E,4HAA4H;IACtH,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;IAKhC,yCAAyC;IACnC,WAAW,CAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../src/Shard.ts"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,KAAK,EAAE,qBAAqB,EAA8B,MAAM,mBAAmB,CAAA;AAI1F,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAClH,OAAO,EAAyB,UAAU,EAAE,MAAM,YAAY,CAAA;AAE9D,qBAAa,KAAK;IAChB,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,qFAAqF;IACrF,UAAU,EAAE,kBAAkB,CAAA;IAC9B,kDAAkD;IAClD,KAAK,EAAE,UAAU,CAAA;IACjB,4HAA4H;IAC5H,2BAA2B,EAAE,MAAM,CAAM;IACzC,4CAA4C;IAC5C,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAO;IAC5C,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAQ;IACtC,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iFAAiF;IACjF,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,0CAA0C;IAC1C,KAAK,aAAqB;IAC1B,mFAAmF;IACnF,gBAAgB,EAAE,MAAM,CAAK;IAC7B,wCAAwC;IACxC,MAAM,EAAE,WAAW,CAAK;IACxB,qGAAqG;IACrG,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,CAAK;IACnD,mFAAmF;IACnF,QAAQ,yDAA8D,qBAAqB,KAAK,IAAI,EAAG;IACvG,oHAAoH;IACpH,MAAM,0CAIJ;gBAEW,OAAO,EAAE,kBAAkB;IAWxC,qEAAqE;IACrE,IAAI,aAAa,IAAK,kBAAkB,CAEvC;IAED,6JAA6J;IAC7J,qBAAqB,IAAK,MAAM;IAO1B,YAAY,CAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzD,yDAAyD;IACzD,KAAK,CAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAM1C,kHAAkH;IAC5G,OAAO,IAAK,OAAO,CAAC,KAAK,CAAC;IA2ChC,4GAA4G;IACtG,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;IAmDhC,iEAAiE;IACjE,MAAM,IAAK,OAAO;IAIlB,sEAAsE;IAChE,MAAM,IAAK,OAAO,CAAC,IAAI,CAAC;IAiD9B;;OAEG;IACG,IAAI,CAAE,OAAO,EAAE,kBAAkB,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7E,4HAA4H;IACtH,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;IAKhC,yCAAyC;IACnC,WAAW,CAAE,KAAK,EAAE,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA6D9D,0CAA0C;IACpC,aAAa,CAAE,OAAO,EAAE,SAAS,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAiJpE;;;;OAIG;IACG,YAAY,IAAK,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAK3D,uNAAuN;IACjN,eAAe,IAAK,OAAO,CAAC,IAAI,CAAC;IAKvC,4EAA4E;IAC5E,iBAAiB,CAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IA6D1C,kDAAkD;IAClD,gBAAgB,IAAK,IAAI;CAO1B;AAED,MAAM,WAAW,kBAAkB;IACjC,mBAAmB;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,6BAA6B;IAC7B,UAAU,EAAE,kBAAkB,CAAA;IAC9B,kDAAkD;IAClD,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,eAAe,KAAK,CAAA"}
|
package/dist/Shard.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{GatewayCloseEventCodes as
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERpc2NvcmRHYXRld2F5UGF5bG9hZCwgRGlzY29yZEhlbGxvLCBEaXNjb3JkUmVhZHkgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBjYW1lbGl6ZSwgY3JlYXRlTGVha3lCdWNrZXQsIGRlbGF5IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBpbmZsYXRlU3luYyB9IGZyb20gJ3psaWInXG5pbXBvcnQgdHlwZSB7IEJvdFN0YXR1c1VwZGF0ZSwgU2hhcmRFdmVudHMsIFNoYXJkR2F0ZXdheUNvbmZpZywgU2hhcmRIZWFydCwgU2hhcmRTb2NrZXRSZXF1ZXN0IH0gZnJvbSAnLi90eXBlcy5qcydcbmltcG9ydCB7IFNoYXJkU29ja2V0Q2xvc2VDb2RlcywgU2hhcmRTdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjbGFzcyBTaGFyZCB7XG4gIC8qKiBUaGUgaWQgb2YgdGhlIHNoYXJkICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGNvbmZpZyBkZXRhaWxzIHRoYXQgdGhpcyBzaGFyZCB3aWxsIHVzZWQgdG8gY29ubmVjdCB0byBkaXNjb3JkLiAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoaXMgY29udGFpbnMgYWxsIHRoZSBoZWFydGJlYXQgaW5mb3JtYXRpb24gKi9cbiAgaGVhcnQ6IFNoYXJkSGVhcnRcbiAgLyoqIFRoZSBtYXhpbXVtIG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBiZSBzZW5kIHRvIGRpc2NvcmQgcGVyIHJhdGUgbGltaXQgdGljay4gVHlwaWNhbGx5IHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAqL1xuICBtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2s6IG51bWJlciA9IDEyMFxuICAvKiogVGhlIHByZXZpb3VzIHBheWxvYWQgc2VxdWVuY2UgbnVtYmVyLiAqL1xuICBwcmV2aW91c1NlcXVlbmNlTnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAvKiogSW4gd2hpY2ggaW50ZXJ2YWwgKGluIG1pbGxpc2Vjb25kcykgdGhlIGdhdGV3YXkgcmVzZXRzIGl0J3MgcmF0ZSBsaW1pdC4gKi9cbiAgcmF0ZUxpbWl0UmVzZXRJbnRlcnZhbDogbnVtYmVyID0gNjAwMDBcbiAgLyoqIEN1cnJlbnQgc2Vzc2lvbiBpZCBvZiB0aGUgc2hhcmQgaWYgcHJlc2VudC4gKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nXG4gIC8qKiBUaGlzIGNvbnRhaW5zIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB0byBEaXNjb3JkLCBpZiBjdXJyZW50bHkgY29ubmVjdGVkLiAqL1xuICBzb2NrZXQ/OiBXZWJTb2NrZXRcbiAgLyoqIEN1cnJlbnQgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHRoaXMuICovXG4gIHN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gIC8qKiBUaGUgdXJsIHByb3ZpZGVkIGJ5IGRpc2NvcmQgdG8gdXNlIHdoZW4gcmVzdW1pbmcgYSBjb25uZWN0aW9uIGZvciB0aGlzIHRoaXMuICovXG4gIHJlc3VtZUdhdGV3YXlVcmw6IHN0cmluZyA9ICcnXG4gIC8qKiBUaGUgc2hhcmQgcmVsYXRlZCBldmVudCBoYW5kbGVycy4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50cyA9IHt9XG4gIC8qKiBDYWNoZSBmb3IgcGVuZGluZyBnYXRld2F5IHJlcXVlc3RzIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gc2VuZCB3aGlsZSB0aGUgZ2F0ZXdheSB3ZW50IG9mZmxpbmUuICovXG4gIG9mZmxpbmVTZW5kUXVldWU6IEFycmF5PChfPzogdW5rbm93bikgPT4gdm9pZD4gPSBbXVxuICAvKiogUmVzb2x2ZSBpbnRlcm5hbCB3YWl0aW5nIHN0YXRlcy4gTWFwcGVkIGJ5IFNlbGVjdGVkRXZlbnRzID0+IFJlc29sdmVGdW5jdGlvbiAqL1xuICByZXNvbHZlcyA9IG5ldyBNYXA8J1JFQURZJyB8ICdSRVNVTUVEJyB8ICdJTlZBTElEX1NFU1NJT04nLCAocGF5bG9hZDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkPigpXG4gIC8qKiBTaGFyZCBidWNrZXQuIE9ubHkgYWNjZXNzIHRoaXMgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBCdWNrZXQgZm9yIGhhbmRsaW5nIHNoYXJkIHJlcXVlc3QgcmF0ZSBsaW1pdHMuICovXG4gIGJ1Y2tldCA9IGNyZWF0ZUxlYWt5QnVja2V0KHtcbiAgICBtYXg6IDEyMCxcbiAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgcmVmaWxsQW1vdW50OiAxMjBcbiAgfSlcblxuICBjb25zdHJ1Y3RvciAob3B0aW9uczogU2hhcmRDcmVhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWRcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBvcHRpb25zLmNvbm5lY3Rpb25cbiAgICB0aGlzLmV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzXG5cbiAgICB0aGlzLmhlYXJ0ID0ge1xuICAgICAgYWNrbm93bGVkZ2VkOiBmYWxzZSxcbiAgICAgIGludGVydmFsOiA0NTAwMFxuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgZ2F0ZXdheSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkLiAqL1xuICBnZXQgZ2F0ZXdheUNvbmZpZyAoKTogU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uXG4gIH1cblxuICAvKiogQ2FsY3VsYXRlIHRoZSBhbW91bnQgb2YgcmVxdWVzdHMgd2hpY2ggY2FuIHNhZmVseSBiZSBtYWRlIHBlciByYXRlIGxpbWl0IGludGVydmFsLCBiZWZvcmUgdGhlIGdhdGV3YXkgZ2V0cyBkaXNjb25uZWN0ZWQgZHVlIHRvIGFuIGV4Y2VlZGVkIHJhdGUgbGltaXQuICovXG4gIGNhbGN1bGF0ZVNhZmVSZXF1ZXN0cyAoKTogbnVtYmVyIHtcbiAgICAvLyAqIDIgYWRkcyBleHRyYSBzYWZldHkgbGF5ZXIgZm9yIGRpc2NvcmRzIE9QIDEgcmVxdWVzdHMgdGhhdCB3ZSBuZWVkIHRvIHJlc3BvbmQgdG9cbiAgICBjb25zdCBzYWZlUmVxdWVzdHMgPSB0aGlzLm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayAtIE1hdGguY2VpbCh0aGlzLnJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwgLyB0aGlzLmhlYXJ0LmludGVydmFsKSAqIDJcblxuICAgIHJldHVybiBzYWZlUmVxdWVzdHMgPCAwID8gMCA6IHNhZmVSZXF1ZXN0c1xuICB9XG5cbiAgYXN5bmMgY2hlY2tPZmZsaW5lIChoaWdoUHJpb3JpdHk6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIC8vIEhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyBnZXQgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuXG4gICAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS51bnNoaWZ0KHJlc29sdmUpXG4gICAgICAgIGVsc2UgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLnB1c2gocmVzb2x2ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBzb2NrZXQgY29ubmVjdGlvbiB0byBkaXNjb3JkIGlmIHByZXNlbnQuICovXG4gIGNsb3NlIChjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikgcmV0dXJuXG5cbiAgICByZXR1cm4gdGhpcy5zb2NrZXQ/LmNsb3NlKGNvZGUsIHJlYXNvbilcbiAgfVxuXG4gIC8qKiBDb25uZWN0IHRoZSBzaGFyZCB3aXRoIHRoZSBnYXRld2F5IGFuZCBzdGFydCBoZWFydGJlYXRpbmcuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBjb25uZWN0ICgpOiBQcm9taXNlPFNoYXJkPiB7XG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBDb25uZWN0aW5nYCBzdGF0ZSxcbiAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0aW5nXG4gICAgfVxuICAgIHRoaXMuZXZlbnRzLmNvbm5lY3Rpbmc/Lih0aGlzKVxuXG4gICAgbGV0IHVybCA9IG5ldyBVUkwodGhpcy5nYXRld2F5Q29uZmlnLnVybClcbiAgICAvLyBJZiBub3QgY29ubmVjdGluZyB0byBhIHByb3h5IGJ1dCBkaXJlY3RseSB0byBkaXNjb3JkIG5lZWQgdG8gaGFuZGxlIHJlc3VtaW5nXG4gICAgaWYgKHVybC5vcmlnaW4gPT09ICd3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2cnKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICB1cmwgPSBuZXcgVVJMKHRoaXMucmVzdW1lR2F0ZXdheVVybClcbiAgICAgIH1cbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd2JywgdGhpcy5nYXRld2F5Q29uZmlnLnZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdlbmNvZGluZycsICdqc29uJylcbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVybC50b1N0cmluZygpKVxuXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcblxuICAgIC8vIFRPRE86IHByb3BlciBldmVudCBoYW5kbGluZ1xuICAgIHNvY2tldC5vbmVycm9yID0gKGV2ZW50KSA9PiBjb25zb2xlLmxvZyh7IGVycm9yOiBldmVudCB9KVxuXG4gICAgc29ja2V0Lm9uY2xvc2UgPSBhc3luYyAoZXZlbnQpID0+IGF3YWl0IHRoaXMuaGFuZGxlQ2xvc2UoZXZlbnQpXG5cbiAgICBzb2NrZXQub25tZXNzYWdlID0gYXN5bmMgKG1lc3NhZ2UpID0+IGF3YWl0IHRoaXMuaGFuZGxlTWVzc2FnZShtZXNzYWdlKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQgdG8gYFVuaWRlbnRpZmllZGAgc3RhdGUsXG4gICAgICAgIC8vIGlmIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QgZG9lcyBub3QgY29tZSBmcm9tIGFuIGlkZW50aWZ5IG9yIHJlc3VtZSBhY3Rpb24uXG4gICAgICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuVW5pZGVudGlmaWVkXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXNvbHZlKHRoaXMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBJZGVudGlmeSB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuIElmIG5vdCBjb25uZWN0ZWQsIHRoaXMgd2lsbCBhbHNvIGNvbm5lY3QgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBpZGVudGlmeSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQSBuZXcgaWRlbnRpZnkgaGFzIGJlZW4gcmVxdWVzdGVkIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGFscmVhZHkgYSBjb25uZWN0aW9uIG9wZW4uXG4gICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gY2xvc2UgdGhlIG9sZCBjb25uZWN0aW9uIGFuZCBoZWFydGJlYXRpbmcgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgY29uc29sZS5sb2coYENMT1NJTkcgRVhJU1RJTkcgU0hBUkQ6ICMke3RoaXMuaWR9YClcbiAgICAgIHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmcsICdSZS1pZGVudGlmeWluZyBjbG9zdXJlIG9mIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICB0aGlzLmV2ZW50cy5pZGVudGlmeWluZz8uKHRoaXMpXG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG4gICAgfVxuXG4gICAgLy8gV2FpdCB1bnRpbCBhbiBpZGVudGlmeSBpcyBmcmVlIGZvciB0aGlzIHRoaXMuXG4gICAgYXdhaXQgdGhpcy5yZXF1ZXN0SWRlbnRpZnkoKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSWRlbnRpZnksXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MsXG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5nYXRld2F5Q29uZmlnLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW50ZW50czogdGhpcy5nYXRld2F5Q29uZmlnLmludGVudHMsXG4gICAgICAgICAgc2hhcmQ6IFt0aGlzLmlkLCB0aGlzLmdhdGV3YXlDb25maWcudG90YWxTaGFyZHNdLFxuICAgICAgICAgIHByZXNlbmNlOiBhd2FpdCB0aGlzLm1ha2VQcmVzZW5jZT8uKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdSRUFEWScsICgpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudHMuaWRlbnRpZmllZD8uKHRoaXMpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICAgIC8vIFdoZW4gaWRlbnRpZnlpbmcgdG9vIGZhc3QsXG4gICAgICAvLyBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkLlxuICAgICAgLy8gVGhpcyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgdGhvdWdoIGFuZCB0aGUgc2hhcmQgc3RhcnRzIGEgbmV3IGlkZW50aWZ5IGFjdGlvbi5cbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIENoZWNrIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gdG8gRGlzY29yZCBpcyBjdXJyZW50bHkgb3Blbi4gKi9cbiAgaXNPcGVuICgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zb2NrZXQ/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOXG4gIH1cblxuICAvKiogQXR0ZW1wdCB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNoYXJkcyBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIGFzeW5jIHJlc3VtZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gICBnYXRld2F5LmRlYnVnKFwiR1cgUkVTVU1JTkdcIiwgeyBzaGFyZElkIH0pO1xuICAgIC8vIEl0IGhhcyBiZWVuIHJlcXVlc3RlZCB0byByZXN1bWUgdGhlIFNoYXJkcyBzZXNzaW9uLlxuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgc2hhcmQgaXMgc3RpbGwgY29ubmVjdGVkIHdpdGggRGlzY29yZCdzIGdhdGV3YXkgdGhlcmVmb3JlIHdlIG5lZWQgdG8gZm9yY2VmdWxseSBjbG9zZSBpdC5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24sICdSZWNvbm5lY3RpbmcgdGhlIHNoYXJkLCBjbG9zaW5nIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgLy8gU2hhcmQgaGFzIG5ldmVyIGlkZW50aWZpZWQsIHNvIHdlIGNhbm5vdCByZXN1bWUuXG4gICAgaWYgKCF0aGlzLnNlc3Npb25JZCkge1xuICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcbiAgICAgIC8vICAgXCJHVyBERUJVR1wiLFxuICAgICAgLy8gICBgW0Vycm9yXSBUcnlpbmcgdG8gcmVzdW1lIGEgc2hhcmQgKGlkOiAke3NoYXJkSWR9KSB0aGF0IHdhcyBub3QgZmlyc3QgaWRlbnRpZmllZC5gLFxuICAgICAgLy8gKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuXG4gICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYFtTSEFSRF0gVHJ5aW5nIHRvIHJlc3VtZSBhIHNoYXJkIChpZDogJHt0aGlzLmlkfSkgd2hpY2ggd2FzIG5ldmVyIGlkZW50aWZpZWRgKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5SZXN1bWluZ1xuXG4gICAgLy8gQmVmb3JlIHdlIGNhbiByZXN1bWUsIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheS5cbiAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuUmVzdW1lLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgdG9rZW46IGBCb3QgJHt0aGlzLmdhdGV3YXlDb25maWcudG9rZW59YCxcbiAgICAgICAgICBzZXNzaW9uX2lkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICBzZXE6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlciA/PyAwXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVTVU1FRCcsICgpID0+IHJlc29sdmUoKSlcbiAgICAgIC8vIElmIGl0IGlzIGF0dGVtcHRlZCB0byByZXN1bWUgd2l0aCBhbiBpbnZhbGlkIHNlc3Npb24gaWQsXG4gICAgICAvLyBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkXG4gICAgICAvLyBOb3QgZXJyb3JpbmcgaGVyZSBzaW5jZSBpdCBpcyBlYXN5IHRoYXQgdGhpcyBoYXBwZW5zLCBhbHNvIGl0IHdvdWxkIGJlIG5vdCBjYXRjaGFibGVcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRVNVTUVEJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogU2VuZCBhIG1lc3NhZ2UgdG8gRGlzY29yZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaFByaW9yaXR5PWZhbHNlXSAtIFdoZXRoZXIgdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW5kIGFzYXAuXG4gICAqL1xuICBhc3luYyBzZW5kIChtZXNzYWdlOiBTaGFyZFNvY2tldFJlcXVlc3QsIGhpZ2hQcmlvcml0eSA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQmVmb3JlIGFjcXVpcmluZyBhIHRva2VuIGZyb20gdGhlIGJ1Y2tldCwgY2hlY2sgd2hldGhlciB0aGUgc2hhcmQgaXMgY3VycmVudGx5IG9mZmxpbmUgb3Igbm90LlxuICAgIC8vIEVsc2UgYnVja2V0IGFuZCB0b2tlbiB3YWl0IHRpbWUganVzdCBnZXQgd2FzdGVkLlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIGF3YWl0IHRoaXMuYnVja2V0LmFjcXVpcmUoMSwgaGlnaFByaW9yaXR5KVxuXG4gICAgLy8gSXQncyBwb3NzaWJsZSwgdGhhdCB0aGUgc2hhcmQgd2VudCBvZmZsaW5lIGFmdGVyIGEgdG9rZW4gaGFzIGJlZW4gYWNxdWlyZWQgZnJvbSB0aGUgYnVja2V0LlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIHRoaXMuc29ja2V0Py5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKVxuICB9XG5cbiAgLyoqIFNodXRkb3duIHRoZSB0aGlzLiBGb3JjZWZ1bGx5IGRpc2Nvbm5lY3QgdGhlIHNoYXJkIGZyb20gRGlzY29yZC4gVGhlIHNoYXJkIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgd2l0aCBEaXNjb3JkLiAqL1xuICBhc3luYyBzaHV0ZG93biAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd24sICdTaGFyZCBzaHV0dGluZyBkb3duLicpXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZS4gKi9cbiAgYXN5bmMgaGFuZGxlQ2xvc2UgKGNsb3NlOiBDbG9zZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gICBnYXRld2F5LmRlYnVnKFwiR1cgQ0xPU0VEXCIsIHsgc2hhcmRJZCwgcGF5bG9hZDogZXZlbnQgfSk7XG5cbiAgICB0aGlzLnN0b3BIZWFydGJlYXRpbmcoKVxuXG4gICAgc3dpdGNoIChjbG9zZS5jb2RlKSB7XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5UZXN0aW5nRmluaXNoZWQ6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gT24gdGhlc2UgY29kZXMgYSBtYW51YWwgc3RhcnQgd2lsbCBiZSBkb25lLlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd246XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZUlkZW50aWZ5aW5nOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzaGFyZGVkOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb246XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5ab21iaWVkQ29ubmVjdGlvbjoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWRcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICAvLyBnYXRld2F5LmRlYnVnKFwiR1cgQ0xPU0VEX1JFQ09OTkVDVFwiLCB7IHNoYXJkSWQsIHBheWxvYWQ6IGV2ZW50IH0pO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIEdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZXMgd2hpY2ggcmVxdWlyZSBhIG5ldyBpZGVudGlmeS5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Vbmtub3duT3Bjb2RlOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLk5vdEF1dGhlbnRpY2F0ZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuSW52YWxpZFNlcTpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5SYXRlTGltaXRlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5TZXNzaW9uVGltZWRPdXQ6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pZGVudGlmeSgpXG4gICAgICB9XG4gICAgICAvLyBXaGVuIHRoZXNlIGNvZGVzIGFyZSByZWNlaXZlZCBzb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcuXG4gICAgICAvLyBPbiB0aG9zZSB3ZSBjYW5ub3Qgc3RhcnQgYSByZWNvbm5lY3QgYXR0ZW1wdC5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5BdXRoZW50aWNhdGlvbkZhaWxlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkU2hhcmQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuU2hhcmRpbmdSZXF1aXJlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkQXBpVmVyc2lvbjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkSW50ZW50czpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5EaXNhbGxvd2VkSW50ZW50czoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNsb3NlLnJlYXNvbiB8fCAnRGlzY29yZCBnYXZlIG5vIHJlYXNvbiEgR0chIFlvdSBicm9rZSBEaXNjb3JkIScpXG4gICAgICB9XG4gICAgICAvLyBHYXRld2F5IGNvbm5lY3Rpb24gY2xvc2VzIG9uIHdoaWNoIGEgcmVzdW1lIGlzIGFsbG93ZWQuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuVW5rbm93bkVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkRlY29kZUVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkFscmVhZHlBdXRoZW50aWNhdGVkOlxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5SZXN1bWluZ1xuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc3VtZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhbiBpbmNvbWluZyBnYXRld2F5IG1lc3NhZ2UuICovXG4gIGFzeW5jIGhhbmRsZU1lc3NhZ2UgKG1lc3NhZ2U6IE1lc3NhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBwcmVQcm9jZXNzTWVzc2FnZSA9IG1lc3NhZ2UuZGF0YVxuXG4gICAgLy8gSWYgbWVzc2FnZSBjb21wcmVzc2lvbiBpcyBlbmFibGVkLFxuICAgIC8vIERpc2NvcmQgbWlnaHQgc2VuZCB6bGliIGNvbXByZXNzZWQgcGF5bG9hZHMuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy5jb21wcmVzcyAmJiBwcmVQcm9jZXNzTWVzc2FnZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgIHByZVByb2Nlc3NNZXNzYWdlID0gaW5mbGF0ZVN5bmMoYXdhaXQgcHJlUHJvY2Vzc01lc3NhZ2UuYXJyYXlCdWZmZXIoKSkudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIC8vIFNhZmVndWFyZCBpbmNhc2UgZGVjb21wcmVzc2lvbiBmYWlsZWQgdG8gbWFrZSBhIHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByZVByb2Nlc3NNZXNzYWdlICE9PSAnc3RyaW5nJykgcmV0dXJuXG5cbiAgICBjb25zdCBtZXNzYWdlRGF0YSA9IEpTT04ucGFyc2UocHJlUHJvY2Vzc01lc3NhZ2UpIGFzIERpc2NvcmRHYXRld2F5UGF5bG9hZFxuXG4gICAgLy8gRWRnZSBjYXNlIHN0YXJ0OiBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vL2lzc3Vlcy8yMzExXG4gICAgdGhpcy5oZWFydC5sYXN0QWNrID0gRGF0ZS5ub3coKVxuICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0aW5nIHRoZSByb3VuZCB0cmlwIHRpbWUgZm9yIHVzZXJzIHdobyBuZWVkIGl0LlxuICAgIGlmICh0aGlzLmhlYXJ0Lmxhc3RCZWF0ICYmICF0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCkge1xuICAgICAgdGhpcy5oZWFydC5ydHQgPSB0aGlzLmhlYXJ0Lmxhc3RBY2sgLSB0aGlzLmhlYXJ0Lmxhc3RCZWF0XG4gICAgfVxuICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gdHJ1ZVxuICAgIC8vIEVkZ2UgY2FzZSBlbmQhXG5cbiAgICBzd2l0Y2ggKG1lc3NhZ2VEYXRhLm9wKSB7XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdDoge1xuICAgICAgICAvLyBUT0RPOiBjYW4gdGhpcyBhY3R1YWxseSBoYXBwZW5cbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgICAvLyBEaXNjb3JkIHJhbmRvbWx5IHNlbmRzIHRoaXMgcmVxdWlyaW5nIGFuIGltbWVkaWF0ZSBoZWFydGJlYXQgYmFjay5cbiAgICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlclxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0Py4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWxsbzoge1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IChtZXNzYWdlRGF0YS5kIGFzIERpc2NvcmRIZWxsbykuaGVhcnRiZWF0X2ludGVydmFsXG5cbiAgICAgICAgdGhpcy5zdGFydEhlYXJ0YmVhdGluZyhpbnRlcnZhbClcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICAgIC8vIEhFTExPIGhhcyBiZWVuIHNlbmQgb24gYSBub24gcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHNoYXJkIHN0YXJ0cyBhIG5ldyBzZXNzaW9uLFxuICAgICAgICAgIC8vIHRoZXJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpbnRlcnZhbCBoYXMgYmVlbiByZXNldCB0b28uXG4gICAgICAgICAgdGhpcy5idWNrZXQgPSBjcmVhdGVMZWFreUJ1Y2tldCh7XG4gICAgICAgICAgICBtYXg6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICAgICAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgICAgICAgICByZWZpbGxBbW91bnQ6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICAgICAgICAvLyBXYWl0aW5nIGFjcXVpcmVzIHNob3VsZCBub3QgYmUgbG9zdCBvbiBhIHJlLWlkZW50aWZ5LlxuICAgICAgICAgICAgd2FpdGluZzogdGhpcy5idWNrZXQud2FpdGluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWxsbz8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0QUNLOiB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdEFjaz8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuUmVjb25uZWN0OiB7XG4gICAgICAgIC8vICAgZ2F0ZXdheS5kZWJ1ZyhcIkdXIFJFQ09OTkVDVFwiLCB7IHNoYXJkSWQgfSk7XG5cbiAgICAgICAgdGhpcy5ldmVudHMucmVxdWVzdGVkUmVjb25uZWN0Py4odGhpcylcblxuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZSgpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSW52YWxpZFNlc3Npb246IHtcbiAgICAgICAgLy8gICBnYXRld2F5LmRlYnVnKFwiR1cgSU5WQUxJRF9TRVNTSU9OXCIsIHsgc2hhcmRJZCwgcGF5bG9hZDogbWVzc2FnZURhdGEgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VtYWJsZSA9IG1lc3NhZ2VEYXRhLmQgYXMgYm9vbGVhblxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmludmFsaWRTZXNzaW9uPy4odGhpcywgcmVzdW1hYmxlKVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgYSByYW5kb20gYW1vdW50IG9mIHRpbWUgYmV0d2VlbiAxIGFuZCA1XG4gICAgICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVzdW1pbmdcbiAgICAgICAgYXdhaXQgZGVsYXkoTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDQgKyAxKSAqIDEwMDApKVxuXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdJTlZBTElEX1NFU1NJT04nKT8uKG1lc3NhZ2VEYXRhKVxuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnSU5WQUxJRF9TRVNTSU9OJylcblxuICAgICAgICAvLyBXaGVuIHJlc3VtYWJsZSBpcyBmYWxzZSB3ZSBuZWVkIHRvIHJlLWlkZW50aWZ5XG4gICAgICAgIGlmICghcmVzdW1hYmxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHNlc3Npb24gaXMgaW52YWxpZCBidXQgYXBwYXJlbnRseSBpdCBpcyByZXN1bWFibGVcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1lc3NhZ2VEYXRhLnQgPT09ICdSRVNVTUVEJykge1xuICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcIkdXIFJFU1VNRURcIiwgeyBzaGFyZElkIH0pO1xuXG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0ZWRcbiAgICAgIHRoaXMuZXZlbnRzLnJlc3VtZWQ/Lih0aGlzKVxuXG4gICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLm1hcCgocmVzb2x2ZSkgPT4gcmVzb2x2ZSgpKVxuXG4gICAgICB0aGlzLnJlc29sdmVzLmdldCgnUkVTVU1FRCcpPy4obWVzc2FnZURhdGEpXG4gICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVTVU1FRCcpXG4gICAgfSBlbHNlIGlmIChtZXNzYWdlRGF0YS50ID09PSAnUkVBRFknKSB7XG4gICAgICAvLyBJbXBvcnRhbnQgZm9yIGZ1dHVyZSByZXN1bWVzLlxuXG4gICAgICBjb25zdCBwYXlsb2FkID0gbWVzc2FnZURhdGEuZCBhcyBEaXNjb3JkUmVhZHlcblxuICAgICAgdGhpcy5yZXN1bWVHYXRld2F5VXJsID0gcGF5bG9hZC5yZXN1bWVfZ2F0ZXdheV91cmxcblxuICAgICAgdGhpcy5zZXNzaW9uSWQgPSBwYXlsb2FkLnNlc3Npb25faWRcbiAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZFxuXG4gICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgLy8gSW1wb3J0YW50IHdoZW4gdGhpcyBpcyBhIHJlLWlkZW50aWZ5XG4gICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUubWFwKChyZXNvbHZlKSA9PiByZXNvbHZlKCkpXG5cbiAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdSRUFEWScpPy4obWVzc2FnZURhdGEpXG4gICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVBRFknKVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIGl0IGlzIHByZXNlbnRcbiAgICAvLyBgc2AgY2FuIGJlIGVpdGhlciBgbnVsbGAgb3IgYSBgbnVtYmVyYC5cbiAgICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHVwZGF0ZSBtaXNzZXMgd2hlbiBgc2AgaXMgYDBgIHdlIGNoZWNrIGFnYWluc3QgbnVsbC5cbiAgICBpZiAobWVzc2FnZURhdGEucyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyID0gbWVzc2FnZURhdGEuc1xuICAgIH1cblxuICAgIC8vIFRoZSBuZWNlc3NhcnkgaGFuZGxpbmcgcmVxdWlyZWQgZm9yIHRoZSBTaGFyZHMgY29ubmVjdGlvbiBoYXMgYmVlbiBmaW5pc2hlZC5cbiAgICAvLyBOb3cgdGhlIGV2ZW50IGNhbiBiZSBzYWZlbHkgZm9yd2FyZGVkLlxuICAgIHRoaXMuZXZlbnRzLm1lc3NhZ2U/Lih0aGlzLCBjYW1lbGl6ZShtZXNzYWdlRGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgaW4gb3JkZXIgdG8gbWFrZSB0aGUgc2hhcmRzIHByZXNlbmNlLlxuICAgKiBhc3luYyBpbiBjYXNlIGRldnMgY3JlYXRlIHRoZSBwcmVzZW5jZSBiYXNlZCBvbiBlZy4gZGF0YWJhc2UgdmFsdWVzLlxuICAgKiBQYXNzaW5nIHRoZSBzaGFyZCdzIGlkIHRoZXJlIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0aGUgZGV2IHRvIHVzZSB0aGlzIGZ1bmN0aW9uLlxuICAgKi9cbiAgYXN5bmMgbWFrZVByZXNlbmNlICgpOiBQcm9taXNlPEJvdFN0YXR1c1VwZGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLXJldHVyblxuICAgIHJldHVyblxuICB9XG5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gY29tbXVuaWNhdGVzIHdpdGggdGhlIG1hbmFnZW1lbnQgcHJvY2VzcywgaW4gb3JkZXIgdG8ga25vdyB3aGV0aGVyIGl0cyBmcmVlIHRvIGlkZW50aWZ5LiBXaGVuIHRoaXMgZnVuY3Rpb24gcmVzb2x2ZXMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgc2hhcmQgaXMgYWxsb3dlZCB0byBzZW5kIGFuIGlkZW50aWZ5IHBheWxvYWQgdG8gZGlzY29yZC4gKi9cbiAgYXN5bmMgcmVxdWVzdElkZW50aWZ5ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUT0RPOiBob3cgdG8gaGFuZGxlIHRoaXNcbiAgICAvLyByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXF1ZXN0SWRlbnRpZnkodGhpcy5pZClcbiAgfVxuXG4gIC8qKiBTdGFydCBzZW5kaW5nIGhlYXJ0YmVhdCBwYXlsb2FkcyB0byBEaXNjb3JkIGluIHRoZSBwcm92aWRlZCBpbnRlcnZhbC4gKi9cbiAgc3RhcnRIZWFydGJlYXRpbmcgKGludGVydmFsOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyAgIGdhdGV3YXkuZGVidWcoXCJHVyBIRUFSVEJFQVRJTkdfU1RBUlRFRFwiLCB7IHNoYXJkSWQsIGludGVydmFsIH0pO1xuXG4gICAgdGhpcy5oZWFydC5pbnRlcnZhbCA9IGludGVydmFsXG5cbiAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQncyBzdGF0ZSB0byBgVW5pZGVudGlmaWVkYFxuICAgIC8vIGlmIGhlYXJ0YmVhdGluZyBoYXMgbm90IGJlZW4gc3RhcnRlZCBkdWUgdG8gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICBpZiAoW1NoYXJkU3RhdGUuRGlzY29ubmVjdGVkLCBTaGFyZFN0YXRlLk9mZmxpbmVdLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5VbmlkZW50aWZpZWRcbiAgICB9XG5cbiAgICAvLyBUaGUgZmlyc3QgaGVhcnRiZWF0IG5lZWRzIHRvIGJlIHNlbmQgd2l0aCBhIHJhbmRvbSBkZWxheSBiZXR3ZWVuIGAwYCBhbmQgYGludGVydmFsYFxuICAgIC8vIFVzaW5nIGEgYHNldFRpbWVvdXQoXywgaml0dGVyKWAgaGVyZSB0byBhY2NvbXBsaXNoIHRoYXQuXG4gICAgLy8gYE1hdGgucmFuZG9tKClgIGNhbiBiZSBgMGAgc28gd2UgdXNlIGAwLjVgIGlmIHRoaXMgaGFwcGVuc1xuICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjaGVhcnRiZWF0aW5nXG4gICAgY29uc3Qgaml0dGVyID0gTWF0aC5jZWlsKHRoaXMuaGVhcnQuaW50ZXJ2YWwgKiAoTWF0aC5yYW5kb20oKSB8fCAwLjUpKVxuICAgIHRoaXMuaGVhcnQudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlclxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSBmYWxzZVxuXG4gICAgICAvLyBBZnRlciB0aGUgcmFuZG9tIGhlYXJ0YmVhdCBqaXR0ZXIgd2UgY2FuIHN0YXJ0IGEgbm9ybWFsIGludGVydmFsLlxuICAgICAgdGhpcy5oZWFydC5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBnYXRld2F5LmRlYnVnKFwiR1cgREVCVUdcIiwgYFJ1bm5pbmcgc2V0SW50ZXJ2YWwgaW4gaGVhcnRiZWF0IGZpbGUuIFNoYXJkOiAke3NoYXJkSWR9YCk7XG5cbiAgICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcIkdXIEhFQVJUQkVBVElOR1wiLCB7IHNoYXJkSWQsIHNoYXJkOiBjdXJyZW50U2hhcmQgfSk7XG5cbiAgICAgICAgLy8gVGhlIFNoYXJkIGRpZCBub3QgcmVjZWl2ZSBhIGhlYXJ0YmVhdCBBQ0sgZnJvbSBEaXNjb3JkIGluIHRpbWUsXG4gICAgICAgIC8vIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZSBjb25uZWN0aW9uIGhhcyBmYWlsZWQgb3IgZ290IFwiem9tYmllZFwiLlxuICAgICAgICAvLyBUaGUgU2hhcmQgbmVlZHMgdG8gc3RhcnQgYSByZS1pZGVudGlmeSBhY3Rpb24gYWNjb3JkaW5nbHkuXG4gICAgICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjaGVhcnRiZWF0aW5nLWV4YW1wbGUtZ2F0ZXdheS1oZWFydGJlYXQtYWNrXG4gICAgICAgIGlmICghdGhpcy5oZWFydC5hY2tub3dsZWRnZWQpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5ab21iaWVkQ29ubmVjdGlvbiwgJ1pvbWJpZWQgY29ubmVjdGlvbiwgZGlkIG5vdCByZWNlaXZlIGFuIGhlYXJ0YmVhdCBBQ0sgaW4gdGltZS4nKVxuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSBmYWxzZVxuXG4gICAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KClcblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuICAgICAgfSwgdGhpcy5oZWFydC5pbnRlcnZhbClcbiAgICB9LCBqaXR0ZXIpXG4gIH1cblxuICAvKiogU3RvcCB0aGUgaGVhcnRiZWF0aW5nIHByb2Nlc3Mgd2l0aCBkaXNjb3JkLiAqL1xuICBzdG9wSGVhcnRiZWF0aW5nICgpOiB2b2lkIHtcbiAgICAvLyBDbGVhciB0aGUgcmVndWxhciBoZWFydGJlYXQgaW50ZXJ2YWwuXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0LmludGVydmFsSWQpXG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBTaGFyZCBnb3QgY2xvc2VkIGJlZm9yZSB0aGUgZmlyc3Qgaml0dGVyZWQgaGVhcnRiZWF0LlxuICAgIC8vIFRvIGdvIHNhZmUgd2Ugc2hvdWxkIGNsZWFyIHRoZSByZWxhdGVkIHRpbWVvdXQgdG9vLlxuICAgIGNsZWFyVGltZW91dCh0aGlzLmhlYXJ0LnRpbWVvdXRJZClcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkQ3JlYXRlT3B0aW9ucyB7XG4gIC8qKiBUaGUgc2hhcmQgaWQgKi9cbiAgaWQ6IG51bWJlclxuICAvKiogVGhlIGNvbm5lY3Rpb24gZGV0YWlscyAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoZSBldmVudCBoYW5kbGVycyBmb3IgZXZlbnRzIG9uIHRoZSBzaGFyZC4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50c1xufVxuXG5leHBvcnQgZGVmYXVsdCBTaGFyZFxuIl0sIm5hbWVzIjpbIkdhdGV3YXlDbG9zZUV2ZW50Q29kZXMiLCJHYXRld2F5T3Bjb2RlcyIsImNhbWVsaXplIiwiY3JlYXRlTGVha3lCdWNrZXQiLCJkZWxheSIsImluZmxhdGVTeW5jIiwiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIiwiU2hhcmRTdGF0ZSIsIlNoYXJkIiwibWF4UmVxdWVzdHNQZXJSYXRlTGltaXRUaWNrIiwicHJldmlvdXNTZXF1ZW5jZU51bWJlciIsInJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwiLCJzdGF0ZSIsIk9mZmxpbmUiLCJyZXN1bWVHYXRld2F5VXJsIiwiZXZlbnRzIiwib2ZmbGluZVNlbmRRdWV1ZSIsInJlc29sdmVzIiwiTWFwIiwiYnVja2V0IiwibWF4IiwicmVmaWxsSW50ZXJ2YWwiLCJyZWZpbGxBbW91bnQiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJpZCIsImNvbm5lY3Rpb24iLCJoZWFydCIsImFja25vd2xlZGdlZCIsImludGVydmFsIiwiZ2F0ZXdheUNvbmZpZyIsImNhbGN1bGF0ZVNhZmVSZXF1ZXN0cyIsInNhZmVSZXF1ZXN0cyIsIk1hdGgiLCJjZWlsIiwiY2hlY2tPZmZsaW5lIiwiaGlnaFByaW9yaXR5IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1bnNoaWZ0IiwicHVzaCIsImNsb3NlIiwiY29kZSIsInJlYXNvbiIsInNvY2tldCIsInJlYWR5U3RhdGUiLCJXZWJTb2NrZXQiLCJPUEVOIiwiY29ubmVjdCIsIklkZW50aWZ5aW5nIiwiUmVzdW1pbmciLCJpbmNsdWRlcyIsIkNvbm5lY3RpbmciLCJjb25uZWN0aW5nIiwidXJsIiwiVVJMIiwib3JpZ2luIiwic2VhcmNoUGFyYW1zIiwic2V0IiwidmVyc2lvbiIsInRvU3RyaW5nIiwib25lcnJvciIsImV2ZW50IiwiY29uc29sZSIsImxvZyIsImVycm9yIiwib25jbG9zZSIsImhhbmRsZUNsb3NlIiwib25tZXNzYWdlIiwibWVzc2FnZSIsImhhbmRsZU1lc3NhZ2UiLCJvbm9wZW4iLCJVbmlkZW50aWZpZWQiLCJjb25uZWN0ZWQiLCJpZGVudGlmeSIsIlJlSWRlbnRpZnlpbmciLCJpZGVudGlmeWluZyIsInJlcXVlc3RJZGVudGlmeSIsInNlbmQiLCJvcCIsIklkZW50aWZ5IiwiZCIsInRva2VuIiwiY29tcHJlc3MiLCJwcm9wZXJ0aWVzIiwiaW50ZW50cyIsInNoYXJkIiwidG90YWxTaGFyZHMiLCJwcmVzZW5jZSIsIm1ha2VQcmVzZW5jZSIsImlkZW50aWZpZWQiLCJkZWxldGUiLCJyZXN1bWUiLCJSZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiIsInNlc3Npb25JZCIsIlJlc3VtZSIsInNlc3Npb25faWQiLCJzZXEiLCJhY3F1aXJlIiwiSlNPTiIsInN0cmluZ2lmeSIsInNodXRkb3duIiwiU2h1dGRvd24iLCJzdG9wSGVhcnRiZWF0aW5nIiwiVGVzdGluZ0ZpbmlzaGVkIiwiZGlzY29ubmVjdGVkIiwiUmVzaGFyZGVkIiwiWm9tYmllZENvbm5lY3Rpb24iLCJEaXNjb25uZWN0ZWQiLCJVbmtub3duT3Bjb2RlIiwiTm90QXV0aGVudGljYXRlZCIsIkludmFsaWRTZXEiLCJSYXRlTGltaXRlZCIsIlNlc3Npb25UaW1lZE91dCIsIkF1dGhlbnRpY2F0aW9uRmFpbGVkIiwiSW52YWxpZFNoYXJkIiwiU2hhcmRpbmdSZXF1aXJlZCIsIkludmFsaWRBcGlWZXJzaW9uIiwiSW52YWxpZEludGVudHMiLCJEaXNhbGxvd2VkSW50ZW50cyIsIkVycm9yIiwiVW5rbm93bkVycm9yIiwiRGVjb2RlRXJyb3IiLCJBbHJlYWR5QXV0aGVudGljYXRlZCIsInByZVByb2Nlc3NNZXNzYWdlIiwiZGF0YSIsIkJsb2IiLCJhcnJheUJ1ZmZlciIsIm1lc3NhZ2VEYXRhIiwicGFyc2UiLCJsYXN0QWNrIiwiRGF0ZSIsIm5vdyIsImxhc3RCZWF0IiwicnR0IiwiSGVhcnRiZWF0IiwiaGVhcnRiZWF0IiwiSGVsbG8iLCJoZWFydGJlYXRfaW50ZXJ2YWwiLCJzdGFydEhlYXJ0YmVhdGluZyIsIndhaXRpbmciLCJoZWxsbyIsIkhlYXJ0YmVhdEFDSyIsImhlYXJ0YmVhdEFjayIsIlJlY29ubmVjdCIsInJlcXVlc3RlZFJlY29ubmVjdCIsIkludmFsaWRTZXNzaW9uIiwicmVzdW1hYmxlIiwiaW52YWxpZFNlc3Npb24iLCJmbG9vciIsInJhbmRvbSIsImdldCIsInQiLCJDb25uZWN0ZWQiLCJyZXN1bWVkIiwibWFwIiwicGF5bG9hZCIsInJlc3VtZV9nYXRld2F5X3VybCIsInMiLCJqaXR0ZXIiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiaW50ZXJ2YWxJZCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBU0EsMEJBQUFBLENBQXNCLENBQUVDLGtCQUFBQSxDQUFjLEtBQVEsbUJBQW1CLEFBQzFFLFFBQVNDLFlBQUFBLENBQVEsQ0FBRUMscUJBQUFBLENBQWlCLENBQUVDLFNBQUFBLENBQUssS0FBUSxtQkFBbUIsQUFDdEUsUUFBU0MsZUFBQUEsQ0FBVyxLQUFRLE1BQU0sQUFFbEMsUUFBU0MseUJBQUFBLENBQXFCLENBQUVDLGNBQUFBLENBQVUsS0FBUSxZQUFZLEFBRTlELFFBQU8sTUFBTUMsTUFRWEMsNEJBQXNDLEdBQUcsQUFFekNDLENBQUFBLHVCQUF3QyxJQUFJLEFBRTVDQyxDQUFBQSx1QkFBaUMsR0FBSyxBQU10Q0MsQ0FBQUEsTUFBUUwsRUFBV00sT0FBTyxBQUUxQkMsQ0FBQUEsaUJBQTJCLEVBQUUsQUFFN0JDLENBQUFBLE9BQXNCLENBQUMsQ0FBQyxBQUV4QkMsQ0FBQUEsaUJBQWlELEVBQUUsQUFFbkRDLENBQUFBLFNBQVcsSUFBSUMsR0FBd0YsQUFFdkdDLENBQUFBLE9BQVNoQixFQUFrQixDQUN6QmlCLElBQUssSUFDTEMsZUFBZ0IsSUFDaEJDLGFBQWMsR0FDaEIsRUFBRSxBQUVGQyxhQUFhQyxDQUEyQixDQUFFLENBQ3hDLElBQUksQ0FBQ0MsRUFBRSxDQUFHRCxFQUFRQyxFQUFFLENBQ3BCLElBQUksQ0FBQ0MsVUFBVSxDQUFHRixFQUFRRSxVQUFVLENBQ3BDLElBQUksQ0FBQ1gsTUFBTSxDQUFHUyxFQUFRVCxNQUFNLENBRTVCLElBQUksQ0FBQ1ksS0FBSyxDQUFHLENBQ1hDLGFBQWMsQ0FBQSxFQUNkQyxTQUFVLElBQ1osQ0FDRixDQUdBLElBQUlDLGVBQXFDLENBQ3ZDLE9BQU8sSUFBSSxDQUFDSixVQUFVLEFBQ3hCLENBR0FLLHVCQUFpQyxDQUUvQixJQUFNQyxFQUFlLElBQUksQ0FB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
|
|
1
|
+
import e from"isomorphic-ws";import{GatewayCloseEventCodes as t,GatewayOpcodes as s}from"@discordeno/types";import{camelize as i,createLeakyBucket as n,delay as a}from"@discordeno/utils";import{inflateSync as r}from"zlib";import{ShardSocketCloseCodes as h,ShardState as o}from"./types.js";export class Shard{maxRequestsPerRateLimitTick=120;previousSequenceNumber=null;rateLimitResetInterval=6e4;state=o.Offline;resumeGatewayUrl="";events={};offlineSendQueue=[];resolves=new Map;bucket=n({max:120,refillInterval:6e4,refillAmount:120});constructor(e){this.id=e.id,this.connection=e.connection,this.events=e.events,this.heart={acknowledged:!1,interval:45e3}}get gatewayConfig(){return this.connection}calculateSafeRequests(){let e=this.maxRequestsPerRateLimitTick-2*Math.ceil(this.rateLimitResetInterval/this.heart.interval);return e<0?0:e}async checkOffline(e){this.isOpen()||await new Promise(t=>{e?this.offlineSendQueue.unshift(t):this.offlineSendQueue.push(t)})}close(t,s){if(this.socket?.readyState===e.OPEN)return this.socket?.close(t,s)}async connect(){[o.Identifying,o.Resuming].includes(this.state)||(this.state=o.Connecting),this.events.connecting?.(this);let t=new URL(this.gatewayConfig.url);"wss://gateway.discord.gg"===t.origin&&(this.state===o.Resuming&&(t=new URL(this.resumeGatewayUrl)),t.searchParams.set("v",this.gatewayConfig.version.toString()),t.searchParams.set("encoding","json"));let s=new e(t.toString());return this.socket=s,s.onerror=e=>console.log({error:e}),s.onclose=async e=>await this.handleClose(e),s.onmessage=async e=>await this.handleMessage(e),await new Promise(e=>{s.onopen=()=>{[o.Identifying,o.Resuming].includes(this.state)||(this.state=o.Unidentified),this.events.connected?.(this),e(this)}})}async identify(){return this.isOpen()&&(console.log(`CLOSING EXISTING SHARD: #${this.id}`),this.close(h.ReIdentifying,"Re-identifying closure of old connection.")),this.state=o.Identifying,this.events.identifying?.(this),this.isOpen()||await this.connect(),await this.requestIdentify(),this.send({op:s.Identify,d:{token:`Bot ${this.gatewayConfig.token}`,compress:this.gatewayConfig.compress,properties:this.gatewayConfig.properties,intents:this.gatewayConfig.intents,shard:[this.id,this.gatewayConfig.totalShards],presence:await this.makePresence?.()}},!0),await new Promise(e=>{this.resolves.set("READY",()=>{this.events.identified?.(this),e()}),this.resolves.set("INVALID_SESSION",()=>{this.resolves.delete("READY"),e()})})}isOpen(){return this.socket?.readyState===e.OPEN}async resume(){return(this.isOpen()&&this.close(h.ResumeClosingOldConnection,"Reconnecting the shard, closing old connection."),this.sessionId)?(this.state=o.Resuming,await this.connect(),this.send({op:s.Resume,d:{token:`Bot ${this.gatewayConfig.token}`,session_id:this.sessionId,seq:this.previousSequenceNumber??0}},!0),await new Promise(e=>{this.resolves.set("RESUMED",()=>e()),this.resolves.set("INVALID_SESSION",()=>{this.resolves.delete("RESUMED"),e()})})):await this.identify()}async send(e,t=!1){await this.checkOffline(t),await this.bucket.acquire(1,t),await this.checkOffline(t),this.socket?.send(JSON.stringify(e))}async shutdown(){this.close(h.Shutdown,"Shard shutting down."),this.state=o.Offline}async handleClose(e){switch(this.stopHeartbeating(),e.code){case h.TestingFinished:this.state=o.Offline,this.events.disconnected?.(this);return;case h.Shutdown:case h.ReIdentifying:case h.Resharded:case h.ResumeClosingOldConnection:case h.ZombiedConnection:this.state=o.Disconnected,this.events.disconnected?.(this);return;case t.UnknownOpcode:case t.NotAuthenticated:case t.InvalidSeq:case t.RateLimited:case t.SessionTimedOut:return this.state=o.Identifying,this.events.disconnected?.(this),await this.identify();case t.AuthenticationFailed:case t.InvalidShard:case t.ShardingRequired:case t.InvalidApiVersion:case t.InvalidIntents:case t.DisallowedIntents:throw this.state=o.Offline,this.events.disconnected?.(this),Error(e.reason||"Discord gave no reason! GG! You broke Discord!");case t.UnknownError:case t.DecodeError:case t.AlreadyAuthenticated:default:return this.state=o.Resuming,this.events.disconnected?.(this),await this.resume()}}async handleMessage(e){let t=e.data;if(this.gatewayConfig.compress&&t instanceof Blob&&(t=r(await t.arrayBuffer()).toString()),"string"!=typeof t)return;let h=JSON.parse(t);switch(this.heart.lastAck=Date.now(),this.heart.lastBeat&&!this.heart.acknowledged&&(this.heart.rtt=this.heart.lastAck-this.heart.lastBeat),this.heart.acknowledged=!0,h.op){case s.Heartbeat:if(!this.isOpen())return;this.heart.lastBeat=Date.now(),this.socket?.send(JSON.stringify({op:s.Heartbeat,d:this.previousSequenceNumber})),this.events.heartbeat?.(this);break;case s.Hello:{let c=h.d.heartbeat_interval;this.startHeartbeating(c),this.state!==o.Resuming&&(this.bucket=n({max:this.calculateSafeRequests(),refillInterval:6e4,refillAmount:this.calculateSafeRequests(),waiting:this.bucket.waiting})),this.events.hello?.(this);break}case s.HeartbeatACK:this.events.heartbeatAck?.(this);break;case s.Reconnect:this.events.requestedReconnect?.(this),await this.resume();break;case s.InvalidSession:{let d=h.d;if(this.events.invalidSession?.(this,d),await a(Math.floor((4*Math.random()+1)*1e3)),this.resolves.get("INVALID_SESSION")?.(h),this.resolves.delete("INVALID_SESSION"),!d){await this.identify();break}await this.resume()}}if("RESUMED"===h.t)this.state=o.Connected,this.events.resumed?.(this),this.offlineSendQueue.map(e=>e()),this.resolves.get("RESUMED")?.(h),this.resolves.delete("RESUMED");else if("READY"===h.t){let l=h.d;this.resumeGatewayUrl=l.resume_gateway_url,this.sessionId=l.session_id,this.state=o.Connected,this.offlineSendQueue.map(e=>e()),this.resolves.get("READY")?.(h),this.resolves.delete("READY")}null!==h.s&&(this.previousSequenceNumber=h.s),this.events.message?.(this,i(h))}async makePresence(){}async requestIdentify(){}startHeartbeating(e){this.heart.interval=e,[o.Disconnected,o.Offline].includes(this.state)&&(this.state=o.Unidentified);let t=Math.ceil(this.heart.interval*(Math.random()||.5));this.heart.timeoutId=setTimeout(()=>{this.socket?.send(JSON.stringify({op:s.Heartbeat,d:this.previousSequenceNumber})),this.heart.lastBeat=Date.now(),this.heart.acknowledged=!1,this.heart.intervalId=setInterval(async()=>{if(!this.heart.acknowledged)return this.close(h.ZombiedConnection,"Zombied connection, did not receive an heartbeat ACK in time."),await this.identify();this.heart.acknowledged=!1,this.socket?.send(JSON.stringify({op:s.Heartbeat,d:this.previousSequenceNumber})),this.heart.lastBeat=Date.now(),this.events.heartbeat?.(this)},this.heart.interval)},t)}stopHeartbeating(){clearInterval(this.heart.intervalId),clearTimeout(this.heart.timeoutId)}}export default Shard;
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV2ViU29ja2V0IGZyb20gJ2lzb21vcnBoaWMtd3MnXG5pbXBvcnQgdHlwZSB7IERpc2NvcmRHYXRld2F5UGF5bG9hZCwgRGlzY29yZEhlbGxvLCBEaXNjb3JkUmVhZHkgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBjYW1lbGl6ZSwgY3JlYXRlTGVha3lCdWNrZXQsIGRlbGF5IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBpbmZsYXRlU3luYyB9IGZyb20gJ3psaWInXG5pbXBvcnQgdHlwZSB7IEJvdFN0YXR1c1VwZGF0ZSwgU2hhcmRFdmVudHMsIFNoYXJkR2F0ZXdheUNvbmZpZywgU2hhcmRIZWFydCwgU2hhcmRTb2NrZXRSZXF1ZXN0IH0gZnJvbSAnLi90eXBlcy5qcydcbmltcG9ydCB7IFNoYXJkU29ja2V0Q2xvc2VDb2RlcywgU2hhcmRTdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjbGFzcyBTaGFyZCB7XG4gIC8qKiBUaGUgaWQgb2YgdGhlIHNoYXJkICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGNvbmZpZyBkZXRhaWxzIHRoYXQgdGhpcyBzaGFyZCB3aWxsIHVzZWQgdG8gY29ubmVjdCB0byBkaXNjb3JkLiAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoaXMgY29udGFpbnMgYWxsIHRoZSBoZWFydGJlYXQgaW5mb3JtYXRpb24gKi9cbiAgaGVhcnQ6IFNoYXJkSGVhcnRcbiAgLyoqIFRoZSBtYXhpbXVtIG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBiZSBzZW5kIHRvIGRpc2NvcmQgcGVyIHJhdGUgbGltaXQgdGljay4gVHlwaWNhbGx5IHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAqL1xuICBtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2s6IG51bWJlciA9IDEyMFxuICAvKiogVGhlIHByZXZpb3VzIHBheWxvYWQgc2VxdWVuY2UgbnVtYmVyLiAqL1xuICBwcmV2aW91c1NlcXVlbmNlTnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAvKiogSW4gd2hpY2ggaW50ZXJ2YWwgKGluIG1pbGxpc2Vjb25kcykgdGhlIGdhdGV3YXkgcmVzZXRzIGl0J3MgcmF0ZSBsaW1pdC4gKi9cbiAgcmF0ZUxpbWl0UmVzZXRJbnRlcnZhbDogbnVtYmVyID0gNjAwMDBcbiAgLyoqIEN1cnJlbnQgc2Vzc2lvbiBpZCBvZiB0aGUgc2hhcmQgaWYgcHJlc2VudC4gKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nXG4gIC8qKiBUaGlzIGNvbnRhaW5zIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB0byBEaXNjb3JkLCBpZiBjdXJyZW50bHkgY29ubmVjdGVkLiAqL1xuICBzb2NrZXQ/OiBXZWJTb2NrZXRcbiAgLyoqIEN1cnJlbnQgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHRoaXMuICovXG4gIHN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gIC8qKiBUaGUgdXJsIHByb3ZpZGVkIGJ5IGRpc2NvcmQgdG8gdXNlIHdoZW4gcmVzdW1pbmcgYSBjb25uZWN0aW9uIGZvciB0aGlzIHRoaXMuICovXG4gIHJlc3VtZUdhdGV3YXlVcmw6IHN0cmluZyA9ICcnXG4gIC8qKiBUaGUgc2hhcmQgcmVsYXRlZCBldmVudCBoYW5kbGVycy4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50cyA9IHt9XG4gIC8qKiBDYWNoZSBmb3IgcGVuZGluZyBnYXRld2F5IHJlcXVlc3RzIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gc2VuZCB3aGlsZSB0aGUgZ2F0ZXdheSB3ZW50IG9mZmxpbmUuICovXG4gIG9mZmxpbmVTZW5kUXVldWU6IEFycmF5PChfPzogdW5rbm93bikgPT4gdm9pZD4gPSBbXVxuICAvKiogUmVzb2x2ZSBpbnRlcm5hbCB3YWl0aW5nIHN0YXRlcy4gTWFwcGVkIGJ5IFNlbGVjdGVkRXZlbnRzID0+IFJlc29sdmVGdW5jdGlvbiAqL1xuICByZXNvbHZlcyA9IG5ldyBNYXA8J1JFQURZJyB8ICdSRVNVTUVEJyB8ICdJTlZBTElEX1NFU1NJT04nLCAocGF5bG9hZDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkPigpXG4gIC8qKiBTaGFyZCBidWNrZXQuIE9ubHkgYWNjZXNzIHRoaXMgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBCdWNrZXQgZm9yIGhhbmRsaW5nIHNoYXJkIHJlcXVlc3QgcmF0ZSBsaW1pdHMuICovXG4gIGJ1Y2tldCA9IGNyZWF0ZUxlYWt5QnVja2V0KHtcbiAgICBtYXg6IDEyMCxcbiAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgcmVmaWxsQW1vdW50OiAxMjBcbiAgfSlcblxuICBjb25zdHJ1Y3RvciAob3B0aW9uczogU2hhcmRDcmVhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWRcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBvcHRpb25zLmNvbm5lY3Rpb25cbiAgICB0aGlzLmV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzXG5cbiAgICB0aGlzLmhlYXJ0ID0ge1xuICAgICAgYWNrbm93bGVkZ2VkOiBmYWxzZSxcbiAgICAgIGludGVydmFsOiA0NTAwMFxuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgZ2F0ZXdheSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkLiAqL1xuICBnZXQgZ2F0ZXdheUNvbmZpZyAoKTogU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uXG4gIH1cblxuICAvKiogQ2FsY3VsYXRlIHRoZSBhbW91bnQgb2YgcmVxdWVzdHMgd2hpY2ggY2FuIHNhZmVseSBiZSBtYWRlIHBlciByYXRlIGxpbWl0IGludGVydmFsLCBiZWZvcmUgdGhlIGdhdGV3YXkgZ2V0cyBkaXNjb25uZWN0ZWQgZHVlIHRvIGFuIGV4Y2VlZGVkIHJhdGUgbGltaXQuICovXG4gIGNhbGN1bGF0ZVNhZmVSZXF1ZXN0cyAoKTogbnVtYmVyIHtcbiAgICAvLyAqIDIgYWRkcyBleHRyYSBzYWZldHkgbGF5ZXIgZm9yIGRpc2NvcmRzIE9QIDEgcmVxdWVzdHMgdGhhdCB3ZSBuZWVkIHRvIHJlc3BvbmQgdG9cbiAgICBjb25zdCBzYWZlUmVxdWVzdHMgPSB0aGlzLm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayAtIE1hdGguY2VpbCh0aGlzLnJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwgLyB0aGlzLmhlYXJ0LmludGVydmFsKSAqIDJcblxuICAgIHJldHVybiBzYWZlUmVxdWVzdHMgPCAwID8gMCA6IHNhZmVSZXF1ZXN0c1xuICB9XG5cbiAgYXN5bmMgY2hlY2tPZmZsaW5lIChoaWdoUHJpb3JpdHk6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIC8vIEhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyBnZXQgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuXG4gICAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS51bnNoaWZ0KHJlc29sdmUpXG4gICAgICAgIGVsc2UgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLnB1c2gocmVzb2x2ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBzb2NrZXQgY29ubmVjdGlvbiB0byBkaXNjb3JkIGlmIHByZXNlbnQuICovXG4gIGNsb3NlIChjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikgcmV0dXJuXG5cbiAgICByZXR1cm4gdGhpcy5zb2NrZXQ/LmNsb3NlKGNvZGUsIHJlYXNvbilcbiAgfVxuXG4gIC8qKiBDb25uZWN0IHRoZSBzaGFyZCB3aXRoIHRoZSBnYXRld2F5IGFuZCBzdGFydCBoZWFydGJlYXRpbmcuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBjb25uZWN0ICgpOiBQcm9taXNlPFNoYXJkPiB7XG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBDb25uZWN0aW5nYCBzdGF0ZSxcbiAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0aW5nXG4gICAgfVxuICAgIHRoaXMuZXZlbnRzLmNvbm5lY3Rpbmc/Lih0aGlzKVxuXG4gICAgbGV0IHVybCA9IG5ldyBVUkwodGhpcy5nYXRld2F5Q29uZmlnLnVybClcbiAgICAvLyBJZiBub3QgY29ubmVjdGluZyB0byBhIHByb3h5IGJ1dCBkaXJlY3RseSB0byBkaXNjb3JkIG5lZWQgdG8gaGFuZGxlIHJlc3VtaW5nXG4gICAgaWYgKHVybC5vcmlnaW4gPT09ICd3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2cnKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICB1cmwgPSBuZXcgVVJMKHRoaXMucmVzdW1lR2F0ZXdheVVybClcbiAgICAgIH1cbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd2JywgdGhpcy5nYXRld2F5Q29uZmlnLnZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdlbmNvZGluZycsICdqc29uJylcbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVybC50b1N0cmluZygpKVxuXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcblxuICAgIC8vIFRPRE86IHByb3BlciBldmVudCBoYW5kbGluZ1xuICAgIHNvY2tldC5vbmVycm9yID0gKGV2ZW50KSA9PiBjb25zb2xlLmxvZyh7IGVycm9yOiBldmVudCB9KVxuXG4gICAgc29ja2V0Lm9uY2xvc2UgPSBhc3luYyAoZXZlbnQpID0+IGF3YWl0IHRoaXMuaGFuZGxlQ2xvc2UoZXZlbnQpXG5cbiAgICBzb2NrZXQub25tZXNzYWdlID0gYXN5bmMgKG1lc3NhZ2UpID0+IGF3YWl0IHRoaXMuaGFuZGxlTWVzc2FnZShtZXNzYWdlKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQgdG8gYFVuaWRlbnRpZmllZGAgc3RhdGUsXG4gICAgICAgIC8vIGlmIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QgZG9lcyBub3QgY29tZSBmcm9tIGFuIGlkZW50aWZ5IG9yIHJlc3VtZSBhY3Rpb24uXG4gICAgICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuVW5pZGVudGlmaWVkXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXNvbHZlKHRoaXMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBJZGVudGlmeSB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuIElmIG5vdCBjb25uZWN0ZWQsIHRoaXMgd2lsbCBhbHNvIGNvbm5lY3QgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBpZGVudGlmeSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQSBuZXcgaWRlbnRpZnkgaGFzIGJlZW4gcmVxdWVzdGVkIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGFscmVhZHkgYSBjb25uZWN0aW9uIG9wZW4uXG4gICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gY2xvc2UgdGhlIG9sZCBjb25uZWN0aW9uIGFuZCBoZWFydGJlYXRpbmcgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgY29uc29sZS5sb2coYENMT1NJTkcgRVhJU1RJTkcgU0hBUkQ6ICMke3RoaXMuaWR9YClcbiAgICAgIHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmcsICdSZS1pZGVudGlmeWluZyBjbG9zdXJlIG9mIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICB0aGlzLmV2ZW50cy5pZGVudGlmeWluZz8uKHRoaXMpXG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG4gICAgfVxuXG4gICAgLy8gV2FpdCB1bnRpbCBhbiBpZGVudGlmeSBpcyBmcmVlIGZvciB0aGlzIHRoaXMuXG4gICAgYXdhaXQgdGhpcy5yZXF1ZXN0SWRlbnRpZnkoKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSWRlbnRpZnksXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MsXG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5nYXRld2F5Q29uZmlnLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW50ZW50czogdGhpcy5nYXRld2F5Q29uZmlnLmludGVudHMsXG4gICAgICAgICAgc2hhcmQ6IFt0aGlzLmlkLCB0aGlzLmdhdGV3YXlDb25maWcudG90YWxTaGFyZHNdLFxuICAgICAgICAgIHByZXNlbmNlOiBhd2FpdCB0aGlzLm1ha2VQcmVzZW5jZT8uKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdSRUFEWScsICgpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudHMuaWRlbnRpZmllZD8uKHRoaXMpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICAgIC8vIFdoZW4gaWRlbnRpZnlpbmcgdG9vIGZhc3QsXG4gICAgICAvLyBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkLlxuICAgICAgLy8gVGhpcyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgdGhvdWdoIGFuZCB0aGUgc2hhcmQgc3RhcnRzIGEgbmV3IGlkZW50aWZ5IGFjdGlvbi5cbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIENoZWNrIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gdG8gRGlzY29yZCBpcyBjdXJyZW50bHkgb3Blbi4gKi9cbiAgaXNPcGVuICgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zb2NrZXQ/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOXG4gIH1cblxuICAvKiogQXR0ZW1wdCB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNoYXJkcyBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIGFzeW5jIHJlc3VtZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gICBnYXRld2F5LmRlYnVnKFwiR1cgUkVTVU1JTkdcIiwgeyBzaGFyZElkIH0pO1xuICAgIC8vIEl0IGhhcyBiZWVuIHJlcXVlc3RlZCB0byByZXN1bWUgdGhlIFNoYXJkcyBzZXNzaW9uLlxuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgc2hhcmQgaXMgc3RpbGwgY29ubmVjdGVkIHdpdGggRGlzY29yZCdzIGdhdGV3YXkgdGhlcmVmb3JlIHdlIG5lZWQgdG8gZm9yY2VmdWxseSBjbG9zZSBpdC5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24sICdSZWNvbm5lY3RpbmcgdGhlIHNoYXJkLCBjbG9zaW5nIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgLy8gU2hhcmQgaGFzIG5ldmVyIGlkZW50aWZpZWQsIHNvIHdlIGNhbm5vdCByZXN1bWUuXG4gICAgaWYgKCF0aGlzLnNlc3Npb25JZCkge1xuICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcbiAgICAgIC8vICAgXCJHVyBERUJVR1wiLFxuICAgICAgLy8gICBgW0Vycm9yXSBUcnlpbmcgdG8gcmVzdW1lIGEgc2hhcmQgKGlkOiAke3NoYXJkSWR9KSB0aGF0IHdhcyBub3QgZmlyc3QgaWRlbnRpZmllZC5gLFxuICAgICAgLy8gKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuXG4gICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYFtTSEFSRF0gVHJ5aW5nIHRvIHJlc3VtZSBhIHNoYXJkIChpZDogJHt0aGlzLmlkfSkgd2hpY2ggd2FzIG5ldmVyIGlkZW50aWZpZWRgKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5SZXN1bWluZ1xuXG4gICAgLy8gQmVmb3JlIHdlIGNhbiByZXN1bWUsIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheS5cbiAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuUmVzdW1lLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgdG9rZW46IGBCb3QgJHt0aGlzLmdhdGV3YXlDb25maWcudG9rZW59YCxcbiAgICAgICAgICBzZXNzaW9uX2lkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICBzZXE6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlciA/PyAwXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVTVU1FRCcsICgpID0+IHJlc29sdmUoKSlcbiAgICAgIC8vIElmIGl0IGlzIGF0dGVtcHRlZCB0byByZXN1bWUgd2l0aCBhbiBpbnZhbGlkIHNlc3Npb24gaWQsXG4gICAgICAvLyBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkXG4gICAgICAvLyBOb3QgZXJyb3JpbmcgaGVyZSBzaW5jZSBpdCBpcyBlYXN5IHRoYXQgdGhpcyBoYXBwZW5zLCBhbHNvIGl0IHdvdWxkIGJlIG5vdCBjYXRjaGFibGVcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRVNVTUVEJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogU2VuZCBhIG1lc3NhZ2UgdG8gRGlzY29yZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaFByaW9yaXR5PWZhbHNlXSAtIFdoZXRoZXIgdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW5kIGFzYXAuXG4gICAqL1xuICBhc3luYyBzZW5kIChtZXNzYWdlOiBTaGFyZFNvY2tldFJlcXVlc3QsIGhpZ2hQcmlvcml0eSA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQmVmb3JlIGFjcXVpcmluZyBhIHRva2VuIGZyb20gdGhlIGJ1Y2tldCwgY2hlY2sgd2hldGhlciB0aGUgc2hhcmQgaXMgY3VycmVudGx5IG9mZmxpbmUgb3Igbm90LlxuICAgIC8vIEVsc2UgYnVja2V0IGFuZCB0b2tlbiB3YWl0IHRpbWUganVzdCBnZXQgd2FzdGVkLlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIGF3YWl0IHRoaXMuYnVja2V0LmFjcXVpcmUoMSwgaGlnaFByaW9yaXR5KVxuXG4gICAgLy8gSXQncyBwb3NzaWJsZSwgdGhhdCB0aGUgc2hhcmQgd2VudCBvZmZsaW5lIGFmdGVyIGEgdG9rZW4gaGFzIGJlZW4gYWNxdWlyZWQgZnJvbSB0aGUgYnVja2V0LlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIHRoaXMuc29ja2V0Py5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKVxuICB9XG5cbiAgLyoqIFNodXRkb3duIHRoZSB0aGlzLiBGb3JjZWZ1bGx5IGRpc2Nvbm5lY3QgdGhlIHNoYXJkIGZyb20gRGlzY29yZC4gVGhlIHNoYXJkIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgd2l0aCBEaXNjb3JkLiAqL1xuICBhc3luYyBzaHV0ZG93biAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd24sICdTaGFyZCBzaHV0dGluZyBkb3duLicpXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZS4gKi9cbiAgYXN5bmMgaGFuZGxlQ2xvc2UgKGNsb3NlOiBXZWJTb2NrZXQuQ2xvc2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vICAgZ2F0ZXdheS5kZWJ1ZyhcIkdXIENMT1NFRFwiLCB7IHNoYXJkSWQsIHBheWxvYWQ6IGV2ZW50IH0pO1xuXG4gICAgdGhpcy5zdG9wSGVhcnRiZWF0aW5nKClcblxuICAgIHN3aXRjaCAoY2xvc2UuY29kZSkge1xuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuVGVzdGluZ0ZpbmlzaGVkOiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIE9uIHRoZXNlIGNvZGVzIGEgbWFudWFsIHN0YXJ0IHdpbGwgYmUgZG9uZS5cbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlNodXRkb3duOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVJZGVudGlmeWluZzpcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlc2hhcmRlZDpcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuWm9tYmllZENvbm5lY3Rpb246IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuRGlzY29ubmVjdGVkXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcIkdXIENMT1NFRF9SRUNPTk5FQ1RcIiwgeyBzaGFyZElkLCBwYXlsb2FkOiBldmVudCB9KTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBHYXRld2F5IGNvbm5lY3Rpb24gY2xvc2VzIHdoaWNoIHJlcXVpcmUgYSBuZXcgaWRlbnRpZnkuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuVW5rbm93bk9wY29kZTpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3RBdXRoZW50aWNhdGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRTZXE6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuUmF0ZUxpbWl0ZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuU2Vzc2lvblRpbWVkT3V0OiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLklkZW50aWZ5aW5nXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgfVxuICAgICAgLy8gV2hlbiB0aGVzZSBjb2RlcyBhcmUgcmVjZWl2ZWQgc29tZXRoaW5nIHdlbnQgcmVhbGx5IHdyb25nLlxuICAgICAgLy8gT24gdGhvc2Ugd2UgY2Fubm90IHN0YXJ0IGEgcmVjb25uZWN0IGF0dGVtcHQuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuQXV0aGVudGljYXRpb25GYWlsZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuSW52YWxpZFNoYXJkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlNoYXJkaW5nUmVxdWlyZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuSW52YWxpZEFwaVZlcnNpb246XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuSW52YWxpZEludGVudHM6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuRGlzYWxsb3dlZEludGVudHM6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjbG9zZS5yZWFzb24gfHwgJ0Rpc2NvcmQgZ2F2ZSBubyByZWFzb24hIEdHISBZb3UgYnJva2UgRGlzY29yZCEnKVxuICAgICAgfVxuICAgICAgLy8gR2F0ZXdheSBjb25uZWN0aW9uIGNsb3NlcyBvbiB3aGljaCBhIHJlc3VtZSBpcyBhbGxvd2VkLlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlVua25vd25FcnJvcjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5EZWNvZGVFcnJvcjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5BbHJlYWR5QXV0aGVudGljYXRlZDpcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuUmVzdW1pbmdcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXN1bWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBIYW5kbGUgYW4gaW5jb21pbmcgZ2F0ZXdheSBtZXNzYWdlLiAqL1xuICBhc3luYyBoYW5kbGVNZXNzYWdlIChtZXNzYWdlOiBXZWJTb2NrZXQuTWVzc2FnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHByZVByb2Nlc3NNZXNzYWdlID0gbWVzc2FnZS5kYXRhXG5cbiAgICAvLyBJZiBtZXNzYWdlIGNvbXByZXNzaW9uIGlzIGVuYWJsZWQsXG4gICAgLy8gRGlzY29yZCBtaWdodCBzZW5kIHpsaWIgY29tcHJlc3NlZCBwYXlsb2Fkcy5cbiAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLmNvbXByZXNzICYmIHByZVByb2Nlc3NNZXNzYWdlIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgcHJlUHJvY2Vzc01lc3NhZ2UgPSBpbmZsYXRlU3luYyhhd2FpdCBwcmVQcm9jZXNzTWVzc2FnZS5hcnJheUJ1ZmZlcigpKS50b1N0cmluZygpXG4gICAgfVxuXG4gICAgLy8gU2FmZWd1YXJkIGluY2FzZSBkZWNvbXByZXNzaW9uIGZhaWxlZCB0byBtYWtlIGEgc3RyaW5nLlxuICAgIGlmICh0eXBlb2YgcHJlUHJvY2Vzc01lc3NhZ2UgIT09ICdzdHJpbmcnKSByZXR1cm5cblxuICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0gSlNPTi5wYXJzZShwcmVQcm9jZXNzTWVzc2FnZSkgYXMgRGlzY29yZEdhdGV3YXlQYXlsb2FkXG5cbiAgICAvLyBFZGdlIGNhc2Ugc3RhcnQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8vaXNzdWVzLzIzMTFcbiAgICB0aGlzLmhlYXJ0Lmxhc3RBY2sgPSBEYXRlLm5vdygpXG4gICAgLy8gTWFudWFsbHkgY2FsY3VsYXRpbmcgdGhlIHJvdW5kIHRyaXAgdGltZSBmb3IgdXNlcnMgd2hvIG5lZWQgaXQuXG4gICAgaWYgKHRoaXMuaGVhcnQubGFzdEJlYXQgJiYgIXRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkKSB7XG4gICAgICB0aGlzLmhlYXJ0LnJ0dCA9IHRoaXMuaGVhcnQubGFzdEFjayAtIHRoaXMuaGVhcnQubGFzdEJlYXRcbiAgICB9XG4gICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSB0cnVlXG4gICAgLy8gRWRnZSBjYXNlIGVuZCFcblxuICAgIHN3aXRjaCAobWVzc2FnZURhdGEub3ApIHtcbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0OiB7XG4gICAgICAgIC8vIFRPRE86IGNhbiB0aGlzIGFjdHVhbGx5IGhhcHBlblxuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHJldHVyblxuXG4gICAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICAgIC8vIERpc2NvcmQgcmFuZG9tbHkgc2VuZHMgdGhpcyByZXF1aXJpbmcgYW4gaW1tZWRpYXRlIGhlYXJ0YmVhdCBiYWNrLlxuICAgICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgICB0aGlzLnNvY2tldD8uc2VuZChcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgICAgZDogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlbGxvOiB7XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gKG1lc3NhZ2VEYXRhLmQgYXMgRGlzY29yZEhlbGxvKS5oZWFydGJlYXRfaW50ZXJ2YWxcblxuICAgICAgICB0aGlzLnN0YXJ0SGVhcnRiZWF0aW5nKGludGVydmFsKVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBTaGFyZFN0YXRlLlJlc3VtaW5nKSB7XG4gICAgICAgICAgLy8gSEVMTE8gaGFzIGJlZW4gc2VuZCBvbiBhIG5vbiByZXN1bWUgYWN0aW9uLlxuICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgc2hhcmQgc3RhcnRzIGEgbmV3IHNlc3Npb24sXG4gICAgICAgICAgLy8gdGhlcmVmb3JlIHRoZSByYXRlIGxpbWl0IGludGVydmFsIGhhcyBiZWVuIHJlc2V0IHRvby5cbiAgICAgICAgICB0aGlzLmJ1Y2tldCA9IGNyZWF0ZUxlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogdGhpcy5jYWxjdWxhdGVTYWZlUmVxdWVzdHMoKSxcbiAgICAgICAgICAgIHJlZmlsbEludGVydmFsOiA2MDAwMCxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogdGhpcy5jYWxjdWxhdGVTYWZlUmVxdWVzdHMoKSxcbiAgICAgICAgICAgIC8vIFdhaXRpbmcgYWNxdWlyZXMgc2hvdWxkIG5vdCBiZSBsb3N0IG9uIGEgcmUtaWRlbnRpZnkuXG4gICAgICAgICAgICB3YWl0aW5nOiB0aGlzLmJ1Y2tldC53YWl0aW5nXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlbGxvPy4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXRBQ0s6IHtcbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0QWNrPy4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5SZWNvbm5lY3Q6IHtcbiAgICAgICAgLy8gICBnYXRld2F5LmRlYnVnKFwiR1cgUkVDT05ORUNUXCIsIHsgc2hhcmRJZCB9KTtcblxuICAgICAgICB0aGlzLmV2ZW50cy5yZXF1ZXN0ZWRSZWNvbm5lY3Q/Lih0aGlzKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lKClcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5JbnZhbGlkU2Vzc2lvbjoge1xuICAgICAgICAvLyAgIGdhdGV3YXkuZGVidWcoXCJHVyBJTlZBTElEX1NFU1NJT05cIiwgeyBzaGFyZElkLCBwYXlsb2FkOiBtZXNzYWdlRGF0YSB9KTtcbiAgICAgICAgY29uc3QgcmVzdW1hYmxlID0gbWVzc2FnZURhdGEuZCBhcyBib29sZWFuXG5cbiAgICAgICAgdGhpcy5ldmVudHMuaW52YWxpZFNlc3Npb24/Lih0aGlzLCByZXN1bWFibGUpXG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB3YWl0IGZvciBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIDEgYW5kIDVcbiAgICAgICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNyZXN1bWluZ1xuICAgICAgICBhd2FpdCBkZWxheShNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogNCArIDEpICogMTAwMCkpXG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ0lOVkFMSURfU0VTU0lPTicpPy4obWVzc2FnZURhdGEpXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdJTlZBTElEX1NFU1NJT04nKVxuXG4gICAgICAgIC8vIFdoZW4gcmVzdW1hYmxlIGlzIGZhbHNlIHdlIG5lZWQgdG8gcmUtaWRlbnRpZnlcbiAgICAgICAgaWYgKCFyZXN1bWFibGUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2Vzc2lvbiBpcyBpbnZhbGlkIGJ1dCBhcHBhcmVudGx5IGl0IGlzIHJlc3VtYWJsZVxuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZSgpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWVzc2FnZURhdGEudCA9PT0gJ1JFU1VNRUQnKSB7XG4gICAgICAvLyBnYXRld2F5LmRlYnVnKFwiR1cgUkVTVU1FRFwiLCB7IHNoYXJkSWQgfSk7XG5cbiAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZFxuICAgICAgdGhpcy5ldmVudHMucmVzdW1lZD8uKHRoaXMpXG5cbiAgICAgIC8vIENvbnRpbnVlIHRoZSByZXF1ZXN0cyB3aGljaCBoYXZlIGJlZW4gcXVldWVkIHNpbmNlIHRoZSBzaGFyZCB3ZW50IG9mZmxpbmUuXG4gICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUubWFwKChyZXNvbHZlKSA9PiByZXNvbHZlKCkpXG5cbiAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdSRVNVTUVEJyk/LihtZXNzYWdlRGF0YSlcbiAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRVNVTUVEJylcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2VEYXRhLnQgPT09ICdSRUFEWScpIHtcbiAgICAgIC8vIEltcG9ydGFudCBmb3IgZnV0dXJlIHJlc3VtZXMuXG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBtZXNzYWdlRGF0YS5kIGFzIERpc2NvcmRSZWFkeVxuXG4gICAgICB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgPSBwYXlsb2FkLnJlc3VtZV9nYXRld2F5X3VybFxuXG4gICAgICB0aGlzLnNlc3Npb25JZCA9IHBheWxvYWQuc2Vzc2lvbl9pZFxuICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuQ29ubmVjdGVkXG5cbiAgICAgIC8vIENvbnRpbnVlIHRoZSByZXF1ZXN0cyB3aGljaCBoYXZlIGJlZW4gcXVldWVkIHNpbmNlIHRoZSBzaGFyZCB3ZW50IG9mZmxpbmUuXG4gICAgICAvLyBJbXBvcnRhbnQgd2hlbiB0aGlzIGlzIGEgcmUtaWRlbnRpZnlcbiAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5tYXAoKHJlc29sdmUpID0+IHJlc29sdmUoKSlcblxuICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ1JFQURZJyk/LihtZXNzYWdlRGF0YSlcbiAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgaXQgaXMgcHJlc2VudFxuICAgIC8vIGBzYCBjYW4gYmUgZWl0aGVyIGBudWxsYCBvciBhIGBudW1iZXJgLlxuICAgIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgdXBkYXRlIG1pc3NlcyB3aGVuIGBzYCBpcyBgMGAgd2UgY2hlY2sgYWdhaW5zdCBudWxsLlxuICAgIGlmIChtZXNzYWdlRGF0YS5zICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIgPSBtZXNzYWdlRGF0YS5zXG4gICAgfVxuXG4gICAgLy8gVGhlIG5lY2Vzc2FyeSBoYW5kbGluZyByZXF1aXJlZCBmb3IgdGhlIFNoYXJkcyBjb25uZWN0aW9uIGhhcyBiZWVuIGZpbmlzaGVkLlxuICAgIC8vIE5vdyB0aGUgZXZlbnQgY2FuIGJlIHNhZmVseSBmb3J3YXJkZWQuXG4gICAgdGhpcy5ldmVudHMubWVzc2FnZT8uKHRoaXMsIGNhbWVsaXplKG1lc3NhZ2VEYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBpbiBvcmRlciB0byBtYWtlIHRoZSBzaGFyZHMgcHJlc2VuY2UuXG4gICAqIGFzeW5jIGluIGNhc2UgZGV2cyBjcmVhdGUgdGhlIHByZXNlbmNlIGJhc2VkIG9uIGVnLiBkYXRhYmFzZSB2YWx1ZXMuXG4gICAqIFBhc3NpbmcgdGhlIHNoYXJkJ3MgaWQgdGhlcmUgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBkZXYgdG8gdXNlIHRoaXMgZnVuY3Rpb24uXG4gICAqL1xuICBhc3luYyBtYWtlUHJlc2VuY2UgKCk6IFByb21pc2U8Qm90U3RhdHVzVXBkYXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtcmV0dXJuXG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiogVGhpcyBmdW5jdGlvbiBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgbWFuYWdlbWVudCBwcm9jZXNzLCBpbiBvcmRlciB0byBrbm93IHdoZXRoZXIgaXRzIGZyZWUgdG8gaWRlbnRpZnkuIFdoZW4gdGhpcyBmdW5jdGlvbiByZXNvbHZlcywgdGhpcyBtZWFucyB0aGF0IHRoZSBzaGFyZCBpcyBhbGxvd2VkIHRvIHNlbmQgYW4gaWRlbnRpZnkgcGF5bG9hZCB0byBkaXNjb3JkLiAqL1xuICBhc3luYyByZXF1ZXN0SWRlbnRpZnkgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRPRE86IGhvdyB0byBoYW5kbGUgdGhpc1xuICAgIC8vIHJldHVybiBhd2FpdCBvcHRpb25zLnJlcXVlc3RJZGVudGlmeSh0aGlzLmlkKVxuICB9XG5cbiAgLyoqIFN0YXJ0IHNlbmRpbmcgaGVhcnRiZWF0IHBheWxvYWRzIHRvIERpc2NvcmQgaW4gdGhlIHByb3ZpZGVkIGludGVydmFsLiAqL1xuICBzdGFydEhlYXJ0YmVhdGluZyAoaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuICAgIC8vICAgZ2F0ZXdheS5kZWJ1ZyhcIkdXIEhFQVJUQkVBVElOR19TVEFSVEVEXCIsIHsgc2hhcmRJZCwgaW50ZXJ2YWwgfSk7XG5cbiAgICB0aGlzLmhlYXJ0LmludGVydmFsID0gaW50ZXJ2YWxcblxuICAgIC8vIE9ubHkgc2V0IHRoZSBzaGFyZCdzIHN0YXRlIHRvIGBVbmlkZW50aWZpZWRgXG4gICAgLy8gaWYgaGVhcnRiZWF0aW5nIGhhcyBub3QgYmVlbiBzdGFydGVkIGR1ZSB0byBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmIChbU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWQsIFNoYXJkU3RhdGUuT2ZmbGluZV0uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlVuaWRlbnRpZmllZFxuICAgIH1cblxuICAgIC8vIFRoZSBmaXJzdCBoZWFydGJlYXQgbmVlZHMgdG8gYmUgc2VuZCB3aXRoIGEgcmFuZG9tIGRlbGF5IGJldHdlZW4gYDBgIGFuZCBgaW50ZXJ2YWxgXG4gICAgLy8gVXNpbmcgYSBgc2V0VGltZW91dChfLCBqaXR0ZXIpYCBoZXJlIHRvIGFjY29tcGxpc2ggdGhhdC5cbiAgICAvLyBgTWF0aC5yYW5kb20oKWAgY2FuIGJlIGAwYCBzbyB3ZSB1c2UgYDAuNWAgaWYgdGhpcyBoYXBwZW5zXG4gICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNoZWFydGJlYXRpbmdcbiAgICBjb25zdCBqaXR0ZXIgPSBNYXRoLmNlaWwodGhpcy5oZWFydC5pbnRlcnZhbCAqIChNYXRoLnJhbmRvbSgpIHx8IDAuNSkpXG4gICAgdGhpcy5oZWFydC50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICB0aGlzLnNvY2tldD8uc2VuZChcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgZDogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyXG4gICAgICAgIH0pXG4gICAgICApXG5cbiAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEFmdGVyIHRoZSByYW5kb20gaGVhcnRiZWF0IGppdHRlciB3ZSBjYW4gc3RhcnQgYSBub3JtYWwgaW50ZXJ2YWwuXG4gICAgICB0aGlzLmhlYXJ0LmludGVydmFsSWQgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGdhdGV3YXkuZGVidWcoXCJHVyBERUJVR1wiLCBgUnVubmluZyBzZXRJbnRlcnZhbCBpbiBoZWFydGJlYXQgZmlsZS4gU2hhcmQ6ICR7c2hhcmRJZH1gKTtcblxuICAgICAgICAvLyBnYXRld2F5LmRlYnVnKFwiR1cgSEVBUlRCRUFUSU5HXCIsIHsgc2hhcmRJZCwgc2hhcmQ6IGN1cnJlbnRTaGFyZCB9KTtcblxuICAgICAgICAvLyBUaGUgU2hhcmQgZGlkIG5vdCByZWNlaXZlIGEgaGVhcnRiZWF0IEFDSyBmcm9tIERpc2NvcmQgaW4gdGltZSxcbiAgICAgICAgLy8gdGhlcmVmb3JlIHdlIGhhdmUgdG8gYXNzdW1lIHRoYXQgdGhlIGNvbm5lY3Rpb24gaGFzIGZhaWxlZCBvciBnb3QgXCJ6b21iaWVkXCIuXG4gICAgICAgIC8vIFRoZSBTaGFyZCBuZWVkcyB0byBzdGFydCBhIHJlLWlkZW50aWZ5IGFjdGlvbiBhY2NvcmRpbmdseS5cbiAgICAgICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNoZWFydGJlYXRpbmctZXhhbXBsZS1nYXRld2F5LWhlYXJ0YmVhdC1hY2tcbiAgICAgICAgaWYgKCF0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlpvbWJpZWRDb25uZWN0aW9uLCAnWm9tYmllZCBjb25uZWN0aW9uLCBkaWQgbm90IHJlY2VpdmUgYW4gaGVhcnRiZWF0IEFDSyBpbiB0aW1lLicpXG5cbiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pZGVudGlmeSgpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IGZhbHNlXG5cbiAgICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlclxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdD8uKHRoaXMpXG4gICAgICB9LCB0aGlzLmhlYXJ0LmludGVydmFsKVxuICAgIH0sIGppdHRlcilcbiAgfVxuXG4gIC8qKiBTdG9wIHRoZSBoZWFydGJlYXRpbmcgcHJvY2VzcyB3aXRoIGRpc2NvcmQuICovXG4gIHN0b3BIZWFydGJlYXRpbmcgKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIHRoZSByZWd1bGFyIGhlYXJ0YmVhdCBpbnRlcnZhbC5cbiAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnQuaW50ZXJ2YWxJZClcbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIFNoYXJkIGdvdCBjbG9zZWQgYmVmb3JlIHRoZSBmaXJzdCBqaXR0ZXJlZCBoZWFydGJlYXQuXG4gICAgLy8gVG8gZ28gc2FmZSB3ZSBzaG91bGQgY2xlYXIgdGhlIHJlbGF0ZWQgdGltZW91dCB0b28uXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnQudGltZW91dElkKVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRDcmVhdGVPcHRpb25zIHtcbiAgLyoqIFRoZSBzaGFyZCBpZCAqL1xuICBpZDogbnVtYmVyXG4gIC8qKiBUaGUgY29ubmVjdGlvbiBkZXRhaWxzICovXG4gIGNvbm5lY3Rpb246IFNoYXJkR2F0ZXdheUNvbmZpZ1xuICAvKiogVGhlIGV2ZW50IGhhbmRsZXJzIGZvciBldmVudHMgb24gdGhlIHNoYXJkLiAqL1xuICBldmVudHM6IFNoYXJkRXZlbnRzXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoYXJkXG4iXSwibmFtZXMiOlsiV2ViU29ja2V0IiwiR2F0ZXdheUNsb3NlRXZlbnRDb2RlcyIsIkdhdGV3YXlPcGNvZGVzIiwiY2FtZWxpemUiLCJjcmVhdGVMZWFreUJ1Y2tldCIsImRlbGF5IiwiaW5mbGF0ZVN5bmMiLCJTaGFyZFNvY2tldENsb3NlQ29kZXMiLCJTaGFyZFN0YXRlIiwiU2hhcmQiLCJtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2siLCJwcmV2aW91c1NlcXVlbmNlTnVtYmVyIiwicmF0ZUxpbWl0UmVzZXRJbnRlcnZhbCIsInN0YXRlIiwiT2ZmbGluZSIsInJlc3VtZUdhdGV3YXlVcmwiLCJldmVudHMiLCJvZmZsaW5lU2VuZFF1ZXVlIiwicmVzb2x2ZXMiLCJNYXAiLCJidWNrZXQiLCJtYXgiLCJyZWZpbGxJbnRlcnZhbCIsInJlZmlsbEFtb3VudCIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImlkIiwiY29ubmVjdGlvbiIsImhlYXJ0IiwiYWNrbm93bGVkZ2VkIiwiaW50ZXJ2YWwiLCJnYXRld2F5Q29uZmlnIiwiY2FsY3VsYXRlU2FmZVJlcXVlc3RzIiwic2FmZVJlcXVlc3RzIiwiTWF0aCIsImNlaWwiLCJjaGVja09mZmxpbmUiLCJoaWdoUHJpb3JpdHkiLCJpc09wZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInVuc2hpZnQiLCJwdXNoIiwiY2xvc2UiLCJjb2RlIiwicmVhc29uIiwic29ja2V0IiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJjb25uZWN0IiwiSWRlbnRpZnlpbmciLCJSZXN1bWluZyIsImluY2x1ZGVzIiwiQ29ubmVjdGluZyIsImNvbm5lY3RpbmciLCJ1cmwiLCJVUkwiLCJvcmlnaW4iLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJ2ZXJzaW9uIiwidG9TdHJpbmciLCJvbmVycm9yIiwiZXZlbnQiLCJjb25zb2xlIiwibG9nIiwiZXJyb3IiLCJvbmNsb3NlIiwiaGFuZGxlQ2xvc2UiLCJvbm1lc3NhZ2UiLCJtZXNzYWdlIiwiaGFuZGxlTWVzc2FnZSIsIm9ub3BlbiIsIlVuaWRlbnRpZmllZCIsImNvbm5lY3RlZCIsImlkZW50aWZ5IiwiUmVJZGVudGlmeWluZyIsImlkZW50aWZ5aW5nIiwicmVxdWVzdElkZW50aWZ5Iiwic2VuZCIsIm9wIiwiSWRlbnRpZnkiLCJkIiwidG9rZW4iLCJjb21wcmVzcyIsInByb3BlcnRpZXMiLCJpbnRlbnRzIiwic2hhcmQiLCJ0b3RhbFNoYXJkcyIsInByZXNlbmNlIiwibWFrZVByZXNlbmNlIiwiaWRlbnRpZmllZCIsImRlbGV0ZSIsInJlc3VtZSIsIlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uIiwic2Vzc2lvbklkIiwiUmVzdW1lIiwic2Vzc2lvbl9pZCIsInNlcSIsImFjcXVpcmUiLCJKU09OIiwic3RyaW5naWZ5Iiwic2h1dGRvd24iLCJTaHV0ZG93biIsInN0b3BIZWFydGJlYXRpbmciLCJUZXN0aW5nRmluaXNoZWQiLCJkaXNjb25uZWN0ZWQiLCJSZXNoYXJkZWQiLCJab21iaWVkQ29ubmVjdGlvbiIsIkRpc2Nvbm5lY3RlZCIsIlVua25vd25PcGNvZGUiLCJOb3RBdXRoZW50aWNhdGVkIiwiSW52YWxpZFNlcSIsIlJhdGVMaW1pdGVkIiwiU2Vzc2lvblRpbWVkT3V0IiwiQXV0aGVudGljYXRpb25GYWlsZWQiLCJJbnZhbGlkU2hhcmQiLCJTaGFyZGluZ1JlcXVpcmVkIiwiSW52YWxpZEFwaVZlcnNpb24iLCJJbnZhbGlkSW50ZW50cyIsIkRpc2FsbG93ZWRJbnRlbnRzIiwiRXJyb3IiLCJVbmtub3duRXJyb3IiLCJEZWNvZGVFcnJvciIsIkFscmVhZHlBdXRoZW50aWNhdGVkIiwicHJlUHJvY2Vzc01lc3NhZ2UiLCJkYXRhIiwiQmxvYiIsImFycmF5QnVmZmVyIiwibWVzc2FnZURhdGEiLCJwYXJzZSIsImxhc3RBY2siLCJEYXRlIiwibm93IiwibGFzdEJlYXQiLCJydHQiLCJIZWFydGJlYXQiLCJoZWFydGJlYXQiLCJIZWxsbyIsImhlYXJ0YmVhdF9pbnRlcnZhbCIsInN0YXJ0SGVhcnRiZWF0aW5nIiwid2FpdGluZyIsImhlbGxvIiwiSGVhcnRiZWF0QUNLIiwiaGVhcnRiZWF0QWNrIiwiUmVjb25uZWN0IiwicmVxdWVzdGVkUmVjb25uZWN0IiwiSW52YWxpZFNlc3Npb24iLCJyZXN1bWFibGUiLCJpbnZhbGlkU2Vzc2lvbiIsImZsb29yIiwicmFuZG9tIiwiZ2V0IiwidCIsIkNvbm5lY3RlZCIsInJlc3VtZWQiLCJtYXAiLCJwYXlsb2FkIiwicmVzdW1lX2dhdGV3YXlfdXJsIiwicyIsImppdHRlciIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJpbnRlcnZhbElkIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFlLGVBQWUsQUFFckMsUUFBU0MsMEJBQUFBLENBQXNCLENBQUVDLGtCQUFBQSxDQUFjLEtBQVEsbUJBQW1CLEFBQzFFLFFBQVNDLFlBQUFBLENBQVEsQ0FBRUMscUJBQUFBLENBQWlCLENBQUVDLFNBQUFBLENBQUssS0FBUSxtQkFBbUIsQUFDdEUsUUFBU0MsZUFBQUEsQ0FBVyxLQUFRLE1BQU0sQUFFbEMsUUFBU0MseUJBQUFBLENBQXFCLENBQUVDLGNBQUFBLENBQVUsS0FBUSxZQUFZLEFBRTlELFFBQU8sTUFBTUMsTUFRWEMsNEJBQXNDLEdBQUcsQUFFekNDLENBQUFBLHVCQUF3QyxJQUFJLEFBRTVDQyxDQUFBQSx1QkFBaUMsR0FBSyxBQU10Q0MsQ0FBQUEsTUFBUUwsRUFBV00sT0FBTyxBQUUxQkMsQ0FBQUEsaUJBQTJCLEVBQUUsQUFFN0JDLENBQUFBLE9BQXNCLENBQUMsQ0FBQyxBQUV4QkMsQ0FBQUEsaUJBQWlELEVBQUUsQUFFbkRDLENBQUFBLFNBQVcsSUFBSUMsR0FBd0YsQUFFdkdDLENBQUFBLE9BQVNoQixFQUFrQixDQUN6QmlCLElBQUssSUFDTEMsZUFBZ0IsSUFDaEJDLGFBQWMsR0FDaEIsRUFBRSxBQUVGQyxhQUFhQyxDQUEyQixDQUFFLENBQ3hDLElBQUksQ0FBQ0MsRUFBRSxDQUFHRCxFQUFRQyxFQUFFLENBQ3BCLElBQUksQ0FBQ0MsVUFBVSxDQUFHRixFQUFRRSxVQUFVLENBQ3BDLElBQUksQ0FBQ1gsTUFBTSxDQUFHUyxFQUFRVCxNQUFNLENBRTVCLElBQUksQ0FBQ1ksS0FBSyxDQUFHLENBQ1hDLGFBQWMsQ0FBQSxFQUNkQyxTQUFVLElBQ1osQ0FDRixDQUdBLElB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
|
package/dist/manager.d.ts
CHANGED
package/dist/manager.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createLeakyBucket as e,delay as t}from"@discordeno/utils";import r from"./Shard.js";export function createGatewayManager(s){s.connection||(s.connection={url:"wss://gateway.discord.gg",shards:1,sessionStartLimit:{maxConcurrency:1,remaining:1e3,total:1e3,resetAfter:864e5}});let o={events:s.events,compress:s.compress??!1,intents:s.intents??0,properties:{os:s.properties?.os??process.platform,browser:s.properties?.browser??"Discordeno",device:s.properties?.device??"Discordeno"},token:s.token,url:s.url??s.connection.url??"wss://gateway.discord.gg",version:s.version??10,connection:s.connection,totalShards:s.totalShards??s.connection.shards??1,lastShardId:s.lastShardId??
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2FtZWxpemUsIERpc2NvcmRHZXRHYXRld2F5Qm90IH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IExlYWt5QnVja2V0IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVMZWFreUJ1Y2tldCwgZGVsYXkgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuaW1wb3J0IHR5cGUgeyBTaGFyZEV2ZW50cyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5TWFuYWdlcihvcHRpb25zOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMpOiBHYXRld2F5TWFuYWdlciB7XG4gIGlmICghb3B0aW9ucy5jb25uZWN0aW9uKSB7XG4gICAgb3B0aW9ucy5jb25uZWN0aW9uID0ge1xuICAgICAgdXJsOiAnd3NzOi8vZ2F0ZXdheS5kaXNjb3JkLmdnJyxcbiAgICAgIHNoYXJkczogMSxcbiAgICAgIHNlc3Npb25TdGFydExpbWl0OiB7XG4gICAgICAgIG1heENvbmN1cnJlbmN5OiAxLFxuICAgICAgICByZW1haW5pbmc6IDEwMDAsXG4gICAgICAgIHRvdGFsOiAxMDAwLFxuICAgICAgICByZXNldEFmdGVyOiAxMDAwICogNjAgKiA2MCAqIDI0LFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICBjb25zdCBnYXRld2F5OiBHYXRld2F5TWFuYWdlciA9IHtcbiAgICBldmVudHM6IG9wdGlvbnMuZXZlbnRzLFxuICAgIGNvbXByZXNzOiBvcHRpb25zLmNvbXByZXNzID8/IGZhbHNlLFxuICAgIGludGVudHM6IG9wdGlvbnMuaW50ZW50cyA/PyAwLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG9zOiBvcHRpb25zLnByb3BlcnRpZXM/Lm9zID8/IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICBicm93c2VyOiBvcHRpb25zLnByb3BlcnRpZXM/LmJyb3dzZXIgPz8gJ0Rpc2NvcmRlbm8nLFxuICAgICAgZGV2aWNlOiBvcHRpb25zLnByb3BlcnRpZXM/LmRldmljZSA/PyAnRGlzY29yZGVubycsXG4gICAgfSxcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICB1cmw6IG9wdGlvbnMudXJsID8/IG9wdGlvbnMuY29ubmVjdGlvbi51cmwgPz8gJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGNvbm5lY3Rpb246IG9wdGlvbnMuY29ubmVjdGlvbixcbiAgICB0b3RhbFNoYXJkczogb3B0aW9ucy50b3RhbFNoYXJkcyA/PyBvcHRpb25zLmNvbm5lY3Rpb24uc2hhcmRzID8/IDEsXG4gICAgbGFzdFNoYXJkSWQ6IG9wdGlvbnMubGFzdFNoYXJkSWQgPz8gMSxcbiAgICBmaXJzdFNoYXJkSWQ6IG9wdGlvbnMuZmlyc3RTaGFyZElkID8/IDAsXG4gICAgdG90YWxXb3JrZXJzOiBvcHRpb25zLnRvdGFsV29ya2VycyA/PyA0LFxuICAgIHNoYXJkc1Blcldvcmtlcjogb3B0aW9ucy5zaGFyZHNQZXJXb3JrZXIgPz8gMjUsXG4gICAgc3Bhd25TaGFyZERlbGF5OiBvcHRpb25zLnNwYXduU2hhcmREZWxheSA/PyA1MzAwLFxuICAgIHNoYXJkczogbmV3IE1hcCgpLFxuICAgIGJ1Y2tldHM6IG5ldyBNYXAoKSxcblxuICAgIGNhbGN1bGF0ZVRvdGFsU2hhcmRzKCkge1xuICAgICAgLy8gQm90cyB1bmRlciAxMDBrIHNlcnZlcnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRvdGFsIHNoYXJkcy5cbiAgICAgIGlmIChnYXRld2F5LnRvdGFsU2hhcmRzIDwgMTAwKSByZXR1cm4gZ2F0ZXdheS50b3RhbFNoYXJkc1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYSBtdWx0aXBsZSBvZiBgbWF4Q29uY3VycmVuY3lgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgZ2F0ZXdheS50b3RhbFNoYXJkcyAvXG4gICAgICAgICAgICAvLyBJZiBgbWF4Q29uY3VycmVuY3lgIGlzIDEgd2UgY2FuIHNhZmVseSB1c2UgMTYuXG4gICAgICAgICAgICAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpLFxuICAgICAgICApICogZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5XG4gICAgICApXG4gICAgfSxcbiAgICBjYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKSB7XG4gICAgICAvLyBJZ25vcmUgZGVjaW1hbCBudW1iZXJzLlxuICAgICAgbGV0IHdvcmtlcklkID0gTWF0aC5mbG9vcihzaGFyZElkIC8gZ2F0ZXdheS5zaGFyZHNQZXJXb3JrZXIpXG4gICAgICAvLyBJZiB0aGUgd29ya2VySWQgb3ZlcmZsb3dzIHRoZSBtYXhpbWFsIGFsbG93ZWQgd29ya2VycyB3ZSBieSBkZWZhdWx0IGp1c3QgdXNlIHRvIGxhc3Qgd29ya2VyLlxuICAgICAgaWYgKHdvcmtlcklkID49IGdhdGV3YXkudG90YWxXb3JrZXJzKSB7XG4gICAgICAgIC8vIFRoZSBJZCBvZiB0aGUgbGFzdCBhdmFpbGFibGUgd29ya2VyIGlzIHRvdGFsIC0xXG4gICAgICAgIHdvcmtlcklkID0gZ2F0ZXdheS50b3RhbFdvcmtlcnMgLSAxXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3b3JrZXJJZFxuICAgIH0sXG4gICAgcHJlcGFyZUJ1Y2tldHMoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeTsgKytpKSB7XG4gICAgICAgIGdhdGV3YXkuYnVja2V0cy5zZXQoaSwge1xuICAgICAgICAgIHdvcmtlcnM6IFtdLFxuICAgICAgICAgIGxlYWs6IGNyZWF0ZUxlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogMSxcbiAgICAgICAgICAgIC8vIHNwZWNpYWwgbnVtYmVyIHdoaWNoIGlzIHByb3ZlbiB0byBiZSB3b3JraW5nIGRvbnQgY2hhbmdlXG4gICAgICAgICAgICByZWZpbGxJbnRlcnZhbDogZ2F0ZXdheS5zcGF3blNoYXJkRGVsYXksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIE9SR0FOSVpFIEFMTCBTSEFSRFMgSU5UTyBUSEVJUiBPV04gQlVDS0VUU1xuICAgICAgZm9yIChsZXQgc2hhcmRJZCA9IGdhdGV3YXkuZmlyc3RTaGFyZElkOyBzaGFyZElkIDw9IGdhdGV3YXkubGFzdFNoYXJkSWQ7ICsrc2hhcmRJZCkge1xuICAgICAgICBpZiAoc2hhcmRJZCA+PSBnYXRld2F5LnRvdGFsU2hhcmRzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0pIGlzIGJpZ2dlciBvciBlcXVhbCB0byB0aGUgdXNlZCBhbW91bnQgb2YgdXNlZCBzaGFyZHMgd2hpY2ggaXMgJHtnYXRld2F5LnRvdGFsU2hhcmRzfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWNrZXRJZCA9IHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3lcbiAgICAgICAgY29uc3QgYnVja2V0ID0gZ2F0ZXdheS5idWNrZXRzLmdldChidWNrZXRJZClcbiAgICAgICAgaWYgKGJ1Y2tldCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNoYXJkIChpZDogJHtzaGFyZElkfSkgZ290IGFzc2lnbmVkIHRvIGFuIGlsbGVnYWwgYnVja2V0IGlkOiAke2J1Y2tldElkfSwgZXhwZWN0ZWQgYSBidWNrZXQgaWQgYmV0d2VlbiAwIGFuZCAke1xuICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgLSAxXG4gICAgICAgICAgICB9YCxcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBGSU5EIEEgUVVFVUUgSU4gVEhJUyBCVUNLRVQgVEhBVCBIQVMgU1BBQ0VcbiAgICAgICAgLy8gY29uc3Qgd29ya2VyID0gYnVja2V0LndvcmtlcnMuZmluZCgodykgPT4gdy5xdWV1ZS5sZW5ndGggPCBnYXRld2F5LnNoYXJkc1Blcldvcmtlcik7XG4gICAgICAgIGNvbnN0IHdvcmtlcklkID0gZ2F0ZXdheS5jYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKVxuICAgICAgICBjb25zdCB3b3JrZXIgPSBidWNrZXQud29ya2Vycy5maW5kKCh3KSA9PiB3LmlkID09PSB3b3JrZXJJZClcbiAgICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAgIC8vIElGIFRIRSBRVUVVRSBIQVMgU1BBQ0UgSlVTVCBBREQgSVQgVE8gVEhJUyBRVUVVRVxuICAgICAgICAgIHdvcmtlci5xdWV1ZS5wdXNoKHNoYXJkSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVja2V0LndvcmtlcnMucHVzaCh7IGlkOiB3b3JrZXJJZCwgcXVldWU6IFtzaGFyZElkXSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzcGF3blNoYXJkcygpIHtcbiAgICAgIC8vIFBSRVBBUkVTIEFMTCBTSEFSRFMgSU4gU1BFQ0lGSUMgQlVDS0VUU1xuICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgIC8vIFByZWZlciBjb25jdXJyZW5jeSBvZiBmb3JFYWNoIGluc3RlYWQgb2YgZm9yb2ZcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKV0ubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlci5pZCwgc2hhcmRJZCwgYnVja2V0SWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC8vIGdhdGV3YXkuYnVja2V0cy5mb3JFYWNoKGFzeW5jIChidWNrZXQsIGJ1Y2tldElkKSA9PiB7XG4gICAgICAvLyAgIGZvciAoY29uc3Qgd29ya2VyIG9mIGJ1Y2tldC53b3JrZXJzKSB7XG4gICAgICAvLyAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgLy8gICAgICAgYXdhaXQgZ2F0ZXdheS50ZWxsV29ya2VyVG9JZGVudGlmeSh3b3JrZXIuaWQsIHNoYXJkSWQsIGJ1Y2tldElkKVxuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSlcbiAgICB9LFxuICAgIGFzeW5jIHNodXRkb3duKGNvZGUsIHJlYXNvbikge1xuICAgICAgZ2F0ZXdheS5zaGFyZHMuZm9yRWFjaCgoc2hhcmQpID0+IHNoYXJkLmNsb3NlKGNvZGUsIHJlYXNvbikpXG5cbiAgICAgIGF3YWl0IGRlbGF5KDUwMDApXG4gICAgfSxcbiAgICBhc3luYyB0ZWxsV29ya2VyVG9JZGVudGlmeSh3b3JrZXJJZCwgc2hhcmRJZCwgYnVja2V0SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnYXRld2F5LmlkZW50aWZ5KHNoYXJkSWQpXG4gICAgfSxcbiAgICBhc3luYyBpZGVudGlmeShzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGxldCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICBzaGFyZCA9IG5ldyBTaGFyZCh7XG4gICAgICAgICAgaWQ6IHNoYXJkSWQsXG4gICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgY29tcHJlc3M6IHRoaXMuY29tcHJlc3MsXG4gICAgICAgICAgICBpbnRlbnRzOiB0aGlzLmludGVudHMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50b2tlbixcbiAgICAgICAgICAgIHRvdGFsU2hhcmRzOiB0aGlzLnRvdGFsU2hhcmRzLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgc2hhcmQuaWRlbnRpZnkoKVxuICAgIH0sXG4gICAgYXN5bmMga2lsbChzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gdGhpcy5zaGFyZHMuZ2V0KHNoYXJkSWQpXG4gICAgICBpZiAoIXNoYXJkKSByZXR1cm5cblxuICAgICAgdGhpcy5zaGFyZHMuZGVsZXRlKHNoYXJkSWQpXG4gICAgICByZXR1cm4gYXdhaXQgc2hhcmQuc2h1dGRvd24oKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0SWRlbnRpZnkoKSB7fSxcbiAgfVxuXG4gIHJldHVybiBnYXRld2F5XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlR2F0ZXdheU1hbmFnZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBmaXJzdCBTaGFyZCB3aGljaCBzaG91bGQgZ2V0IGNvbnRyb2xsZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBmaXJzdFNoYXJkSWQ/OiBudW1iZXJcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBsYXN0IFNoYXJkIHdoaWNoIHNob3VsZCBnZXQgY29udHJvbGxlZCBieSB0aGlzIG1hbmFnZXIuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIGxhc3RTaGFyZElkPzogbnVtYmVyXG4gIC8qKlxuICAgKiBEZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc3Bhd25pbmcgbmV4dCBzaGFyZC4gT1BUSU1BTCBJUyBBQk9WRSA1MTAwLiBZT1UgRE9OJ1QgV0FOVCBUTyBISVQgVEhFIFJBVEUgTElNSVQhISFcbiAgICogQGRlZmF1bHQgNTMwMFxuICAgKi9cbiAgc3Bhd25TaGFyZERlbGF5PzogbnVtYmVyXG4gIC8qKlxuICAgKiBUb3RhbCBhbW91bnQgb2Ygc2hhcmRzIHlvdXIgYm90IHVzZXMuIFVzZWZ1bCBmb3IgemVyby1kb3dudGltZSB1cGRhdGVzIG9yIHJlc2hhcmRpbmcuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzPzogbnVtYmVyXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIHNoYXJkcyB0byBsb2FkIHBlciB3b3JrZXIuXG4gICAqIEBkZWZhdWx0IDI1XG4gICAqL1xuICBzaGFyZHNQZXJXb3JrZXI/OiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBhbW91bnQgb2Ygd29ya2VycyB0byB1c2UgZm9yIHlvdXIgYm90LlxuICAgKiBAZGVmYXVsdCA0XG4gICAqL1xuICB0b3RhbFdvcmtlcnM/OiBudW1iZXJcbiAgLyoqIEltcG9ydGFudCBkYXRhIHdoaWNoIGlzIHVzZWQgYnkgdGhlIG1hbmFnZXIgdG8gY29ubmVjdCBzaGFyZHMgdG8gdGhlIGdhdGV3YXkuICovXG4gIGNvbm5lY3Rpb24/OiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD5cbiAgLyoqIFdoZXRoZXIgaW5jb21pbmcgcGF5bG9hZHMgYXJlIGNvbXByZXNzZWQgdXNpbmcgemxpYi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbXByZXNzPzogYm9vbGVhblxuICAvKiogVGhlIGNhbGN1bGF0ZWQgaW50ZW50IHZhbHVlIG9mIHRoZSBldmVudHMgd2hpY2ggdGhlIHNoYXJkIHNob3VsZCByZWNlaXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBpbnRlbnRzPzogbnVtYmVyXG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHRoZSBzaGFyZCBydW5zIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJkYXJ3aW5cIiB8IFwibGludXhcIiB8IFwid2luZG93c1wiXG4gICAgICovXG4gICAgb3M6IHN0cmluZ1xuICAgIC8qKiBUaGUgXCJicm93c2VyXCIgd2hlcmUgdGhpcyBzaGFyZCBpcyBydW5uaW5nIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBicm93c2VyOiBzdHJpbmdcbiAgICAvKiogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgc2hhcmQgaXMgcnVubmluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgZGV2aWNlOiBzdHJpbmdcbiAgfVxuICAvKiogQm90IHRva2VuIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBVUkwgb2YgdGhlIGdhdGV3YXkgd2hpY2ggc2hvdWxkIGJlIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2dcIlxuICAgKi9cbiAgdXJsPzogc3RyaW5nXG4gIC8qKiBUaGUgZ2F0ZXdheSB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbj86IG51bWJlclxuICAvKiogVGhlIGV2ZW50cyBoYW5kbGVycyAqL1xuICBldmVudHM6IFNoYXJkRXZlbnRzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheU1hbmFnZXIgZXh0ZW5kcyBSZXF1aXJlZDxDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnM+IHtcbiAgLyoqIFRoZSBtYXggY29uY3VycmVuY3kgYnVja2V0cy4gVGhvc2Ugd2lsbCBiZSBjcmVhdGVkIHdoZW4gdGhlIGBzcGF3blNoYXJkc2AgKHdoaWNoIGNhbGxzIGBwcmVwYXJlQnVja2V0c2AgdW5kZXIgdGhlIGhvb2QpIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiAqL1xuICBidWNrZXRzOiBNYXA8XG4gICAgbnVtYmVyLFxuICAgIHtcbiAgICAgIHdvcmtlcnM6IEFycmF5PHsgaWQ6IG51bWJlcjsgcXVldWU6IG51bWJlcltdIH0+XG4gICAgICBsZWFrOiBMZWFreUJ1Y2tldFxuICAgIH1cbiAgPlxuICAvKiogVGhlIHNoYXJkcyB0aGF0IGFyZSBjcmVhdGVkLiAqL1xuICBzaGFyZHM6IE1hcDxudW1iZXIsIFNoYXJkPlxuICAvKiogRGV0ZXJtaW5lIG1heCBudW1iZXIgb2Ygc2hhcmRzIHRvIHVzZSBiYXNlZCB1cG9uIHRoZSBtYXggY29uY3VycmVuY3kuICovXG4gIGNhbGN1bGF0ZVRvdGFsU2hhcmRzOiAoKSA9PiBudW1iZXJcbiAgLyoqIERldGVybWluZSB0aGUgaWQgb2YgdGhlIHdvcmtlciB3aGljaCBpcyBoYW5kbGluZyBhIHNoYXJkLiAqL1xuICBjYWxjdWxhdGVXb3JrZXJJZDogKHNoYXJkSWQ6IG51bWJlcikgPT4gbnVtYmVyXG4gIC8qKiBQcmVwYXJlcyBhbGwgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciBpZGVudGlmeWluZyB0aGUgc2hhcmRzLiAqL1xuICBwcmVwYXJlQnVja2V0czogKCkgPT4gdm9pZFxuICAvKiogU3RhcnQgaWRlbnRpZnlpbmcgYWxsIHRoZSBzaGFyZHMuICovXG4gIHNwYXduU2hhcmRzOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTaHV0ZG93biBhbGwgc2hhcmRzLiAqL1xuICBzaHV0ZG93bjogKGNvZGU6IG51bWJlciwgcmVhc29uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEFsbG93cyB1c2VycyB0byBob29rIGluIGFuZCBjaGFuZ2UgdG8gY29tbXVuaWNhdGUgdG8gZGlmZmVyZW50IHdvcmtlcnMgYWNyb3NzIGRpZmZlcmVudCBzZXJ2ZXJzIG9yIGFueXRoaW5nIHRoZXkgbGlrZS4gRm9yIGV4YW1wbGUgdXNpbmcgcmVkaXMgcHVic3ViIHRvIHRhbGsgdG8gb3RoZXIgc2VydmVycy4gKi9cbiAgdGVsbFdvcmtlclRvSWRlbnRpZnk6ICh3b3JrZXJJZDogbnVtYmVyLCBzaGFyZElkOiBudW1iZXIsIGJ1Y2tldElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRlbGwgdGhlIG1hbmFnZXIgdG8gaWRlbnRpZnkgYSBTaGFyZC4gSWYgdGhpcyBTaGFyZCBpcyBub3QgYWxyZWFkeSBtYW5hZ2VkIHRoaXMgd2lsbCBhbHNvIGFkZCB0aGUgU2hhcmQgdG8gdGhlIG1hbmFnZXIuICovXG4gIGlkZW50aWZ5OiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBLaWxsIGEgc2hhcmQuIENsb3NlIGEgc2hhcmRzIGNvbm5lY3Rpb24gdG8gRGlzY29yZCdzIGdhdGV3YXkgKGlmIGFueSkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBtYW5hZ2VyLiAqL1xuICBraWxsOiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBUaGlzIGZ1bmN0aW9uIGNvbW11bmljYXRlcyB3aXRoIHRoZSBwYXJlbnQgbWFuYWdlciwgaW4gb3JkZXIgdG8ga25vdyB3aGV0aGVyIHRoaXMgbWFuYWdlciBpcyBhbGxvd2VkIHRvIGlkZW50aWZ5IGEgbmV3IHNoYXJkLiAqL1xuICByZXF1ZXN0SWRlbnRpZnk6ICgpID0+IFByb21pc2U8dm9pZD5cbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVMZWFreUJ1Y2tldCIsImRlbGF5IiwiU2hhcmQiLCJjcmVhdGVHYXRld2F5TWFuYWdlciIsIm9wdGlvbnMiLCJjb25uZWN0aW9uIiwidXJsIiwic2hhcmRzIiwic2Vzc2lvblN0YXJ0TGltaXQiLCJtYXhDb25jdXJyZW5jeSIsInJlbWFpbmluZyIsInRvdGFsIiwicmVzZXRBZnRlciIsImdhdGV3YXkiLCJldmVudHMiLCJjb21wcmVzcyIsImludGVudHMiLCJwcm9wZXJ0aWVzIiwib3MiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJicm93c2VyIiwiZGV2aWNlIiwidG9rZW4iLCJ2ZXJzaW9uIiwidG90YWxTaGFyZHMiLCJsYXN0U2hhcmRJZCIsImZpcnN0U2hhcmRJZCIsInRvdGFsV29ya2VycyIsInNoYXJkc1BlcldvcmtlciIsInNwYXduU2hhcmREZWxheSIsIk1hcCIsImJ1Y2tldHMiLCJjYWxjdWxhdGVUb3RhbFNoYXJkcyIsIk1hdGgiLCJjZWlsIiwiY2FsY3VsYXRlV29ya2VySWQiLCJzaGFyZElkIiwid29ya2VySWQiLCJmbG9vciIsInByZXBhcmVCdWNrZXRzIiwiaSIsInNldCIsIndvcmtlcnMiLCJsZWFrIiwibWF4IiwicmVmaWxsQW1vdW50IiwicmVmaWxsSW50ZXJ2YWwiLCJFcnJvciIsImJ1Y2tldElkIiwiYnVja2V0IiwiZ2V0Iiwid29ya2VyIiwiZmluZCIsInciLCJpZCIsInF1ZXVlIiwicHVzaCIsInNwYXduU2hhcmRzIiwiUHJvbWlzZSIsImFsbCIsImVudHJpZXMiLCJtYXAiLCJ0ZWxsV29ya2VyVG9JZGVudGlmeSIsInNodXRkb3duIiwiY29kZSIsInJlYXNvbiIsImZvckVhY2giLCJzaGFyZCIsImNsb3NlIiwiaWRlbnRpZnkiLCJraWxsIiwiZGVsZXRlIiwicmVxdWVzdElkZW50aWZ5Il0sIm1hcHBpbmdzIjoiQUFFQSxPQUFTQSxxQkFBQUEsQ0FBaUIsQ0FBRUMsU0FBQUEsQ0FBSyxLQUFRLG1CQUFtQixBQUM1RCxRQUFPQyxNQUFXLFlBQVksQUFHOUIsUUFBTyxTQUFTQyxxQkFBcUJDLENBQW9DLENBQWtCLENBQ3BGQSxFQUFRQyxVQUFVLEVBQ3JCRCxDQUFBQSxFQUFRQyxVQUFVLENBQUcsQ0FDbkJDLElBQUssMkJBQ0xDLE9BQVEsRUFDUkMsa0JBQW1CLENBQ2pCQyxlQUFnQixFQUNoQkMsVUFBVyxJQUNYQyxNQUFPLElBQ1BDLFdBQVksS0FDZCxDQUNGLENBQUEsRUFHRixJQUFNQyxFQUEwQixDQUM5QkMsT0FBUVYsRUFBUVUsTUFBTSxDQUN0QkMsU0FBVVgsRUFBUVcsUUFBUSxFQUFJLENBQUEsRUFDOUJDLFFBQVNaLEVBQVFZLE9BQU8sRUFBSSxFQUM1QkMsV0FBWSxDQUNWQyxHQUFJZCxFQUFRYSxVQUFVLEVBQUVDLElBQU1DLFFBQVFDLFFBQVEsQ0FDOUNDLFFBQVNqQixFQUFRYSxVQUFVLEVBQUVJLFNBQVcsYUFDeENDLE9BQVFsQixFQUFRYSxVQUFVLEVBQUVLLFFBQVUsWUFDeEMsRUFDQUMsTUFBT25CLEVBQVFtQixLQUFLLENBQ3BCakIsSUFBS0YsRUFBUUUsR0FBRyxFQUFJRixFQUFRQyxVQUFVLENBQUNDLEdBQUcsRUFBSSwyQkFDOUNrQixRQUFTcEIsRUFBUW9CLE9BQU8sRUFBSSxHQUM1Qm5CLFdBQVlELEVBQVFDLFVBQVUsQ0FDOUJvQixZQUFhckIsRUFBUXFCLFdBQVcsRUFBSXJCLEVBQVFDLFVBQVUsQ0FBQ0UsTUFBTSxFQUFJLEVBQ2pFbUIsWUFBYXRCLEVBQVFzQixXQUFXLEVBQUksRUFDcENDLGFBQWN2QixFQUFRdUIsWUFBWSxFQUFJLEVBQ3RDQyxhQUFjeEIsRUFBUXdCLFlBQVksRUFBSSxFQUN0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
|
|
1
|
+
import{createLeakyBucket as e,delay as t}from"@discordeno/utils";import r from"./Shard.js";export function createGatewayManager(s){s.connection||(s.connection={url:"wss://gateway.discord.gg",shards:1,sessionStartLimit:{maxConcurrency:1,remaining:1e3,total:1e3,resetAfter:864e5}});let o={events:s.events,compress:s.compress??!1,intents:s.intents??0,properties:{os:s.properties?.os??process.platform,browser:s.properties?.browser??"Discordeno",device:s.properties?.device??"Discordeno"},token:s.token,url:s.url??s.connection.url??"wss://gateway.discord.gg",version:s.version??10,connection:s.connection,totalShards:s.totalShards??s.connection.shards??1,lastShardId:s.lastShardId??0,firstShardId:s.firstShardId??0,totalWorkers:s.totalWorkers??4,shardsPerWorker:s.shardsPerWorker??25,spawnShardDelay:s.spawnShardDelay??5300,shards:new Map,buckets:new Map,calculateTotalShards:()=>o.totalShards<100?o.totalShards:Math.ceil(o.totalShards/(1===o.connection.sessionStartLimit.maxConcurrency?16:o.connection.sessionStartLimit.maxConcurrency))*o.connection.sessionStartLimit.maxConcurrency,calculateWorkerId(e){let t=Math.floor(e/o.shardsPerWorker);return t>=o.totalWorkers&&(t=o.totalWorkers-1),t},prepareBuckets(){for(let t=0;t<o.connection.sessionStartLimit.maxConcurrency;++t)o.buckets.set(t,{workers:[],leak:e({max:1,refillAmount:1,refillInterval:o.spawnShardDelay})});for(let r=o.firstShardId;r<=o.lastShardId;++r){if(r>=o.totalShards)throw Error(`Shard (id: ${r}) is bigger or equal to the used amount of used shards which is ${o.totalShards}`);let s=r%o.connection.sessionStartLimit.maxConcurrency,a=o.buckets.get(s);if(null==a)throw Error(`Shard (id: ${r}) got assigned to an illegal bucket id: ${s}, expected a bucket id between 0 and ${o.connection.sessionStartLimit.maxConcurrency-1}`);let n=o.calculateWorkerId(r),i=a.workers.find(e=>e.id===n);i?i.queue.push(r):a.workers.push({id:n,queue:[r]})}},async spawnShards(){o.prepareBuckets(),await Promise.all([...o.buckets.entries()].map(async([e,t])=>{for(let r of t.workers)for(let s of r.queue)await o.tellWorkerToIdentify(r.id,s,e)}))},async shutdown(e,r){o.shards.forEach(t=>t.close(e,r)),await t(5e3)},tellWorkerToIdentify:async(e,t,r)=>await o.identify(t),async identify(e){let t=this.shards.get(e);return t||(t=new r({id:e,connection:{compress:this.compress,intents:this.intents,properties:this.properties,token:this.token,totalShards:this.totalShards,url:this.url,version:this.version},events:s.events}),this.shards.set(e,t)),await t.identify()},async kill(e){let t=this.shards.get(e);if(t)return this.shards.delete(e),await t.shutdown()},async requestIdentify(){}};return o}
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2FtZWxpemUsIERpc2NvcmRHZXRHYXRld2F5Qm90IH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IExlYWt5QnVja2V0IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVMZWFreUJ1Y2tldCwgZGVsYXkgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuaW1wb3J0IHR5cGUgeyBTaGFyZEV2ZW50cyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5TWFuYWdlcihvcHRpb25zOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMpOiBHYXRld2F5TWFuYWdlciB7XG4gIGlmICghb3B0aW9ucy5jb25uZWN0aW9uKSB7XG4gICAgb3B0aW9ucy5jb25uZWN0aW9uID0ge1xuICAgICAgdXJsOiAnd3NzOi8vZ2F0ZXdheS5kaXNjb3JkLmdnJyxcbiAgICAgIHNoYXJkczogMSxcbiAgICAgIHNlc3Npb25TdGFydExpbWl0OiB7XG4gICAgICAgIG1heENvbmN1cnJlbmN5OiAxLFxuICAgICAgICByZW1haW5pbmc6IDEwMDAsXG4gICAgICAgIHRvdGFsOiAxMDAwLFxuICAgICAgICByZXNldEFmdGVyOiAxMDAwICogNjAgKiA2MCAqIDI0LFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICBjb25zdCBnYXRld2F5OiBHYXRld2F5TWFuYWdlciA9IHtcbiAgICBldmVudHM6IG9wdGlvbnMuZXZlbnRzLFxuICAgIGNvbXByZXNzOiBvcHRpb25zLmNvbXByZXNzID8/IGZhbHNlLFxuICAgIGludGVudHM6IG9wdGlvbnMuaW50ZW50cyA/PyAwLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG9zOiBvcHRpb25zLnByb3BlcnRpZXM/Lm9zID8/IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICBicm93c2VyOiBvcHRpb25zLnByb3BlcnRpZXM/LmJyb3dzZXIgPz8gJ0Rpc2NvcmRlbm8nLFxuICAgICAgZGV2aWNlOiBvcHRpb25zLnByb3BlcnRpZXM/LmRldmljZSA/PyAnRGlzY29yZGVubycsXG4gICAgfSxcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICB1cmw6IG9wdGlvbnMudXJsID8/IG9wdGlvbnMuY29ubmVjdGlvbi51cmwgPz8gJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGNvbm5lY3Rpb246IG9wdGlvbnMuY29ubmVjdGlvbixcbiAgICB0b3RhbFNoYXJkczogb3B0aW9ucy50b3RhbFNoYXJkcyA/PyBvcHRpb25zLmNvbm5lY3Rpb24uc2hhcmRzID8/IDEsXG4gICAgbGFzdFNoYXJkSWQ6IG9wdGlvbnMubGFzdFNoYXJkSWQgPz8gMCxcbiAgICBmaXJzdFNoYXJkSWQ6IG9wdGlvbnMuZmlyc3RTaGFyZElkID8/IDAsXG4gICAgdG90YWxXb3JrZXJzOiBvcHRpb25zLnRvdGFsV29ya2VycyA/PyA0LFxuICAgIHNoYXJkc1Blcldvcmtlcjogb3B0aW9ucy5zaGFyZHNQZXJXb3JrZXIgPz8gMjUsXG4gICAgc3Bhd25TaGFyZERlbGF5OiBvcHRpb25zLnNwYXduU2hhcmREZWxheSA/PyA1MzAwLFxuICAgIHNoYXJkczogbmV3IE1hcCgpLFxuICAgIGJ1Y2tldHM6IG5ldyBNYXAoKSxcblxuICAgIGNhbGN1bGF0ZVRvdGFsU2hhcmRzKCkge1xuICAgICAgLy8gQm90cyB1bmRlciAxMDBrIHNlcnZlcnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRvdGFsIHNoYXJkcy5cbiAgICAgIGlmIChnYXRld2F5LnRvdGFsU2hhcmRzIDwgMTAwKSByZXR1cm4gZ2F0ZXdheS50b3RhbFNoYXJkc1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYSBtdWx0aXBsZSBvZiBgbWF4Q29uY3VycmVuY3lgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgZ2F0ZXdheS50b3RhbFNoYXJkcyAvXG4gICAgICAgICAgICAvLyBJZiBgbWF4Q29uY3VycmVuY3lgIGlzIDEgd2UgY2FuIHNhZmVseSB1c2UgMTYuXG4gICAgICAgICAgICAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpLFxuICAgICAgICApICogZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5XG4gICAgICApXG4gICAgfSxcbiAgICBjYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKSB7XG4gICAgICAvLyBJZ25vcmUgZGVjaW1hbCBudW1iZXJzLlxuICAgICAgbGV0IHdvcmtlcklkID0gTWF0aC5mbG9vcihzaGFyZElkIC8gZ2F0ZXdheS5zaGFyZHNQZXJXb3JrZXIpXG4gICAgICAvLyBJZiB0aGUgd29ya2VySWQgb3ZlcmZsb3dzIHRoZSBtYXhpbWFsIGFsbG93ZWQgd29ya2VycyB3ZSBieSBkZWZhdWx0IGp1c3QgdXNlIHRvIGxhc3Qgd29ya2VyLlxuICAgICAgaWYgKHdvcmtlcklkID49IGdhdGV3YXkudG90YWxXb3JrZXJzKSB7XG4gICAgICAgIC8vIFRoZSBJZCBvZiB0aGUgbGFzdCBhdmFpbGFibGUgd29ya2VyIGlzIHRvdGFsIC0xXG4gICAgICAgIHdvcmtlcklkID0gZ2F0ZXdheS50b3RhbFdvcmtlcnMgLSAxXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3b3JrZXJJZFxuICAgIH0sXG4gICAgcHJlcGFyZUJ1Y2tldHMoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeTsgKytpKSB7XG4gICAgICAgIGdhdGV3YXkuYnVja2V0cy5zZXQoaSwge1xuICAgICAgICAgIHdvcmtlcnM6IFtdLFxuICAgICAgICAgIGxlYWs6IGNyZWF0ZUxlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogMSxcbiAgICAgICAgICAgIC8vIHNwZWNpYWwgbnVtYmVyIHdoaWNoIGlzIHByb3ZlbiB0byBiZSB3b3JraW5nIGRvbnQgY2hhbmdlXG4gICAgICAgICAgICByZWZpbGxJbnRlcnZhbDogZ2F0ZXdheS5zcGF3blNoYXJkRGVsYXksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIE9SR0FOSVpFIEFMTCBTSEFSRFMgSU5UTyBUSEVJUiBPV04gQlVDS0VUU1xuICAgICAgZm9yIChsZXQgc2hhcmRJZCA9IGdhdGV3YXkuZmlyc3RTaGFyZElkOyBzaGFyZElkIDw9IGdhdGV3YXkubGFzdFNoYXJkSWQ7ICsrc2hhcmRJZCkge1xuICAgICAgICBpZiAoc2hhcmRJZCA+PSBnYXRld2F5LnRvdGFsU2hhcmRzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0pIGlzIGJpZ2dlciBvciBlcXVhbCB0byB0aGUgdXNlZCBhbW91bnQgb2YgdXNlZCBzaGFyZHMgd2hpY2ggaXMgJHtnYXRld2F5LnRvdGFsU2hhcmRzfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWNrZXRJZCA9IHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3lcbiAgICAgICAgY29uc3QgYnVja2V0ID0gZ2F0ZXdheS5idWNrZXRzLmdldChidWNrZXRJZClcbiAgICAgICAgaWYgKGJ1Y2tldCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNoYXJkIChpZDogJHtzaGFyZElkfSkgZ290IGFzc2lnbmVkIHRvIGFuIGlsbGVnYWwgYnVja2V0IGlkOiAke2J1Y2tldElkfSwgZXhwZWN0ZWQgYSBidWNrZXQgaWQgYmV0d2VlbiAwIGFuZCAke1xuICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgLSAxXG4gICAgICAgICAgICB9YCxcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBGSU5EIEEgUVVFVUUgSU4gVEhJUyBCVUNLRVQgVEhBVCBIQVMgU1BBQ0VcbiAgICAgICAgLy8gY29uc3Qgd29ya2VyID0gYnVja2V0LndvcmtlcnMuZmluZCgodykgPT4gdy5xdWV1ZS5sZW5ndGggPCBnYXRld2F5LnNoYXJkc1Blcldvcmtlcik7XG4gICAgICAgIGNvbnN0IHdvcmtlcklkID0gZ2F0ZXdheS5jYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKVxuICAgICAgICBjb25zdCB3b3JrZXIgPSBidWNrZXQud29ya2Vycy5maW5kKCh3KSA9PiB3LmlkID09PSB3b3JrZXJJZClcbiAgICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAgIC8vIElGIFRIRSBRVUVVRSBIQVMgU1BBQ0UgSlVTVCBBREQgSVQgVE8gVEhJUyBRVUVVRVxuICAgICAgICAgIHdvcmtlci5xdWV1ZS5wdXNoKHNoYXJkSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVja2V0LndvcmtlcnMucHVzaCh7IGlkOiB3b3JrZXJJZCwgcXVldWU6IFtzaGFyZElkXSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzcGF3blNoYXJkcygpIHtcbiAgICAgIC8vIFBSRVBBUkVTIEFMTCBTSEFSRFMgSU4gU1BFQ0lGSUMgQlVDS0VUU1xuICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgIC8vIFByZWZlciBjb25jdXJyZW5jeSBvZiBmb3JFYWNoIGluc3RlYWQgb2YgZm9yb2ZcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKV0ubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlci5pZCwgc2hhcmRJZCwgYnVja2V0SWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC8vIGdhdGV3YXkuYnVja2V0cy5mb3JFYWNoKGFzeW5jIChidWNrZXQsIGJ1Y2tldElkKSA9PiB7XG4gICAgICAvLyAgIGZvciAoY29uc3Qgd29ya2VyIG9mIGJ1Y2tldC53b3JrZXJzKSB7XG4gICAgICAvLyAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgLy8gICAgICAgYXdhaXQgZ2F0ZXdheS50ZWxsV29ya2VyVG9JZGVudGlmeSh3b3JrZXIuaWQsIHNoYXJkSWQsIGJ1Y2tldElkKVxuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSlcbiAgICB9LFxuICAgIGFzeW5jIHNodXRkb3duKGNvZGUsIHJlYXNvbikge1xuICAgICAgZ2F0ZXdheS5zaGFyZHMuZm9yRWFjaCgoc2hhcmQpID0+IHNoYXJkLmNsb3NlKGNvZGUsIHJlYXNvbikpXG5cbiAgICAgIGF3YWl0IGRlbGF5KDUwMDApXG4gICAgfSxcbiAgICBhc3luYyB0ZWxsV29ya2VyVG9JZGVudGlmeSh3b3JrZXJJZCwgc2hhcmRJZCwgYnVja2V0SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnYXRld2F5LmlkZW50aWZ5KHNoYXJkSWQpXG4gICAgfSxcbiAgICBhc3luYyBpZGVudGlmeShzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGxldCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICBzaGFyZCA9IG5ldyBTaGFyZCh7XG4gICAgICAgICAgaWQ6IHNoYXJkSWQsXG4gICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgY29tcHJlc3M6IHRoaXMuY29tcHJlc3MsXG4gICAgICAgICAgICBpbnRlbnRzOiB0aGlzLmludGVudHMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50b2tlbixcbiAgICAgICAgICAgIHRvdGFsU2hhcmRzOiB0aGlzLnRvdGFsU2hhcmRzLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgc2hhcmQuaWRlbnRpZnkoKVxuICAgIH0sXG4gICAgYXN5bmMga2lsbChzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gdGhpcy5zaGFyZHMuZ2V0KHNoYXJkSWQpXG4gICAgICBpZiAoIXNoYXJkKSByZXR1cm5cblxuICAgICAgdGhpcy5zaGFyZHMuZGVsZXRlKHNoYXJkSWQpXG4gICAgICByZXR1cm4gYXdhaXQgc2hhcmQuc2h1dGRvd24oKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0SWRlbnRpZnkoKSB7fSxcbiAgfVxuXG4gIHJldHVybiBnYXRld2F5XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlR2F0ZXdheU1hbmFnZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBmaXJzdCBTaGFyZCB3aGljaCBzaG91bGQgZ2V0IGNvbnRyb2xsZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBmaXJzdFNoYXJkSWQ/OiBudW1iZXJcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBsYXN0IFNoYXJkIHdoaWNoIHNob3VsZCBnZXQgY29udHJvbGxlZCBieSB0aGlzIG1hbmFnZXIuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGxhc3RTaGFyZElkPzogbnVtYmVyXG4gIC8qKlxuICAgKiBEZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc3Bhd25pbmcgbmV4dCBzaGFyZC4gT1BUSU1BTCBJUyBBQk9WRSA1MTAwLiBZT1UgRE9OJ1QgV0FOVCBUTyBISVQgVEhFIFJBVEUgTElNSVQhISFcbiAgICogQGRlZmF1bHQgNTMwMFxuICAgKi9cbiAgc3Bhd25TaGFyZERlbGF5PzogbnVtYmVyXG4gIC8qKlxuICAgKiBUb3RhbCBhbW91bnQgb2Ygc2hhcmRzIHlvdXIgYm90IHVzZXMuIFVzZWZ1bCBmb3IgemVyby1kb3dudGltZSB1cGRhdGVzIG9yIHJlc2hhcmRpbmcuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzPzogbnVtYmVyXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIHNoYXJkcyB0byBsb2FkIHBlciB3b3JrZXIuXG4gICAqIEBkZWZhdWx0IDI1XG4gICAqL1xuICBzaGFyZHNQZXJXb3JrZXI/OiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBhbW91bnQgb2Ygd29ya2VycyB0byB1c2UgZm9yIHlvdXIgYm90LlxuICAgKiBAZGVmYXVsdCA0XG4gICAqL1xuICB0b3RhbFdvcmtlcnM/OiBudW1iZXJcbiAgLyoqIEltcG9ydGFudCBkYXRhIHdoaWNoIGlzIHVzZWQgYnkgdGhlIG1hbmFnZXIgdG8gY29ubmVjdCBzaGFyZHMgdG8gdGhlIGdhdGV3YXkuICovXG4gIGNvbm5lY3Rpb24/OiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD5cbiAgLyoqIFdoZXRoZXIgaW5jb21pbmcgcGF5bG9hZHMgYXJlIGNvbXByZXNzZWQgdXNpbmcgemxpYi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbXByZXNzPzogYm9vbGVhblxuICAvKiogVGhlIGNhbGN1bGF0ZWQgaW50ZW50IHZhbHVlIG9mIHRoZSBldmVudHMgd2hpY2ggdGhlIHNoYXJkIHNob3VsZCByZWNlaXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBpbnRlbnRzPzogbnVtYmVyXG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHRoZSBzaGFyZCBydW5zIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJkYXJ3aW5cIiB8IFwibGludXhcIiB8IFwid2luZG93c1wiXG4gICAgICovXG4gICAgb3M6IHN0cmluZ1xuICAgIC8qKiBUaGUgXCJicm93c2VyXCIgd2hlcmUgdGhpcyBzaGFyZCBpcyBydW5uaW5nIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBicm93c2VyOiBzdHJpbmdcbiAgICAvKiogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgc2hhcmQgaXMgcnVubmluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgZGV2aWNlOiBzdHJpbmdcbiAgfVxuICAvKiogQm90IHRva2VuIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBVUkwgb2YgdGhlIGdhdGV3YXkgd2hpY2ggc2hvdWxkIGJlIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2dcIlxuICAgKi9cbiAgdXJsPzogc3RyaW5nXG4gIC8qKiBUaGUgZ2F0ZXdheSB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbj86IG51bWJlclxuICAvKiogVGhlIGV2ZW50cyBoYW5kbGVycyAqL1xuICBldmVudHM6IFNoYXJkRXZlbnRzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheU1hbmFnZXIgZXh0ZW5kcyBSZXF1aXJlZDxDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnM+IHtcbiAgLyoqIFRoZSBtYXggY29uY3VycmVuY3kgYnVja2V0cy4gVGhvc2Ugd2lsbCBiZSBjcmVhdGVkIHdoZW4gdGhlIGBzcGF3blNoYXJkc2AgKHdoaWNoIGNhbGxzIGBwcmVwYXJlQnVja2V0c2AgdW5kZXIgdGhlIGhvb2QpIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiAqL1xuICBidWNrZXRzOiBNYXA8XG4gICAgbnVtYmVyLFxuICAgIHtcbiAgICAgIHdvcmtlcnM6IEFycmF5PHsgaWQ6IG51bWJlcjsgcXVldWU6IG51bWJlcltdIH0+XG4gICAgICBsZWFrOiBMZWFreUJ1Y2tldFxuICAgIH1cbiAgPlxuICAvKiogVGhlIHNoYXJkcyB0aGF0IGFyZSBjcmVhdGVkLiAqL1xuICBzaGFyZHM6IE1hcDxudW1iZXIsIFNoYXJkPlxuICAvKiogRGV0ZXJtaW5lIG1heCBudW1iZXIgb2Ygc2hhcmRzIHRvIHVzZSBiYXNlZCB1cG9uIHRoZSBtYXggY29uY3VycmVuY3kuICovXG4gIGNhbGN1bGF0ZVRvdGFsU2hhcmRzOiAoKSA9PiBudW1iZXJcbiAgLyoqIERldGVybWluZSB0aGUgaWQgb2YgdGhlIHdvcmtlciB3aGljaCBpcyBoYW5kbGluZyBhIHNoYXJkLiAqL1xuICBjYWxjdWxhdGVXb3JrZXJJZDogKHNoYXJkSWQ6IG51bWJlcikgPT4gbnVtYmVyXG4gIC8qKiBQcmVwYXJlcyBhbGwgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciBpZGVudGlmeWluZyB0aGUgc2hhcmRzLiAqL1xuICBwcmVwYXJlQnVja2V0czogKCkgPT4gdm9pZFxuICAvKiogU3RhcnQgaWRlbnRpZnlpbmcgYWxsIHRoZSBzaGFyZHMuICovXG4gIHNwYXduU2hhcmRzOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTaHV0ZG93biBhbGwgc2hhcmRzLiAqL1xuICBzaHV0ZG93bjogKGNvZGU6IG51bWJlciwgcmVhc29uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEFsbG93cyB1c2VycyB0byBob29rIGluIGFuZCBjaGFuZ2UgdG8gY29tbXVuaWNhdGUgdG8gZGlmZmVyZW50IHdvcmtlcnMgYWNyb3NzIGRpZmZlcmVudCBzZXJ2ZXJzIG9yIGFueXRoaW5nIHRoZXkgbGlrZS4gRm9yIGV4YW1wbGUgdXNpbmcgcmVkaXMgcHVic3ViIHRvIHRhbGsgdG8gb3RoZXIgc2VydmVycy4gKi9cbiAgdGVsbFdvcmtlclRvSWRlbnRpZnk6ICh3b3JrZXJJZDogbnVtYmVyLCBzaGFyZElkOiBudW1iZXIsIGJ1Y2tldElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRlbGwgdGhlIG1hbmFnZXIgdG8gaWRlbnRpZnkgYSBTaGFyZC4gSWYgdGhpcyBTaGFyZCBpcyBub3QgYWxyZWFkeSBtYW5hZ2VkIHRoaXMgd2lsbCBhbHNvIGFkZCB0aGUgU2hhcmQgdG8gdGhlIG1hbmFnZXIuICovXG4gIGlkZW50aWZ5OiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBLaWxsIGEgc2hhcmQuIENsb3NlIGEgc2hhcmRzIGNvbm5lY3Rpb24gdG8gRGlzY29yZCdzIGdhdGV3YXkgKGlmIGFueSkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBtYW5hZ2VyLiAqL1xuICBraWxsOiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBUaGlzIGZ1bmN0aW9uIGNvbW11bmljYXRlcyB3aXRoIHRoZSBwYXJlbnQgbWFuYWdlciwgaW4gb3JkZXIgdG8ga25vdyB3aGV0aGVyIHRoaXMgbWFuYWdlciBpcyBhbGxvd2VkIHRvIGlkZW50aWZ5IGEgbmV3IHNoYXJkLiAqL1xuICByZXF1ZXN0SWRlbnRpZnk6ICgpID0+IFByb21pc2U8dm9pZD5cbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVMZWFreUJ1Y2tldCIsImRlbGF5IiwiU2hhcmQiLCJjcmVhdGVHYXRld2F5TWFuYWdlciIsIm9wdGlvbnMiLCJjb25uZWN0aW9uIiwidXJsIiwic2hhcmRzIiwic2Vzc2lvblN0YXJ0TGltaXQiLCJtYXhDb25jdXJyZW5jeSIsInJlbWFpbmluZyIsInRvdGFsIiwicmVzZXRBZnRlciIsImdhdGV3YXkiLCJldmVudHMiLCJjb21wcmVzcyIsImludGVudHMiLCJwcm9wZXJ0aWVzIiwib3MiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJicm93c2VyIiwiZGV2aWNlIiwidG9rZW4iLCJ2ZXJzaW9uIiwidG90YWxTaGFyZHMiLCJsYXN0U2hhcmRJZCIsImZpcnN0U2hhcmRJZCIsInRvdGFsV29ya2VycyIsInNoYXJkc1BlcldvcmtlciIsInNwYXduU2hhcmREZWxheSIsIk1hcCIsImJ1Y2tldHMiLCJjYWxjdWxhdGVUb3RhbFNoYXJkcyIsIk1hdGgiLCJjZWlsIiwiY2FsY3VsYXRlV29ya2VySWQiLCJzaGFyZElkIiwid29ya2VySWQiLCJmbG9vciIsInByZXBhcmVCdWNrZXRzIiwiaSIsInNldCIsIndvcmtlcnMiLCJsZWFrIiwibWF4IiwicmVmaWxsQW1vdW50IiwicmVmaWxsSW50ZXJ2YWwiLCJFcnJvciIsImJ1Y2tldElkIiwiYnVja2V0IiwiZ2V0Iiwid29ya2VyIiwiZmluZCIsInciLCJpZCIsInF1ZXVlIiwicHVzaCIsInNwYXduU2hhcmRzIiwiUHJvbWlzZSIsImFsbCIsImVudHJpZXMiLCJtYXAiLCJ0ZWxsV29ya2VyVG9JZGVudGlmeSIsInNodXRkb3duIiwiY29kZSIsInJlYXNvbiIsImZvckVhY2giLCJzaGFyZCIsImNsb3NlIiwiaWRlbnRpZnkiLCJraWxsIiwiZGVsZXRlIiwicmVxdWVzdElkZW50aWZ5Il0sIm1hcHBpbmdzIjoiQUFFQSxPQUFTQSxxQkFBQUEsQ0FBaUIsQ0FBRUMsU0FBQUEsQ0FBSyxLQUFRLG1CQUFtQixBQUM1RCxRQUFPQyxNQUFXLFlBQVksQUFHOUIsUUFBTyxTQUFTQyxxQkFBcUJDLENBQW9DLENBQWtCLENBQ3BGQSxFQUFRQyxVQUFVLEVBQ3JCRCxDQUFBQSxFQUFRQyxVQUFVLENBQUcsQ0FDbkJDLElBQUssMkJBQ0xDLE9BQVEsRUFDUkMsa0JBQW1CLENBQ2pCQyxlQUFnQixFQUNoQkMsVUFBVyxJQUNYQyxNQUFPLElBQ1BDLFdBQVksS0FDZCxDQUNGLENBQUEsRUFHRixJQUFNQyxFQUEwQixDQUM5QkMsT0FBUVYsRUFBUVUsTUFBTSxDQUN0QkMsU0FBVVgsRUFBUVcsUUFBUSxFQUFJLENBQUEsRUFDOUJDLFFBQVNaLEVBQVFZLE9BQU8sRUFBSSxFQUM1QkMsV0FBWSxDQUNWQyxHQUFJZCxFQUFRYSxVQUFVLEVBQUVDLElBQU1DLFFBQVFDLFFBQVEsQ0FDOUNDLFFBQVNqQixFQUFRYSxVQUFVLEVBQUVJLFNBQVcsYUFDeENDLE9BQVFsQixFQUFRYSxVQUFVLEVBQUVLLFFBQVUsWUFDeEMsRUFDQUMsTUFBT25CLEVBQVFtQixLQUFLLENBQ3BCakIsSUFBS0YsRUFBUUUsR0FBRyxFQUFJRixFQUFRQyxVQUFVLENBQUNDLEdBQUcsRUFBSSwyQkFDOUNrQixRQUFTcEIsRUFBUW9CLE9BQU8sRUFBSSxHQUM1Qm5CLFdBQVlELEVBQVFDLFVBQVUsQ0FDOUJvQixZQUFhckIsRUFBUXFCLFdBQVcsRUFBSXJCLEVBQVFDLFVBQVUsQ0FBQ0UsTUFBTSxFQUFJLEVBQ2pFbUIsWUFBYXRCLEVBQVFzQixXQUFXLEVBQUksRUFDcENDLGFBQWN2QixFQUFRdUIsWUFBWSxFQUFJLEVBQ3RDQyxhQUFjeEIsRUFBUXdCLFlBQVksRUFBSSxFQUN0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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@discordeno/gateway",
|
|
3
|
-
"version": "19.0.0-next.
|
|
3
|
+
"version": "19.0.0-next.c1efa83",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -23,9 +23,10 @@
|
|
|
23
23
|
"test:test-type": "tsc --project tsconfig.test.json"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@discordeno/types": "19.0.0-next.
|
|
27
|
-
"@discordeno/utils": "19.0.0-next.
|
|
28
|
-
"ws": "^
|
|
26
|
+
"@discordeno/types": "19.0.0-next.c1efa83",
|
|
27
|
+
"@discordeno/utils": "19.0.0-next.c1efa83",
|
|
28
|
+
"isomorphic-ws": "^5.0.0",
|
|
29
|
+
"ws": "^8.12.0"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
32
|
"@swc/cli": "^0.1.57",
|