@jsprismarine/prismarine 0.11.0 → 0.11.1
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/CHANGELOG.md +16 -0
- package/dist/Server.cjs.cjs +8 -11
- package/dist/Server.d.ts.map +1 -1
- package/dist/Server.es.js +8 -11
- package/dist/package.json.cjs.cjs +1 -1
- package/dist/package.json.es.js +1 -1
- package/package.json +10 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @jsprismarine/prismarine
|
|
2
2
|
|
|
3
|
+
## 0.11.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`a79d837`](https://github.com/JSPrismarine/JSPrismarine/commit/a79d837e132bd2fbf1a91452b680341dafa76fe2) Thanks [@filiphsps](https://github.com/filiphsps)! - Fix shutting down the server sometimes leaving socket open.
|
|
8
|
+
|
|
9
|
+
- Updated dependencies []:
|
|
10
|
+
- @jsprismarine/color-parser@0.11.1
|
|
11
|
+
- @jsprismarine/errors@0.11.1
|
|
12
|
+
- @jsprismarine/logger@0.11.1
|
|
13
|
+
- @jsprismarine/math@0.11.1
|
|
14
|
+
- @jsprismarine/minecraft@0.11.1
|
|
15
|
+
- @jsprismarine/nbt@0.11.1
|
|
16
|
+
- @jsprismarine/protocol@0.11.1
|
|
17
|
+
- @jsprismarine/raknet@0.11.1
|
|
18
|
+
|
|
3
19
|
## 0.11.0
|
|
4
20
|
|
|
5
21
|
### Minor Changes
|
package/dist/Server.cjs.cjs
CHANGED
|
@@ -101,14 +101,17 @@ class Server extends events_EventEmitter.EventEmitter {
|
|
|
101
101
|
* @internal
|
|
102
102
|
*/
|
|
103
103
|
async enable() {
|
|
104
|
+
await block_BlockMappings.BlockMappings.initMappings(this);
|
|
104
105
|
await this.config.enable();
|
|
105
106
|
await this.console?.enable();
|
|
106
107
|
await this.logger.enable();
|
|
107
108
|
await this.permissionManager.enable();
|
|
108
|
-
await this.
|
|
109
|
+
await this.packetRegistry.enable();
|
|
109
110
|
await this.itemManager.enable();
|
|
110
111
|
await this.blockManager.enable();
|
|
112
|
+
await this.banManager.enable();
|
|
111
113
|
await this.commandManager.enable();
|
|
114
|
+
await this.worldManager.enable();
|
|
112
115
|
this.logger.setConsole(this.console);
|
|
113
116
|
}
|
|
114
117
|
/**
|
|
@@ -119,9 +122,9 @@ class Server extends events_EventEmitter.EventEmitter {
|
|
|
119
122
|
async disable() {
|
|
120
123
|
await this.worldManager.disable();
|
|
121
124
|
await this.commandManager.disable();
|
|
125
|
+
await this.banManager.disable();
|
|
122
126
|
await this.blockManager.disable();
|
|
123
127
|
await this.itemManager.disable();
|
|
124
|
-
await this.banManager.disable();
|
|
125
128
|
await this.permissionManager.disable();
|
|
126
129
|
await this.packetRegistry.disable();
|
|
127
130
|
await this.config.disable();
|
|
@@ -149,9 +152,6 @@ class Server extends events_EventEmitter.EventEmitter {
|
|
|
149
152
|
*/
|
|
150
153
|
async bootstrap(serverIp = "0.0.0.0", port = 19132) {
|
|
151
154
|
await this.enable();
|
|
152
|
-
await block_BlockMappings.BlockMappings.initMappings(this);
|
|
153
|
-
await this.worldManager.enable();
|
|
154
|
-
await this.packetRegistry.enable();
|
|
155
155
|
this.raknet = new raknet.RakNetListener(
|
|
156
156
|
this.getConfig().getMaxPlayers(),
|
|
157
157
|
this.getConfig().getOnlineMode(),
|
|
@@ -299,11 +299,8 @@ class Server extends events_EventEmitter.EventEmitter {
|
|
|
299
299
|
await player.kick("Server closed.");
|
|
300
300
|
}
|
|
301
301
|
await this.disable();
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
} catch {
|
|
305
|
-
}
|
|
306
|
-
this.getLogger().info("Server stopped, Goodbye!\n");
|
|
302
|
+
this.raknet?.kill();
|
|
303
|
+
console.debug("Server stopped, Goodbye!\n");
|
|
307
304
|
if (!options?.stayAlive) process.exit(options?.crash ? 1 : 0);
|
|
308
305
|
} catch (error) {
|
|
309
306
|
console.error(error);
|
|
@@ -468,4 +465,4 @@ class Server extends events_EventEmitter.EventEmitter {
|
|
|
468
465
|
}
|
|
469
466
|
|
|
470
467
|
exports.default = Server;
|
|
471
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyLmNqcy5janMiLCJzb3VyY2VzIjpbIi4uL3NyYy9TZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmFrTmV0TGlzdGVuZXIsIFNlcnZlck5hbWUgfSBmcm9tICdAanNwcmlzbWFyaW5lL3Jha25ldCc7XG5pbXBvcnQgQ29uc29sZSBmcm9tICcuL0NvbnNvbGUnO1xuaW1wb3J0IFNlc3Npb25NYW5hZ2VyIGZyb20gJy4vU2Vzc2lvbk1hbmFnZXInO1xuaW1wb3J0IEJhbk1hbmFnZXIgZnJvbSAnLi9iYW4vQmFuTWFuYWdlcic7XG5pbXBvcnQgQmxvY2tNYW5hZ2VyIGZyb20gJy4vYmxvY2svQmxvY2tNYW5hZ2VyJztcbmltcG9ydCB7IEJsb2NrTWFwcGluZ3MgfSBmcm9tICcuL2Jsb2NrL0Jsb2NrTWFwcGluZ3MnO1xuaW1wb3J0IHsgQ2hhdE1hbmFnZXIgfSBmcm9tICcuL2NoYXQvQ2hhdE1hbmFnZXInO1xuaW1wb3J0IHsgQ29tbWFuZE1hbmFnZXIgfSBmcm9tICcuL2NvbW1hbmQvQ29tbWFuZE1hbmFnZXInO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi9ldmVudHMvRXZlbnRFbWl0dGVyJztcbmltcG9ydCB7IFRpY2tFdmVudCB9IGZyb20gJy4vZXZlbnRzL0V2ZW50cyc7XG5pbXBvcnQgUmFrbmV0Q29ubmVjdEV2ZW50IGZyb20gJy4vZXZlbnRzL3Jha25ldC9SYWtuZXRDb25uZWN0RXZlbnQnO1xuaW1wb3J0IFJha25ldERpc2Nvbm5lY3RFdmVudCBmcm9tICcuL2V2ZW50cy9yYWtuZXQvUmFrbmV0RGlzY29ubmVjdEV2ZW50JztcbmltcG9ydCBSYWtuZXRFbmNhcHN1bGF0ZWRQYWNrZXRFdmVudCBmcm9tICcuL2V2ZW50cy9yYWtuZXQvUmFrbmV0RW5jYXBzdWxhdGVkUGFja2V0RXZlbnQnO1xuaW1wb3J0IEl0ZW1NYW5hZ2VyIGZyb20gJy4vaXRlbS9JdGVtTWFuYWdlcic7XG5pbXBvcnQgQ2xpZW50Q29ubmVjdGlvbiBmcm9tICcuL25ldHdvcmsvQ2xpZW50Q29ubmVjdGlvbic7XG5pbXBvcnQgSWRlbnRpZmllcnMgZnJvbSAnLi9uZXR3b3JrL0lkZW50aWZpZXJzJztcbmltcG9ydCBQYWNrZXRSZWdpc3RyeSBmcm9tICcuL25ldHdvcmsvUGFja2V0UmVnaXN0cnknO1xuaW1wb3J0IHR5cGUgeyBEYXRhUGFja2V0IH0gZnJvbSAnLi9uZXR3b3JrL1BhY2tldHMnO1xuaW1wb3J0IEJhdGNoUGFja2V0IGZyb20gJy4vbmV0d29yay9wYWNrZXQvQmF0Y2hQYWNrZXQnO1xuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZXIgfSBmcm9tICcuL3Blcm1pc3Npb24vUGVybWlzc2lvbk1hbmFnZXInO1xuaW1wb3J0IHsgUXVlcnlNYW5hZ2VyIH0gZnJvbSAnLi9xdWVyeS9RdWVyeU1hbmFnZXInO1xuaW1wb3J0IFRpbWVyIGZyb20gJy4vdXRpbHMvVGltZXInO1xuaW1wb3J0IFdvcmxkTWFuYWdlciBmcm9tICcuL3dvcmxkL1dvcmxkTWFuYWdlcic7XG5cbmltcG9ydCB0eXBlIHsgSW5ldEFkZHJlc3MsIFJha05ldFNlc3Npb24gfSBmcm9tICdAanNwcmlzbWFyaW5lL3Jha25ldCc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gJy4vY29uZmlnL0NvbmZpZyc7XG5cbmltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnQGpzcHJpc21hcmluZS9sb2dnZXInO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuXG4vKipcbiAqIEpTUHJpc21hcmluZSdzIG1haW4gc2VydmVyIGNsYXNzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXJ2ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIHByaXZhdGUgcmFrbmV0ITogUmFrTmV0TGlzdGVuZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uc29sZTogQ29uc29sZSB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhY2tldFJlZ2lzdHJ5OiBQYWNrZXRSZWdpc3RyeTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25NYW5hZ2VyID0gbmV3IFNlc3Npb25NYW5hZ2VyKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kTWFuYWdlcjogQ29tbWFuZE1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JsZE1hbmFnZXI6IFdvcmxkTWFuYWdlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1NYW5hZ2VyOiBJdGVtTWFuYWdlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJsb2NrTWFuYWdlcjogQmxvY2tNYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcXVlcnlNYW5hZ2VyOiBRdWVyeU1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGF0TWFuYWdlcjogQ2hhdE1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uTWFuYWdlcjogUGVybWlzc2lvbk1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYW5NYW5hZ2VyOiBCYW5NYW5hZ2VyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHNlcnZlciBpcyBzdG9wcGluZy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0b3BwaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCB0aWNrZXIgdGltZXIuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSB0aWNrZXJUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBUUFMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSB0cHMgPSAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHRpY2suXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBjdXJyZW50VGljayA9IDBuO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHNlcnZlciBpcyBoZWFkbGVzcy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhlYWRsZXNzOiBib29sZWFuO1xuXG4gICAgLy8gVE9ETzogTW92ZSB0aGlzIHNvbWV3aGVyZSBlbHNlLlxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1JTkVDUkFGVF9USUNLX1RJTUVfTVMgPSAxMDAwIC8gMjA7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHNlcnZlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zLlxuICAgICAqIEBwYXJhbSB7TG9nZ2VyQnVpbGRlcn0gb3B0aW9ucy5sb2dnZXIgLSBUaGUgbG9nZ2VyLlxuICAgICAqIEBwYXJhbSB7Q29uZmlnfSBvcHRpb25zLmNvbmZpZyAtIFRoZSBjb25maWcuXG4gICAgICogQHJldHVybnMge1NlcnZlcn0gVGhlIHNlcnZlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoeyBsb2dnZXIsIGNvbmZpZywgaGVhZGxlc3MgPSBmYWxzZSB9OiB7IGxvZ2dlcjogTG9nZ2VyOyBjb25maWc6IENvbmZpZzsgaGVhZGxlc3M/OiBib29sZWFuIH0pIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmhlYWRsZXNzID0gaGVhZGxlc3M7XG5cbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgU3RhcnRpbmcgSlNQcmlzbWFyaW5lIHNlcnZlciB2ZXJzaW9uIMKnZXYke3ZlcnNpb259wqdyIGZvciBNaW5lY3JhZnQ6IEJlZHJvY2sgRWRpdGlvbiAke0lkZW50aWZpZXJzLk1pbmVjcmFmdFZlcnNpb25zLmF0KC0xKX0gKHByb3RvY29sIHZlcnNpb24gwqdlJHtJZGVudGlmaWVycy5Qcm90b2NvbH3Cp3IpYFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5wYWNrZXRSZWdpc3RyeSA9IG5ldyBQYWNrZXRSZWdpc3RyeSh0aGlzKTtcbiAgICAgICAgdGhpcy5pdGVtTWFuYWdlciA9IG5ldyBJdGVtTWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy5ibG9ja01hbmFnZXIgPSBuZXcgQmxvY2tNYW5hZ2VyKHRoaXMpO1xuICAgICAgICB0aGlzLndvcmxkTWFuYWdlciA9IG5ldyBXb3JsZE1hbmFnZXIodGhpcyk7XG4gICAgICAgIGlmICghdGhpcy5oZWFkbGVzcykgdGhpcy5jb25zb2xlID0gbmV3IENvbnNvbGUodGhpcyk7XG4gICAgICAgIHRoaXMuY29tbWFuZE1hbmFnZXIgPSBuZXcgQ29tbWFuZE1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMucXVlcnlNYW5hZ2VyID0gbmV3IFF1ZXJ5TWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy5jaGF0TWFuYWdlciA9IG5ldyBDaGF0TWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uTWFuYWdlciA9IG5ldyBQZXJtaXNzaW9uTWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iYW5NYW5hZ2VyID0gbmV3IEJhbk1hbmFnZXIodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXJ2ZXIgaXMgZW5hYmxlZC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGVuYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWcuZW5hYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uc29sZT8uZW5hYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnBlcm1pc3Npb25NYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmJhbk1hbmFnZXIuZW5hYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuaXRlbU1hbmFnZXIuZW5hYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYmxvY2tNYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbW1hbmRNYW5hZ2VyLmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLnNldENvbnNvbGUodGhpcy5jb25zb2xlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXJ2ZXIgaXMgZGlzYWJsZWQuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBkaXNhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLndvcmxkTWFuYWdlci5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWFuZE1hbmFnZXIuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmJsb2NrTWFuYWdlci5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuaXRlbU1hbmFnZXIuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmJhbk1hbmFnZXIuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnBlcm1pc3Npb25NYW5hZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wYWNrZXRSZWdpc3RyeS5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dnZXIuZGlzYWJsZSgpO1xuXG4gICAgICAgIC8vIEZpbmFsbHksIHJlbW92ZSBhbGwgbGlzdGVuZXJzLlxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNZXRhZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFrbmV0KCkuc2VydmVyTmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWxvYWRzIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNlcnZlciBpcyByZWxvYWRlZC5cbiAgICAgKiBAcmVtYXJrcyBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcge0BsaW5rIFNlcnZlciNkaXNhYmxlfSBhbmQge0BsaW5rIFNlcnZlciNlbmFibGV9LlxuICAgICAqIEByZW1hcmtzIFRoaXMgbWV0aG9kIGFuZCBmdW5jdGlvbmFsaXR5IGlzIHVuc3VwcG9ydGVkIGFuZCBzaG91bGQgaWRlYWxseSBiZSBjb21wbGV0ZWx5IGF2b2lkZWQuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5hYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RhcnRzIHRoZSBzZXJ2ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZXJ2ZXJJcD0nMC4wLjAuMCddIC0gVGhlIHNlcnZlciBJUC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3BvcnQ9MTkxMzJdIC0gVGhlIHNlcnZlciBwb3J0LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXJ2ZXIgaXMgc3RhcnRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgYm9vdHN0cmFwKHNlcnZlcklwID0gJzAuMC4wLjAnLCBwb3J0ID0gMTkxMzIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgQmxvY2tNYXBwaW5ncy5pbml0TWFwcGluZ3ModGhpcyk7XG4gICAgICAgIGF3YWl0IHRoaXMud29ybGRNYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnBhY2tldFJlZ2lzdHJ5LmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMucmFrbmV0ID0gbmV3IFJha05ldExpc3RlbmVyKFxuICAgICAgICAgICAgdGhpcy5nZXRDb25maWcoKS5nZXRNYXhQbGF5ZXJzKCksXG4gICAgICAgICAgICB0aGlzLmdldENvbmZpZygpLmdldE9ubGluZU1vZGUoKSxcbiAgICAgICAgICAgIG5ldyBTZXJ2ZXJOYW1lKHRoaXMpLFxuICAgICAgICAgICAgdGhpcy5nZXRMb2dnZXIoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJha25ldC5zdGFydChzZXJ2ZXJJcCwgcG9ydCk7XG5cbiAgICAgICAgdGhpcy5yYWtuZXQub24oJ29wZW5Db25uZWN0aW9uJywgYXN5bmMgKHNlc3Npb246IFJha05ldFNlc3Npb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFJha25ldENvbm5lY3RFdmVudChzZXNzaW9uKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgncmFrbmV0Q29ubmVjdCcsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LmlzQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gc2Vzc2lvbi5nZXRBZGRyZXNzKCkudG9Ub2tlbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbk1hbmFnZXIuaGFzKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBBbm90aGVyIGNsaWVudCB3aXRoIHRva2VuICgke3Rva2VufSkgaXMgYWxyZWFkeSBjb25uZWN0ZWQhYCk7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNjb25uZWN0KCdBbHJlYWR5IGNvbm5lY3RlZCBmcm9tIGFub3RoZXIgbG9jYXRpb24nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IFRpbWVyKCk7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgJHt0b2tlbn0gaXMgYXR0ZW1wdGluZyB0byBjb25uZWN0YCk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25NYW5hZ2VyLmFkZCh0b2tlbiwgbmV3IENsaWVudENvbm5lY3Rpb24oc2Vzc2lvbiwgdGhpcy5sb2dnZXIpKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoYE5ldyBjb25uZWN0aW9uIGhhbmRsaW5nIHRvb2sgwqdlJHt0aW1lci5zdG9wKCl9IG1zwqdyYCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmFrbmV0Lm9uKCdjbG9zZUNvbm5lY3Rpb24nLCBhc3luYyAoaW5ldEFkZHI6IEluZXRBZGRyZXNzLCByZWFzb246IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgUmFrbmV0RGlzY29ubmVjdEV2ZW50KGluZXRBZGRyLCByZWFzb24pO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdyYWtuZXREaXNjb25uZWN0JywgZXZlbnQpO1xuXG4gICAgICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gaW5ldEFkZHIudG9Ub2tlbigpO1xuXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uTWFuYWdlci5nZXQodG9rZW4pO1xuICAgICAgICAgICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYENhbm5vdCByZW1vdmUgY29ubmVjdGlvbiBmcm9tIG5vbi1leGlzdGluZyBwbGF5ZXIgKCR7dG9rZW59KWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgc2Vzc2lvbi5jbG9zZVBsYXllclNlc3Npb24oKTtcblxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uTWFuYWdlci5yZW1vdmUodG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYCR7dG9rZW59IGRpc2Nvbm5lY3RlZCBkdWUgdG8gJHtyZWFzb259YCk7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgUGxheWVyIGRlc3RydWN0aW9uIHRvb2sgYWJvdXQgJHtEYXRlLm5vdygpIC0gdGltZX0gbXNgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yYWtuZXQub24oJ2VuY2Fwc3VsYXRlZCcsIGFzeW5jIChwYWNrZXQ6IGFueSwgaW5ldEFkZHI6IEluZXRBZGRyZXNzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBSYWtuZXRFbmNhcHN1bGF0ZWRQYWNrZXRFdmVudChpbmV0QWRkciwgcGFja2V0KTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgncmFrbmV0RW5jYXBzdWxhdGVkUGFja2V0JywgZXZlbnQpO1xuXG4gICAgICAgICAgICBsZXQgY29ubmVjdGlvbjogQ2xpZW50Q29ubmVjdGlvbiB8IG51bGw7XG4gICAgICAgICAgICBpZiAoKGNvbm5lY3Rpb24gPSB0aGlzLnNlc3Npb25NYW5hZ2VyLmdldChpbmV0QWRkci50b1Rva2VuKCkpID8/IG51bGwpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEdvdCBhIHBhY2tldCBmcm9tIGEgY2xvc2VkIGNvbm5lY3Rpb24gKCR7aW5ldEFkZHIudG9Ub2tlbigpfSlgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gUmVhZCBiYXRjaCBjb250ZW50IGFuZCBoYW5kbGUgdGhlbVxuICAgICAgICAgICAgICAgIGNvbnN0IGJhdGNoZWQgPSBuZXcgQmF0Y2hQYWNrZXQocGFja2V0LmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIGJhdGNoZWQuY29tcHJlc3NlZCA9IGNvbm5lY3Rpb24uaGFzQ29tcHJlc3Npb247XG5cbiAgICAgICAgICAgICAgICAvLyBSZWFkIGFsbCBwYWNrZXRzIGluc2lkZSBiYXRjaCBhbmQgaGFuZGxlIHRoZW1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBhd2FpdCBiYXRjaGVkLmFzeW5jRGVjb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGlkID0gYnVmWzBdITtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFja2V0UmVnaXN0cnkuZ2V0UGFja2V0cygpLmhhcyhwaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBQYWNrZXQgMHgke3BpZC50b1N0cmluZygxNil9IGlzbid0IGltcGxlbWVudGVkYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEdldCBwYWNrZXQgZnJvbSByZWdpc3RyeVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWNrZXQgPSBuZXcgKHRoaXMucGFja2V0UmVnaXN0cnkuZ2V0UGFja2V0cygpLmdldChwaWQpISkoYnVmKTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0LmRlY29kZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEVycm9yIHdoaWxlIGRlY29kaW5nIHBhY2tldDogJHtwYWNrZXQuY29uc3RydWN0b3IubmFtZX06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5wYWNrZXRSZWdpc3RyeS5nZXRIYW5kbGVyKHBpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5zaWxseShgUmVjZWl2ZWQgwqdiJHtwYWNrZXQuY29uc3RydWN0b3IubmFtZX3Cp3IgcGFja2V0YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCAoaGFuZGxlciBhcyBhbnkpLmhhbmRsZShwYWNrZXQsIHRoaXMsIGNvbm5lY3Rpb24uZ2V0UGxheWVyU2Vzc2lvbigpID8/IGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEhhbmRsZXIgZXJyb3IgJHtwYWNrZXQuY29uc3RydWN0b3IubmFtZX0taGFuZGxlcjogKCR7ZXJyb3J9KWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmFrbmV0Lm9uKCdyYXcnLCBhc3luYyAoYnVmZmVyOiBCdWZmZXIsIGluZXRBZGRyOiBJbmV0QWRkcmVzcykgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5nZXRFbmFibGVRdWVyeSgpKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeU1hbmFnZXIub25SYXcoYnVmZmVyLCBpbmV0QWRkcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoYFF1ZXJ5TWFuYWdlciBlbmNvdW50ZXJlZCBhbiBlcnJvcmApO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmdldEVuYWJsZVRpY2tpbmcoKSkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBsZXQgdHBzU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBsYXN0VGlja1RpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgbGV0IHRwc1N0YXJ0VGljayA9IHRoaXMuZ2V0VGljaygpO1xuICAgICAgICAgICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdG9wcGluZykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgVGlja0V2ZW50KHRoaXMuZ2V0VGljaygpKTtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZW1pdCgndGljaycsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRpY2tzUGVyU2Vjb25kID0gMTAwMCAvIFNlcnZlci5NSU5FQ1JBRlRfVElDS19USU1FX01TO1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGFsbCB3b3JsZHMuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB3b3JsZCBvZiB0aGlzLndvcmxkTWFuYWdlci5nZXRXb3JsZHMoKSkge1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHdvcmxkLnVwZGF0ZShldmVudC5nZXRUaWNrKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBSYWtOZXQgc2VydmVyIG5hbWUuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmdldEVuYWJsZVRpdGxlKCkgJiYgdGhpcy5nZXRUaWNrKCkgJSB0aWNrc1BlclNlY29uZCA9PT0gMCAmJiAhdGhpcy5oZWFkbGVzcykge1xuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHByb2Nlc3MgdGl0bGUgd2l0aCBUUFMgYW5kIHRpY2suXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MudGl0bGUgPSBgVFBTOiAke3RoaXMuZ2V0VFBTKCkudG9GaXhlZCgyKX0gfCBUaWNrOiAke3RoaXMuZ2V0VGljaygpfSB8ICR7cHJvY2Vzcy50aXRsZS5zcGxpdCgnfCAnKS5hdCgtMSkhfWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VGljaysrO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZEVsYXBzZWRUaW1lID0gdGhpcy5nZXRUaWNrKCkgKiBTZXJ2ZXIuTUlORUNSQUZUX1RJQ0tfVElNRV9NUztcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRpb25UaW1lID0gZW5kVGltZSAtIGxhc3RUaWNrVGltZTtcblxuICAgICAgICAgICAgICAgIC8vIEFkanVzdCBzbGVlcFRpbWUgYmFzZWQgb24gZXhlY3V0aW9uIHNwZWVkLlxuICAgICAgICAgICAgICAgIGxldCBzbGVlcFRpbWUgPSBTZXJ2ZXIuTUlORUNSQUZUX1RJQ0tfVElNRV9NUyAtIGV4ZWN1dGlvblRpbWU7XG4gICAgICAgICAgICAgICAgaWYgKGVsYXBzZWRUaW1lIDwgZXhwZWN0ZWRFbGFwc2VkVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBydW5uaW5nIGZhc3RlciB0aGFuIGV4cGVjdGVkLCBpbmNyZWFzZSBzbGVlcFRpbWUuXG4gICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZSArPSBleHBlY3RlZEVsYXBzZWRUaW1lIC0gZWxhcHNlZFRpbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGFwc2VkVGltZSA+IGV4cGVjdGVkRWxhcHNlZFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcnVubmluZyBzbG93ZXIgdGhhbiBleHBlY3RlZCwgZGVjcmVhc2Ugc2xlZXBUaW1lIGJ1dCBkb24ndCBsZXQgaXQgZ28gYmVsb3cgMC5cbiAgICAgICAgICAgICAgICAgICAgc2xlZXBUaW1lID0gTWF0aC5tYXgoMCwgc2xlZXBUaW1lIC0gKGVsYXBzZWRUaW1lIC0gZXhwZWN0ZWRFbGFwc2VkVGltZSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0cHMgYmFzZWQgb24gdGhlIGFjdHVhbCBlbGFwc2VkIHRpbWUgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSB0aWNrLlxuICAgICAgICAgICAgICAgIGlmICh0cHNTdGFydFRpbWUgIT09IGVuZFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cHMgPSAoKHRoaXMuZ2V0VGljaygpIC0gdHBzU3RhcnRUaWNrKSAqIDEwMDApIC8gKGVuZFRpbWUgLSB0cHNTdGFydFRpbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChlbmRUaW1lIC0gdHBzU3RhcnRUaW1lID49IDEwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgdHBzU3RhcnRUaWNrID0gdGhpcy5nZXRUaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHRwc1N0YXJ0VGltZSA9IGVuZFRpbWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy50cHMgPSBNYXRoLm1pbih0aGlzLnRwcywgMjApOyAvLyBFbnN1cmUgdHBzIGRvZXMgbm90IGV4Y2VlZCAyMFxuXG4gICAgICAgICAgICAgICAgbGFzdFRpY2tUaW1lID0gZW5kVGltZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpY2tlclRpbWVyID0gc2V0VGltZW91dCh0aWNrLCBzbGVlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMudGlja2VyVGltZXIudW5yZWYoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFN0YXJ0IHRpY2tpbmdcbiAgICAgICAgICAgIHRpY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oYEpTUHJpc21hcmluZSBpcyBub3cgbGlzdGVuaW5nIG9uIHBvcnQgwqdiJHtwb3J0fWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEtpbGxzIHRoZSBzZXJ2ZXIgYXN5bmNocm9ub3VzbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIFRoZSBvcHRpb25zLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY3Jhc2hdIC0gSWYgdGhlIHNlcnZlciBzaG91bGQgY3Jhc2guXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNlcnZlciBpcyBraWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHNodXRkb3duKG9wdGlvbnM/OiB7IGNyYXNoPzogYm9vbGVhbjsgc3RheUFsaXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuc3RvcHBpbmcgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oJ1N0b3BwaW5nIHNlcnZlcicsICdTZXJ2ZXIva2lsbCcpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbnNvbGU/LmRpc2FibGUoKTtcblxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGlja2VyVGltZXIpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBLaWNrIGFsbCBvbmxpbmUgcGxheWVycy5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcGxheWVyIG9mIHRoaXMuc2Vzc2lvbk1hbmFnZXIuZ2V0QWxsUGxheWVycygpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcGxheWVyLmtpY2soJ1NlcnZlciBjbG9zZWQuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgYWxsIG1hbmFnZXJzLlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgICAgICAgIC8vIGB0aGlzLnJha25ldGAgbWlnaHQgYmUgdW5kZWZpbmVkIGlmIHdlIGtpbGwgdGhlIHNlcnZlciByZWFsbHkgZWFybHkuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMucmFrbmV0LmtpbGwoKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICAgICAgdGhpcy5nZXRMb2dnZXIoKS5pbmZvKCdTZXJ2ZXIgc3RvcHBlZCwgR29vZGJ5ZSFcXG4nKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zPy5zdGF5QWxpdmUpIHByb2Nlc3MuZXhpdChvcHRpb25zPy5jcmFzaCA/IDEgOiAwKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zPy5zdGF5QWxpdmUpIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBicm9hZGNhc3RQYWNrZXQ8VCBleHRlbmRzIERhdGFQYWNrZXQ+KGRhdGFQYWNrZXQ6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTWF5YmUgaSBjYW4gaW1wcm92ZSB0aGlzIGJ5IHVzaW5nIHRoZSBVRFAgYnJvYWRjYXN0LCBhbGwgdW5jb25uZWN0ZWQgY2xpZW50c1xuICAgICAgICAvLyB3aWxsIGlnbm9yZSB0aGUgY29ubmVjdGVkIHBhY2tldCBwcm9iYWJseSwgYnV0IG1heSBjYXVzZSBpc3N1ZXMuXG4gICAgICAgIGZvciAoY29uc3Qgb25saW5lUGxheWVyIG9mIHRoaXMuc2Vzc2lvbk1hbmFnZXIuZ2V0QWxsUGxheWVycygpKSB7XG4gICAgICAgICAgICBhd2FpdCBvbmxpbmVQbGF5ZXIuZ2V0TmV0d29ya1Nlc3Npb24oKS5nZXRDb25uZWN0aW9uKCkuc2VuZERhdGFQYWNrZXQoZGF0YVBhY2tldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzZXJ2ZXIgdmVyc2lvbi5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc2VydmVyIHZlcnNpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc29sZS5sb2coc2VydmVyLmdldFZlcnNpb24oKSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaWRlbnRpZmllcnMuXG4gICAgICogQHJldHVybnMge0lkZW50aWZpZXJzfSBUaGUgaWRlbnRpZmllcnMuXG4gICAgICovXG4gICAgcHVibGljIGdldElkZW50aWZpZXJzKCk6IHR5cGVvZiBJZGVudGlmaWVycyB7XG4gICAgICAgIHJldHVybiBJZGVudGlmaWVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBxdWVyeSBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtRdWVyeU1hbmFnZXJ9IFRoZSBxdWVyeSBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRRdWVyeU1hbmFnZXIoKTogUXVlcnlNYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnlNYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbW1hbmQgbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7Q29tbWFuZE1hbmFnZXJ9IFRoZSBjb21tYW5kIG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbW1hbmRNYW5hZ2VyKCk6IENvbW1hbmRNYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbWFuZE1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcGxheWVyIG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge1Nlc3Npb25NYW5hZ2VyfSBUaGUgcGxheWVyIG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldFNlc3Npb25NYW5hZ2VyKCk6IFNlc3Npb25NYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbk1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgd29ybGQgbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7V29ybGRNYW5hZ2VyfSBUaGUgd29ybGQgbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0V29ybGRNYW5hZ2VyKCk6IFdvcmxkTWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmxkTWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpdGVtIG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge0l0ZW1NYW5hZ2VyfSBUaGUgaXRlbSBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJdGVtTWFuYWdlcigpOiBJdGVtTWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1NYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJsb2NrIG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge0Jsb2NrTWFuYWdlcn0gVGhlIGJsb2NrIG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldEJsb2NrTWFuYWdlcigpOiBCbG9ja01hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9ja01hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9nZ2VyLlxuICAgICAqIEByZXR1cm5zIHtMb2dnZXJCdWlsZGVyfSBUaGUgbG9nZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIE5vcm1hbCBsb2c6XG4gICAgICogc2VydmVyLmdldExvZ2dlcigpLmluZm8oJ0hlbGxvLCB3b3JsZCEnKTtcbiAgICAgKiAvLyBEZWJ1ZyBsb2c6XG4gICAgICogc2VydmVyLmdldExvZ2dlcigpLmRlYnVnKCdIZWxsbywgd29ybGQhJyk7XG4gICAgICogLy8gRXJyb3IgbG9nOlxuICAgICAqIHNlcnZlci5nZXRMb2dnZXIoKS5lcnJvcihuZXcgRXJyb3IoJ0hlbGxvIFdvcmxkJykpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMb2dnZXIoKTogTG9nZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9nZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBhY2tldCByZWdpc3RyeS5cbiAgICAgKiBAcmV0dXJucyB7UGFja2V0UmVnaXN0cnl9IFRoZSBwYWNrZXQgcmVnaXN0cnkuXG4gICAgICovXG4gICAgcHVibGljIGdldFBhY2tldFJlZ2lzdHJ5KCk6IFBhY2tldFJlZ2lzdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFja2V0UmVnaXN0cnk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmFrbmV0IGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtSYWtOZXRMaXN0ZW5lcn0gVGhlIHJha25ldCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UmFrbmV0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWtuZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2hhdCBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtDaGF0TWFuYWdlcn0gVGhlIGNoYXQgbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2hhdE1hbmFnZXIoKTogQ2hhdE1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGF0TWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb25maWcuXG4gICAgICogQHJldHVybnMge0NvbmZpZ30gVGhlIGNvbmZpZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zb2xlLmxvZyhzZXJ2ZXIuZ2V0Q29uZmlnKCkuZ2V0TWF4UGxheWVycygpKTsgLy8gMjBcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29uZmlnKCk6IENvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb25zb2xlIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtDb25zb2xlIHwgdW5kZWZpbmVkfSBUaGUgY29uc29sZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29uc29sZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc29sZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwZXJtaXNzaW9uIG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge1Blcm1pc3Npb25NYW5hZ2VyfSBUaGUgcGVybWlzc2lvbiBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQZXJtaXNzaW9uTWFuYWdlcigpOiBQZXJtaXNzaW9uTWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25NYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJhbiBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtCYW5NYW5hZ2VyfSBUaGUgYmFuIG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldEJhbk1hbmFnZXIoKTogQmFuTWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhbk1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIFByaXNtYXJpbmUgaW5zdGFuY2UuXG4gICAgICogQHJldHVybnMge1NlcnZlcn0gVGhlIFByaXNtYXJpbmUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGdldFNlcnZlcigpOiBTZXJ2ZXIge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IFRpY2suXG4gICAgICogQHJldHVybnMge251bWJlcn0gVGhlIGN1cnJlbnQgVGljay5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VGljaygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMuY3VycmVudFRpY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgVFBTLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjdXJyZW50IFRQUy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VFBTKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLnRwcy50b0ZpeGVkKDIpKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwiU2Vzc2lvbk1hbmFnZXIiLCJ2ZXJzaW9uIiwiSWRlbnRpZmllcnMiLCJQYWNrZXRSZWdpc3RyeSIsIkl0ZW1NYW5hZ2VyIiwiQmxvY2tNYW5hZ2VyIiwiV29ybGRNYW5hZ2VyIiwiQ29uc29sZSIsIkNvbW1hbmRNYW5hZ2VyIiwiUXVlcnlNYW5hZ2VyIiwiQ2hhdE1hbmFnZXIiLCJQZXJtaXNzaW9uTWFuYWdlciIsIkJhbk1hbmFnZXIiLCJCbG9ja01hcHBpbmdzIiwiUmFrTmV0TGlzdGVuZXIiLCJTZXJ2ZXJOYW1lIiwiUmFrbmV0Q29ubmVjdEV2ZW50IiwiVGltZXIiLCJDbGllbnRDb25uZWN0aW9uIiwiUmFrbmV0RGlzY29ubmVjdEV2ZW50IiwiUmFrbmV0RW5jYXBzdWxhdGVkUGFja2V0RXZlbnQiLCJCYXRjaFBhY2tldCIsInBhY2tldCIsIlRpY2tFdmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ0EsTUFBcUIsZUFBZUEsZ0NBQWEsQ0FBQTtBQUFBLEVBQ3JDLE1BQUE7QUFBQSxFQUNTLE1BQUE7QUFBQSxFQUNBLE1BQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxFQUNBLGNBQUE7QUFBQSxFQUNBLGNBQUEsR0FBaUIsSUFBSUMsc0JBQWUsRUFBQTtBQUFBLEVBQ3BDLGNBQUE7QUFBQSxFQUNBLFlBQUE7QUFBQSxFQUNBLFdBQUE7QUFBQSxFQUNBLFlBQUE7QUFBQSxFQUNBLFlBQUE7QUFBQSxFQUNB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
|
|
468
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyLmNqcy5janMiLCJzb3VyY2VzIjpbIi4uL3NyYy9TZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmFrTmV0TGlzdGVuZXIsIFNlcnZlck5hbWUgfSBmcm9tICdAanNwcmlzbWFyaW5lL3Jha25ldCc7XG5pbXBvcnQgQ29uc29sZSBmcm9tICcuL0NvbnNvbGUnO1xuaW1wb3J0IFNlc3Npb25NYW5hZ2VyIGZyb20gJy4vU2Vzc2lvbk1hbmFnZXInO1xuaW1wb3J0IEJhbk1hbmFnZXIgZnJvbSAnLi9iYW4vQmFuTWFuYWdlcic7XG5pbXBvcnQgQmxvY2tNYW5hZ2VyIGZyb20gJy4vYmxvY2svQmxvY2tNYW5hZ2VyJztcbmltcG9ydCB7IEJsb2NrTWFwcGluZ3MgfSBmcm9tICcuL2Jsb2NrL0Jsb2NrTWFwcGluZ3MnO1xuaW1wb3J0IHsgQ2hhdE1hbmFnZXIgfSBmcm9tICcuL2NoYXQvQ2hhdE1hbmFnZXInO1xuaW1wb3J0IHsgQ29tbWFuZE1hbmFnZXIgfSBmcm9tICcuL2NvbW1hbmQvQ29tbWFuZE1hbmFnZXInO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi9ldmVudHMvRXZlbnRFbWl0dGVyJztcbmltcG9ydCB7IFRpY2tFdmVudCB9IGZyb20gJy4vZXZlbnRzL0V2ZW50cyc7XG5pbXBvcnQgUmFrbmV0Q29ubmVjdEV2ZW50IGZyb20gJy4vZXZlbnRzL3Jha25ldC9SYWtuZXRDb25uZWN0RXZlbnQnO1xuaW1wb3J0IFJha25ldERpc2Nvbm5lY3RFdmVudCBmcm9tICcuL2V2ZW50cy9yYWtuZXQvUmFrbmV0RGlzY29ubmVjdEV2ZW50JztcbmltcG9ydCBSYWtuZXRFbmNhcHN1bGF0ZWRQYWNrZXRFdmVudCBmcm9tICcuL2V2ZW50cy9yYWtuZXQvUmFrbmV0RW5jYXBzdWxhdGVkUGFja2V0RXZlbnQnO1xuaW1wb3J0IEl0ZW1NYW5hZ2VyIGZyb20gJy4vaXRlbS9JdGVtTWFuYWdlcic7XG5pbXBvcnQgQ2xpZW50Q29ubmVjdGlvbiBmcm9tICcuL25ldHdvcmsvQ2xpZW50Q29ubmVjdGlvbic7XG5pbXBvcnQgSWRlbnRpZmllcnMgZnJvbSAnLi9uZXR3b3JrL0lkZW50aWZpZXJzJztcbmltcG9ydCBQYWNrZXRSZWdpc3RyeSBmcm9tICcuL25ldHdvcmsvUGFja2V0UmVnaXN0cnknO1xuaW1wb3J0IHR5cGUgeyBEYXRhUGFja2V0IH0gZnJvbSAnLi9uZXR3b3JrL1BhY2tldHMnO1xuaW1wb3J0IEJhdGNoUGFja2V0IGZyb20gJy4vbmV0d29yay9wYWNrZXQvQmF0Y2hQYWNrZXQnO1xuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZXIgfSBmcm9tICcuL3Blcm1pc3Npb24vUGVybWlzc2lvbk1hbmFnZXInO1xuaW1wb3J0IHsgUXVlcnlNYW5hZ2VyIH0gZnJvbSAnLi9xdWVyeS9RdWVyeU1hbmFnZXInO1xuaW1wb3J0IFRpbWVyIGZyb20gJy4vdXRpbHMvVGltZXInO1xuaW1wb3J0IFdvcmxkTWFuYWdlciBmcm9tICcuL3dvcmxkL1dvcmxkTWFuYWdlcic7XG5cbmltcG9ydCB0eXBlIHsgSW5ldEFkZHJlc3MsIFJha05ldFNlc3Npb24gfSBmcm9tICdAanNwcmlzbWFyaW5lL3Jha25ldCc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gJy4vY29uZmlnL0NvbmZpZyc7XG5cbmltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnQGpzcHJpc21hcmluZS9sb2dnZXInO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuXG4vKipcbiAqIEpTUHJpc21hcmluZSdzIG1haW4gc2VydmVyIGNsYXNzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXJ2ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIHByaXZhdGUgcmFrbmV0ITogUmFrTmV0TGlzdGVuZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uc29sZTogQ29uc29sZSB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhY2tldFJlZ2lzdHJ5OiBQYWNrZXRSZWdpc3RyeTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25NYW5hZ2VyID0gbmV3IFNlc3Npb25NYW5hZ2VyKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kTWFuYWdlcjogQ29tbWFuZE1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JsZE1hbmFnZXI6IFdvcmxkTWFuYWdlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1NYW5hZ2VyOiBJdGVtTWFuYWdlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJsb2NrTWFuYWdlcjogQmxvY2tNYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcXVlcnlNYW5hZ2VyOiBRdWVyeU1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGF0TWFuYWdlcjogQ2hhdE1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uTWFuYWdlcjogUGVybWlzc2lvbk1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYW5NYW5hZ2VyOiBCYW5NYW5hZ2VyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHNlcnZlciBpcyBzdG9wcGluZy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0b3BwaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCB0aWNrZXIgdGltZXIuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSB0aWNrZXJUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBUUFMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSB0cHMgPSAyMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHRpY2suXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBjdXJyZW50VGljayA9IDBuO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHNlcnZlciBpcyBoZWFkbGVzcy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhlYWRsZXNzOiBib29sZWFuO1xuXG4gICAgLy8gVE9ETzogTW92ZSB0aGlzIHNvbWV3aGVyZSBlbHNlLlxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1JTkVDUkFGVF9USUNLX1RJTUVfTVMgPSAxMDAwIC8gMjA7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHNlcnZlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zLlxuICAgICAqIEBwYXJhbSB7TG9nZ2VyQnVpbGRlcn0gb3B0aW9ucy5sb2dnZXIgLSBUaGUgbG9nZ2VyLlxuICAgICAqIEBwYXJhbSB7Q29uZmlnfSBvcHRpb25zLmNvbmZpZyAtIFRoZSBjb25maWcuXG4gICAgICogQHJldHVybnMge1NlcnZlcn0gVGhlIHNlcnZlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoeyBsb2dnZXIsIGNvbmZpZywgaGVhZGxlc3MgPSBmYWxzZSB9OiB7IGxvZ2dlcjogTG9nZ2VyOyBjb25maWc6IENvbmZpZzsgaGVhZGxlc3M/OiBib29sZWFuIH0pIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmhlYWRsZXNzID0gaGVhZGxlc3M7XG5cbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgU3RhcnRpbmcgSlNQcmlzbWFyaW5lIHNlcnZlciB2ZXJzaW9uIMKnZXYke3ZlcnNpb259wqdyIGZvciBNaW5lY3JhZnQ6IEJlZHJvY2sgRWRpdGlvbiAke0lkZW50aWZpZXJzLk1pbmVjcmFmdFZlcnNpb25zLmF0KC0xKX0gKHByb3RvY29sIHZlcnNpb24gwqdlJHtJZGVudGlmaWVycy5Qcm90b2NvbH3Cp3IpYFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5wYWNrZXRSZWdpc3RyeSA9IG5ldyBQYWNrZXRSZWdpc3RyeSh0aGlzKTtcbiAgICAgICAgdGhpcy5pdGVtTWFuYWdlciA9IG5ldyBJdGVtTWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy5ibG9ja01hbmFnZXIgPSBuZXcgQmxvY2tNYW5hZ2VyKHRoaXMpO1xuICAgICAgICB0aGlzLndvcmxkTWFuYWdlciA9IG5ldyBXb3JsZE1hbmFnZXIodGhpcyk7XG4gICAgICAgIGlmICghdGhpcy5oZWFkbGVzcykgdGhpcy5jb25zb2xlID0gbmV3IENvbnNvbGUodGhpcyk7XG4gICAgICAgIHRoaXMuY29tbWFuZE1hbmFnZXIgPSBuZXcgQ29tbWFuZE1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMucXVlcnlNYW5hZ2VyID0gbmV3IFF1ZXJ5TWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy5jaGF0TWFuYWdlciA9IG5ldyBDaGF0TWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uTWFuYWdlciA9IG5ldyBQZXJtaXNzaW9uTWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iYW5NYW5hZ2VyID0gbmV3IEJhbk1hbmFnZXIodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXJ2ZXIgaXMgZW5hYmxlZC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGVuYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgQmxvY2tNYXBwaW5ncy5pbml0TWFwcGluZ3ModGhpcyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWcuZW5hYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uc29sZT8uZW5hYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnBlcm1pc3Npb25NYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnBhY2tldFJlZ2lzdHJ5LmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLml0ZW1NYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmJsb2NrTWFuYWdlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5iYW5NYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbW1hbmRNYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLndvcmxkTWFuYWdlci5lbmFibGUoKTtcblxuICAgICAgICB0aGlzLmxvZ2dlci5zZXRDb25zb2xlKHRoaXMuY29uc29sZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIHNlcnZlci5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIGRpc2FibGVkLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgZGlzYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy53b3JsZE1hbmFnZXIuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbW1hbmRNYW5hZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5iYW5NYW5hZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ibG9ja01hbmFnZXIuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLml0ZW1NYW5hZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wZXJtaXNzaW9uTWFuYWdlci5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucGFja2V0UmVnaXN0cnkuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZy5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRpc2FibGUoKTtcblxuICAgICAgICAvLyBGaW5hbGx5LCByZW1vdmUgYWxsIGxpc3RlbmVycy5cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJha25ldCgpLnNlcnZlck5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsb2FkcyB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXJ2ZXIgaXMgcmVsb2FkZWQuXG4gICAgICogQHJlbWFya3MgVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHtAbGluayBTZXJ2ZXIjZGlzYWJsZX0gYW5kIHtAbGluayBTZXJ2ZXIjZW5hYmxlfS5cbiAgICAgKiBAcmVtYXJrcyBUaGlzIG1ldGhvZCBhbmQgZnVuY3Rpb25hbGl0eSBpcyB1bnN1cHBvcnRlZCBhbmQgc2hvdWxkIGlkZWFsbHkgYmUgY29tcGxldGVseSBhdm9pZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyByZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyB0aGUgc2VydmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VydmVySXA9JzAuMC4wLjAnXSAtIFRoZSBzZXJ2ZXIgSVAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3J0PTE5MTMyXSAtIFRoZSBzZXJ2ZXIgcG9ydC5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIHN0YXJ0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGJvb3RzdHJhcChzZXJ2ZXJJcCA9ICcwLjAuMC4wJywgcG9ydCA9IDE5MTMyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5hYmxlKCk7XG5cbiAgICAgICAgdGhpcy5yYWtuZXQgPSBuZXcgUmFrTmV0TGlzdGVuZXIoXG4gICAgICAgICAgICB0aGlzLmdldENvbmZpZygpLmdldE1heFBsYXllcnMoKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZmlnKCkuZ2V0T25saW5lTW9kZSgpLFxuICAgICAgICAgICAgbmV3IFNlcnZlck5hbWUodGhpcyksXG4gICAgICAgICAgICB0aGlzLmdldExvZ2dlcigpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmFrbmV0LnN0YXJ0KHNlcnZlcklwLCBwb3J0KTtcblxuICAgICAgICB0aGlzLnJha25ldC5vbignb3BlbkNvbm5lY3Rpb24nLCBhc3luYyAoc2Vzc2lvbjogUmFrTmV0U2Vzc2lvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgUmFrbmV0Q29ubmVjdEV2ZW50KHNlc3Npb24pO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdyYWtuZXRDb25uZWN0JywgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNDYW5jZWxsZWQoKSkge1xuICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBzZXNzaW9uLmdldEFkZHJlc3MoKS50b1Rva2VuKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uTWFuYWdlci5oYXModG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEFub3RoZXIgY2xpZW50IHdpdGggdG9rZW4gKCR7dG9rZW59KSBpcyBhbHJlYWR5IGNvbm5lY3RlZCFgKTtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc2Nvbm5lY3QoJ0FscmVhZHkgY29ubmVjdGVkIGZyb20gYW5vdGhlciBsb2NhdGlvbicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBuZXcgVGltZXIoKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGAke3Rva2VufSBpcyBhdHRlbXB0aW5nIHRvIGNvbm5lY3RgKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbk1hbmFnZXIuYWRkKHRva2VuLCBuZXcgQ2xpZW50Q29ubmVjdGlvbihzZXNzaW9uLCB0aGlzLmxvZ2dlcikpO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShgTmV3IGNvbm5lY3Rpb24gaGFuZGxpbmcgdG9vayDCp2Uke3RpbWVyLnN0b3AoKX0gbXPCp3JgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yYWtuZXQub24oJ2Nsb3NlQ29ubmVjdGlvbicsIGFzeW5jIChpbmV0QWRkcjogSW5ldEFkZHJlc3MsIHJlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBSYWtuZXREaXNjb25uZWN0RXZlbnQoaW5ldEFkZHIsIHJlYXNvbik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3Jha25ldERpc2Nvbm5lY3QnLCBldmVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBpbmV0QWRkci50b1Rva2VuKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25NYW5hZ2VyLmdldCh0b2tlbik7XG4gICAgICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ2Fubm90IHJlbW92ZSBjb25uZWN0aW9uIGZyb20gbm9uLWV4aXN0aW5nIHBsYXllciAoJHt0b2tlbn0pYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBzZXNzaW9uLmNsb3NlUGxheWVyU2Vzc2lvbigpO1xuXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25NYW5hZ2VyLnJlbW92ZSh0b2tlbik7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgJHt0b2tlbn0gZGlzY29ubmVjdGVkIGR1ZSB0byAke3JlYXNvbn1gKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBQbGF5ZXIgZGVzdHJ1Y3Rpb24gdG9vayBhYm91dCAke0RhdGUubm93KCkgLSB0aW1lfSBtc2ApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJha25ldC5vbignZW5jYXBzdWxhdGVkJywgYXN5bmMgKHBhY2tldDogYW55LCBpbmV0QWRkcjogSW5ldEFkZHJlc3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFJha25ldEVuY2Fwc3VsYXRlZFBhY2tldEV2ZW50KGluZXRBZGRyLCBwYWNrZXQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdyYWtuZXRFbmNhcHN1bGF0ZWRQYWNrZXQnLCBldmVudCk7XG5cbiAgICAgICAgICAgIGxldCBjb25uZWN0aW9uOiBDbGllbnRDb25uZWN0aW9uIHwgbnVsbDtcbiAgICAgICAgICAgIGlmICgoY29ubmVjdGlvbiA9IHRoaXMuc2Vzc2lvbk1hbmFnZXIuZ2V0KGluZXRBZGRyLnRvVG9rZW4oKSkgPz8gbnVsbCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgR290IGEgcGFja2V0IGZyb20gYSBjbG9zZWQgY29ubmVjdGlvbiAoJHtpbmV0QWRkci50b1Rva2VuKCl9KWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBSZWFkIGJhdGNoIGNvbnRlbnQgYW5kIGhhbmRsZSB0aGVtXG4gICAgICAgICAgICAgICAgY29uc3QgYmF0Y2hlZCA9IG5ldyBCYXRjaFBhY2tldChwYWNrZXQuY29udGVudCk7XG4gICAgICAgICAgICAgICAgYmF0Y2hlZC5jb21wcmVzc2VkID0gY29ubmVjdGlvbi5oYXNDb21wcmVzc2lvbjtcblxuICAgICAgICAgICAgICAgIC8vIFJlYWQgYWxsIHBhY2tldHMgaW5zaWRlIGJhdGNoIGFuZCBoYW5kbGUgdGhlbVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYnVmIG9mIGF3YWl0IGJhdGNoZWQuYXN5bmNEZWNvZGUoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwaWQgPSBidWZbMF0hO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWNrZXRSZWdpc3RyeS5nZXRQYWNrZXRzKCkuaGFzKHBpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYFBhY2tldCAweCR7cGlkLnRvU3RyaW5nKDE2KX0gaXNuJ3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHBhY2tldCBmcm9tIHJlZ2lzdHJ5XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhY2tldCA9IG5ldyAodGhpcy5wYWNrZXRSZWdpc3RyeS5nZXRQYWNrZXRzKCkuZ2V0KHBpZCkhKShidWYpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQuZGVjb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRXJyb3Igd2hpbGUgZGVjb2RpbmcgcGFja2V0OiAke3BhY2tldC5jb25zdHJ1Y3Rvci5uYW1lfTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLnBhY2tldFJlZ2lzdHJ5LmdldEhhbmRsZXIocGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnNpbGx5KGBSZWNlaXZlZCDCp2Ike3BhY2tldC5jb25zdHJ1Y3Rvci5uYW1lfcKnciBwYWNrZXRgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IChoYW5kbGVyIGFzIGFueSkuaGFuZGxlKHBhY2tldCwgdGhpcywgY29ubmVjdGlvbi5nZXRQbGF5ZXJTZXNzaW9uKCkgPz8gY29ubmVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgSGFuZGxlciBlcnJvciAke3BhY2tldC5jb25zdHJ1Y3Rvci5uYW1lfS1oYW5kbGVyOiAoJHtlcnJvcn0pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yYWtuZXQub24oJ3JhdycsIGFzeW5jIChidWZmZXI6IEJ1ZmZlciwgaW5ldEFkZHI6IEluZXRBZGRyZXNzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmdldEVuYWJsZVF1ZXJ5KCkpIHJldHVybjtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5TWFuYWdlci5vblJhdyhidWZmZXIsIGluZXRBZGRyKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShgUXVlcnlNYW5hZ2VyIGVuY291bnRlcmVkIGFuIGVycm9yYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcuZ2V0RW5hYmxlVGlja2luZygpKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCB0cHNTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgbGV0IGxhc3RUaWNrVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBsZXQgdHBzU3RhcnRUaWNrID0gdGhpcy5nZXRUaWNrKCk7XG4gICAgICAgICAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0b3BwaW5nKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBUaWNrRXZlbnQodGhpcy5nZXRUaWNrKCkpO1xuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5lbWl0KCd0aWNrJywgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGlja3NQZXJTZWNvbmQgPSAxMDAwIC8gU2VydmVyLk1JTkVDUkFGVF9USUNLX1RJTUVfTVM7XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgYWxsIHdvcmxkcy5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmxkIG9mIHRoaXMud29ybGRNYW5hZ2VyLmdldFdvcmxkcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgd29ybGQudXBkYXRlKGV2ZW50LmdldFRpY2soKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIFJha05ldCBzZXJ2ZXIgbmFtZS5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcuZ2V0RW5hYmxlVGl0bGUoKSAmJiB0aGlzLmdldFRpY2soKSAlIHRpY2tzUGVyU2Vjb25kID09PSAwICYmICF0aGlzLmhlYWRsZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcHJvY2VzcyB0aXRsZSB3aXRoIFRQUyBhbmQgdGljay5cbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy50aXRsZSA9IGBUUFM6ICR7dGhpcy5nZXRUUFMoKS50b0ZpeGVkKDIpfSB8IFRpY2s6ICR7dGhpcy5nZXRUaWNrKCl9IHwgJHtwcm9jZXNzLnRpdGxlLnNwbGl0KCd8ICcpLmF0KC0xKSF9YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUaWNrKys7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxhcHNlZFRpbWUgPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkRWxhcHNlZFRpbWUgPSB0aGlzLmdldFRpY2soKSAqIFNlcnZlci5NSU5FQ1JBRlRfVElDS19USU1FX01TO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGlvblRpbWUgPSBlbmRUaW1lIC0gbGFzdFRpY2tUaW1lO1xuXG4gICAgICAgICAgICAgICAgLy8gQWRqdXN0IHNsZWVwVGltZSBiYXNlZCBvbiBleGVjdXRpb24gc3BlZWQuXG4gICAgICAgICAgICAgICAgbGV0IHNsZWVwVGltZSA9IFNlcnZlci5NSU5FQ1JBRlRfVElDS19USU1FX01TIC0gZXhlY3V0aW9uVGltZTtcbiAgICAgICAgICAgICAgICBpZiAoZWxhcHNlZFRpbWUgPCBleHBlY3RlZEVsYXBzZWRUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHJ1bm5pbmcgZmFzdGVyIHRoYW4gZXhwZWN0ZWQsIGluY3JlYXNlIHNsZWVwVGltZS5cbiAgICAgICAgICAgICAgICAgICAgc2xlZXBUaW1lICs9IGV4cGVjdGVkRWxhcHNlZFRpbWUgLSBlbGFwc2VkVGltZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsYXBzZWRUaW1lID4gZXhwZWN0ZWRFbGFwc2VkVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBydW5uaW5nIHNsb3dlciB0aGFuIGV4cGVjdGVkLCBkZWNyZWFzZSBzbGVlcFRpbWUgYnV0IGRvbid0IGxldCBpdCBnbyBiZWxvdyAwLlxuICAgICAgICAgICAgICAgICAgICBzbGVlcFRpbWUgPSBNYXRoLm1heCgwLCBzbGVlcFRpbWUgLSAoZWxhcHNlZFRpbWUgLSBleHBlY3RlZEVsYXBzZWRUaW1lKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRwcyBiYXNlZCBvbiB0aGUgYWN0dWFsIGVsYXBzZWQgdGltZSBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlIHRpY2suXG4gICAgICAgICAgICAgICAgaWYgKHRwc1N0YXJ0VGltZSAhPT0gZW5kVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRwcyA9ICgodGhpcy5nZXRUaWNrKCkgLSB0cHNTdGFydFRpY2spICogMTAwMCkgLyAoZW5kVGltZSAtIHRwc1N0YXJ0VGltZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVuZFRpbWUgLSB0cHNTdGFydFRpbWUgPj0gMTAwMCkge1xuICAgICAgICAgICAgICAgICAgICB0cHNTdGFydFRpY2sgPSB0aGlzLmdldFRpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgdHBzU3RhcnRUaW1lID0gZW5kVGltZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRwcyA9IE1hdGgubWluKHRoaXMudHBzLCAyMCk7IC8vIEVuc3VyZSB0cHMgZG9lcyBub3QgZXhjZWVkIDIwXG5cbiAgICAgICAgICAgICAgICBsYXN0VGlja1RpbWUgPSBlbmRUaW1lO1xuICAgICAgICAgICAgICAgIHRoaXMudGlja2VyVGltZXIgPSBzZXRUaW1lb3V0KHRpY2ssIHNsZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50aWNrZXJUaW1lci51bnJlZigpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gU3RhcnQgdGlja2luZ1xuICAgICAgICAgICAgdGljaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgSlNQcmlzbWFyaW5lIGlzIG5vdyBsaXN0ZW5pbmcgb24gcG9ydCDCp2Ike3BvcnR9YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogS2lsbHMgdGhlIHNlcnZlciBhc3luY2hyb25vdXNseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gVGhlIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jcmFzaF0gLSBJZiB0aGUgc2VydmVyIHNob3VsZCBjcmFzaC5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIGtpbGxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgc2h1dGRvd24ob3B0aW9ucz86IHsgY3Jhc2g/OiBib29sZWFuOyBzdGF5QWxpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5zdG9wcGluZyA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbygnU3RvcHBpbmcgc2VydmVyJywgJ1NlcnZlci9raWxsJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uc29sZT8uZGlzYWJsZSgpO1xuXG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aWNrZXJUaW1lcik7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEtpY2sgYWxsIG9ubGluZSBwbGF5ZXJzLlxuICAgICAgICAgICAgZm9yIChjb25zdCBwbGF5ZXIgb2YgdGhpcy5zZXNzaW9uTWFuYWdlci5nZXRBbGxQbGF5ZXJzKCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBwbGF5ZXIua2ljaygnU2VydmVyIGNsb3NlZC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBhbGwgbWFuYWdlcnMuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRpc2FibGUoKTtcblxuICAgICAgICAgICAgLy8gYHRoaXMucmFrbmV0YCBtaWdodCBiZSB1bmRlZmluZWQgaWYgd2Uga2lsbCB0aGUgc2VydmVyIHJlYWxseSBlYXJseS5cbiAgICAgICAgICAgICh0aGlzLnJha25ldCBhcyBhbnkpPy5raWxsKCk7XG5cbiAgICAgICAgICAgIC8vIExvZ2dlciBpcyBubyBsb25nZXIgYXZhaWxhYmxlLlxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnU2VydmVyIHN0b3BwZWQsIEdvb2RieWUhXFxuJyk7XG5cbiAgICAgICAgICAgIGlmICghb3B0aW9ucz8uc3RheUFsaXZlKSBwcm9jZXNzLmV4aXQob3B0aW9ucz8uY3Jhc2ggPyAxIDogMCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucz8uc3RheUFsaXZlKSBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnJvYWRjYXN0UGFja2V0PFQgZXh0ZW5kcyBEYXRhUGFja2V0PihkYXRhUGFja2V0OiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIE1heWJlIGkgY2FuIGltcHJvdmUgdGhpcyBieSB1c2luZyB0aGUgVURQIGJyb2FkY2FzdCwgYWxsIHVuY29ubmVjdGVkIGNsaWVudHNcbiAgICAgICAgLy8gd2lsbCBpZ25vcmUgdGhlIGNvbm5lY3RlZCBwYWNrZXQgcHJvYmFibHksIGJ1dCBtYXkgY2F1c2UgaXNzdWVzLlxuICAgICAgICBmb3IgKGNvbnN0IG9ubGluZVBsYXllciBvZiB0aGlzLnNlc3Npb25NYW5hZ2VyLmdldEFsbFBsYXllcnMoKSkge1xuICAgICAgICAgICAgYXdhaXQgb25saW5lUGxheWVyLmdldE5ldHdvcmtTZXNzaW9uKCkuZ2V0Q29ubmVjdGlvbigpLnNlbmREYXRhUGFja2V0KGRhdGFQYWNrZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2VydmVyIHZlcnNpb24uXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHNlcnZlciB2ZXJzaW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnNvbGUubG9nKHNlcnZlci5nZXRWZXJzaW9uKCkpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGlkZW50aWZpZXJzLlxuICAgICAqIEByZXR1cm5zIHtJZGVudGlmaWVyc30gVGhlIGlkZW50aWZpZXJzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJZGVudGlmaWVycygpOiB0eXBlb2YgSWRlbnRpZmllcnMge1xuICAgICAgICByZXR1cm4gSWRlbnRpZmllcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcXVlcnkgbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7UXVlcnlNYW5hZ2VyfSBUaGUgcXVlcnkgbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UXVlcnlNYW5hZ2VyKCk6IFF1ZXJ5TWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5TWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb21tYW5kIG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge0NvbW1hbmRNYW5hZ2VyfSBUaGUgY29tbWFuZCBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb21tYW5kTWFuYWdlcigpOiBDb21tYW5kTWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1hbmRNYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBsYXllciBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtTZXNzaW9uTWFuYWdlcn0gVGhlIHBsYXllciBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTZXNzaW9uTWFuYWdlcigpOiBTZXNzaW9uTWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb25NYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdvcmxkIG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge1dvcmxkTWFuYWdlcn0gVGhlIHdvcmxkIG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldFdvcmxkTWFuYWdlcigpOiBXb3JsZE1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy53b3JsZE1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaXRlbSBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtJdGVtTWFuYWdlcn0gVGhlIGl0ZW0gbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbU1hbmFnZXIoKTogSXRlbU1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtTWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBibG9jayBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtCbG9ja01hbmFnZXJ9IFRoZSBibG9jayBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCbG9ja01hbmFnZXIoKTogQmxvY2tNYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2tNYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvZ2dlci5cbiAgICAgKiBAcmV0dXJucyB7TG9nZ2VyQnVpbGRlcn0gVGhlIGxvZ2dlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBOb3JtYWwgbG9nOlxuICAgICAqIHNlcnZlci5nZXRMb2dnZXIoKS5pbmZvKCdIZWxsbywgd29ybGQhJyk7XG4gICAgICogLy8gRGVidWcgbG9nOlxuICAgICAqIHNlcnZlci5nZXRMb2dnZXIoKS5kZWJ1ZygnSGVsbG8sIHdvcmxkIScpO1xuICAgICAqIC8vIEVycm9yIGxvZzpcbiAgICAgKiBzZXJ2ZXIuZ2V0TG9nZ2VyKCkuZXJyb3IobmV3IEVycm9yKCdIZWxsbyBXb3JsZCcpKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TG9nZ2VyKCk6IExvZ2dlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2dlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwYWNrZXQgcmVnaXN0cnkuXG4gICAgICogQHJldHVybnMge1BhY2tldFJlZ2lzdHJ5fSBUaGUgcGFja2V0IHJlZ2lzdHJ5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQYWNrZXRSZWdpc3RyeSgpOiBQYWNrZXRSZWdpc3RyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhY2tldFJlZ2lzdHJ5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJha25ldCBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyB7UmFrTmV0TGlzdGVuZXJ9IFRoZSByYWtuZXQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGdldFJha25ldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFrbmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNoYXQgbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7Q2hhdE1hbmFnZXJ9IFRoZSBjaGF0IG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldENoYXRNYW5hZ2VyKCk6IENoYXRNYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhdE1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29uZmlnLlxuICAgICAqIEByZXR1cm5zIHtDb25maWd9IFRoZSBjb25maWcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc29sZS5sb2coc2VydmVyLmdldENvbmZpZygpLmdldE1heFBsYXllcnMoKSk7IC8vIDIwXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldENvbmZpZygpOiBDb25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29uc29sZSBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyB7Q29uc29sZSB8IHVuZGVmaW5lZH0gVGhlIGNvbnNvbGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnNvbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnNvbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcGVybWlzc2lvbiBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtQZXJtaXNzaW9uTWFuYWdlcn0gVGhlIHBlcm1pc3Npb24gbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGVybWlzc2lvbk1hbmFnZXIoKTogUGVybWlzc2lvbk1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uTWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiYW4gbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7QmFuTWFuYWdlcn0gVGhlIGJhbiBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCYW5NYW5hZ2VyKCk6IEJhbk1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5iYW5NYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhpcyBQcmlzbWFyaW5lIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtTZXJ2ZXJ9IFRoZSBQcmlzbWFyaW5lIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTZXJ2ZXIoKTogU2VydmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBUaWNrLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjdXJyZW50IFRpY2suXG4gICAgICovXG4gICAgcHVibGljIGdldFRpY2soKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLmN1cnJlbnRUaWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IFRQUy5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCBUUFMuXG4gICAgICovXG4gICAgcHVibGljIGdldFRQUygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTnVtYmVyLnBhcnNlRmxvYXQodGhpcy50cHMudG9GaXhlZCgyKSk7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbIkV2ZW50RW1pdHRlciIsIlNlc3Npb25NYW5hZ2VyIiwidmVyc2lvbiIsIklkZW50aWZpZXJzIiwiUGFja2V0UmVnaXN0cnkiLCJJdGVtTWFuYWdlciIsIkJsb2NrTWFuYWdlciIsIldvcmxkTWFuYWdlciIsIkNvbnNvbGUiLCJDb21tYW5kTWFuYWdlciIsIlF1ZXJ5TWFuYWdlciIsIkNoYXRNYW5hZ2VyIiwiUGVybWlzc2lvbk1hbmFnZXIiLCJCYW5NYW5hZ2VyIiwiQmxvY2tNYXBwaW5ncyIsIlJha05ldExpc3RlbmVyIiwiU2VydmVyTmFtZSIsIlJha25ldENvbm5lY3RFdmVudCIsIlRpbWVyIiwiQ2xpZW50Q29ubmVjdGlvbiIsIlJha25ldERpc2Nvbm5lY3RFdmVudCIsIlJha25ldEVuY2Fwc3VsYXRlZFBhY2tldEV2ZW50IiwiQmF0Y2hQYWNrZXQiLCJwYWNrZXQiLCJUaWNrRXZlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0NBLE1BQXFCLGVBQWVBLGdDQUFhLENBQUE7QUFBQSxFQUNyQyxNQUFBO0FBQUEsRUFDUyxNQUFBO0FBQUEsRUFDQSxNQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsRUFDQSxjQUFBO0FBQUEsRUFDQSxjQUFBLEdBQWlCLElBQUlDLHNCQUFlLEVBQUE7QUFBQSxFQUNwQyxjQUFBO0FBQUEsRUFDQSxZQUFBO0FBQUEsRUFDQSxXQUFBO0FBQUEsRUFDQSxZQUFBO0FBQUEsRUFDQSxZQUFBO0FBQUEs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
|
package/dist/Server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKrD,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAE7C,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,cAAc,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAGhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;OAGG;IACH,OAAO,CAAC,WAAW,CAA6B;IAEhD;;;OAGG;IACH,OAAO,CAAC,GAAG,CAAM;IAEjB;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAM;IAEzB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IAGnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAa;IAE3D;;;;;;OAMG;gBACgB,EAAE,MAAM,EAAE,MAAM,EAAE,QAAgB,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;IAuB/G;;;;OAIG;YACW,MAAM;
|
|
1
|
+
{"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKrD,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAE7C,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,cAAc,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAGhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;OAGG;IACH,OAAO,CAAC,WAAW,CAA6B;IAEhD;;;OAGG;IACH,OAAO,CAAC,GAAG,CAAM;IAEjB;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAM;IAEzB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IAGnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAa;IAE3D;;;;;;OAMG;gBACgB,EAAE,MAAM,EAAE,MAAM,EAAE,QAAgB,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;IAuB/G;;;;OAIG;YACW,MAAM;IAiBpB;;;;OAIG;YACW,OAAO;IAed,WAAW;IAIlB;;;;;OAKG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC;;;;;OAKG;IACU,SAAS,CAAC,QAAQ,SAAY,EAAE,IAAI,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiLzE;;;;;OAKG;IACU,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B3E,eAAe,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhF;;;;;;;OAOG;IACI,UAAU,IAAI,MAAM;IAI3B;;;OAGG;IACI,cAAc,IAAI,OAAO,WAAW;IAI3C;;;OAGG;IACI,eAAe,IAAI,YAAY;IAItC;;;OAGG;IACI,iBAAiB,IAAI,cAAc;IAI1C;;;OAGG;IACI,iBAAiB,IAAI,cAAc;IAI1C;;;OAGG;IACI,eAAe,IAAI,YAAY;IAItC;;;OAGG;IACI,cAAc,IAAI,WAAW;IAIpC;;;OAGG;IACI,eAAe,IAAI,YAAY;IAItC;;;;;;;;;;;;OAYG;IACI,SAAS,IAAI,MAAM;IAI1B;;;OAGG;IACI,iBAAiB,IAAI,cAAc;IAI1C;;;OAGG;IACI,SAAS;IAIhB;;;OAGG;IACI,cAAc,IAAI,WAAW;IAIpC;;;;;;;OAOG;IACI,SAAS,IAAI,MAAM;IAI1B;;;OAGG;IACI,UAAU;IAIjB;;;OAGG;IACI,oBAAoB,IAAI,iBAAiB;IAIhD;;;OAGG;IACI,aAAa,IAAI,UAAU;IAIlC;;;OAGG;IACI,SAAS,IAAI,MAAM;IAI1B;;;OAGG;IACI,OAAO,IAAI,MAAM;IAIxB;;;OAGG;IACI,MAAM,IAAI,MAAM;CAG1B"}
|
package/dist/Server.es.js
CHANGED
|
@@ -97,14 +97,17 @@ class Server extends EventEmitter {
|
|
|
97
97
|
* @internal
|
|
98
98
|
*/
|
|
99
99
|
async enable() {
|
|
100
|
+
await BlockMappings.initMappings(this);
|
|
100
101
|
await this.config.enable();
|
|
101
102
|
await this.console?.enable();
|
|
102
103
|
await this.logger.enable();
|
|
103
104
|
await this.permissionManager.enable();
|
|
104
|
-
await this.
|
|
105
|
+
await this.packetRegistry.enable();
|
|
105
106
|
await this.itemManager.enable();
|
|
106
107
|
await this.blockManager.enable();
|
|
108
|
+
await this.banManager.enable();
|
|
107
109
|
await this.commandManager.enable();
|
|
110
|
+
await this.worldManager.enable();
|
|
108
111
|
this.logger.setConsole(this.console);
|
|
109
112
|
}
|
|
110
113
|
/**
|
|
@@ -115,9 +118,9 @@ class Server extends EventEmitter {
|
|
|
115
118
|
async disable() {
|
|
116
119
|
await this.worldManager.disable();
|
|
117
120
|
await this.commandManager.disable();
|
|
121
|
+
await this.banManager.disable();
|
|
118
122
|
await this.blockManager.disable();
|
|
119
123
|
await this.itemManager.disable();
|
|
120
|
-
await this.banManager.disable();
|
|
121
124
|
await this.permissionManager.disable();
|
|
122
125
|
await this.packetRegistry.disable();
|
|
123
126
|
await this.config.disable();
|
|
@@ -145,9 +148,6 @@ class Server extends EventEmitter {
|
|
|
145
148
|
*/
|
|
146
149
|
async bootstrap(serverIp = "0.0.0.0", port = 19132) {
|
|
147
150
|
await this.enable();
|
|
148
|
-
await BlockMappings.initMappings(this);
|
|
149
|
-
await this.worldManager.enable();
|
|
150
|
-
await this.packetRegistry.enable();
|
|
151
151
|
this.raknet = new RakNetListener(
|
|
152
152
|
this.getConfig().getMaxPlayers(),
|
|
153
153
|
this.getConfig().getOnlineMode(),
|
|
@@ -295,11 +295,8 @@ class Server extends EventEmitter {
|
|
|
295
295
|
await player.kick("Server closed.");
|
|
296
296
|
}
|
|
297
297
|
await this.disable();
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
} catch {
|
|
301
|
-
}
|
|
302
|
-
this.getLogger().info("Server stopped, Goodbye!\n");
|
|
298
|
+
this.raknet?.kill();
|
|
299
|
+
console.debug("Server stopped, Goodbye!\n");
|
|
303
300
|
if (!options?.stayAlive) process.exit(options?.crash ? 1 : 0);
|
|
304
301
|
} catch (error) {
|
|
305
302
|
console.error(error);
|
|
@@ -464,4 +461,4 @@ class Server extends EventEmitter {
|
|
|
464
461
|
}
|
|
465
462
|
|
|
466
463
|
export { Server as default };
|
|
467
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyLmVzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvU2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJha05ldExpc3RlbmVyLCBTZXJ2ZXJOYW1lIH0gZnJvbSAnQGpzcHJpc21hcmluZS9yYWtuZXQnO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnLi9Db25zb2xlJztcbmltcG9ydCBTZXNzaW9uTWFuYWdlciBmcm9tICcuL1Nlc3Npb25NYW5hZ2VyJztcbmltcG9ydCBCYW5NYW5hZ2VyIGZyb20gJy4vYmFuL0Jhbk1hbmFnZXInO1xuaW1wb3J0IEJsb2NrTWFuYWdlciBmcm9tICcuL2Jsb2NrL0Jsb2NrTWFuYWdlcic7XG5pbXBvcnQgeyBCbG9ja01hcHBpbmdzIH0gZnJvbSAnLi9ibG9jay9CbG9ja01hcHBpbmdzJztcbmltcG9ydCB7IENoYXRNYW5hZ2VyIH0gZnJvbSAnLi9jaGF0L0NoYXRNYW5hZ2VyJztcbmltcG9ydCB7IENvbW1hbmRNYW5hZ2VyIH0gZnJvbSAnLi9jb21tYW5kL0NvbW1hbmRNYW5hZ2VyJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4vZXZlbnRzL0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgeyBUaWNrRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9FdmVudHMnO1xuaW1wb3J0IFJha25ldENvbm5lY3RFdmVudCBmcm9tICcuL2V2ZW50cy9yYWtuZXQvUmFrbmV0Q29ubmVjdEV2ZW50JztcbmltcG9ydCBSYWtuZXREaXNjb25uZWN0RXZlbnQgZnJvbSAnLi9ldmVudHMvcmFrbmV0L1Jha25ldERpc2Nvbm5lY3RFdmVudCc7XG5pbXBvcnQgUmFrbmV0RW5jYXBzdWxhdGVkUGFja2V0RXZlbnQgZnJvbSAnLi9ldmVudHMvcmFrbmV0L1Jha25ldEVuY2Fwc3VsYXRlZFBhY2tldEV2ZW50JztcbmltcG9ydCBJdGVtTWFuYWdlciBmcm9tICcuL2l0ZW0vSXRlbU1hbmFnZXInO1xuaW1wb3J0IENsaWVudENvbm5lY3Rpb24gZnJvbSAnLi9uZXR3b3JrL0NsaWVudENvbm5lY3Rpb24nO1xuaW1wb3J0IElkZW50aWZpZXJzIGZyb20gJy4vbmV0d29yay9JZGVudGlmaWVycyc7XG5pbXBvcnQgUGFja2V0UmVnaXN0cnkgZnJvbSAnLi9uZXR3b3JrL1BhY2tldFJlZ2lzdHJ5JztcbmltcG9ydCB0eXBlIHsgRGF0YVBhY2tldCB9IGZyb20gJy4vbmV0d29yay9QYWNrZXRzJztcbmltcG9ydCBCYXRjaFBhY2tldCBmcm9tICcuL25ldHdvcmsvcGFja2V0L0JhdGNoUGFja2V0JztcbmltcG9ydCB7IFBlcm1pc3Npb25NYW5hZ2VyIH0gZnJvbSAnLi9wZXJtaXNzaW9uL1Blcm1pc3Npb25NYW5hZ2VyJztcbmltcG9ydCB7IFF1ZXJ5TWFuYWdlciB9IGZyb20gJy4vcXVlcnkvUXVlcnlNYW5hZ2VyJztcbmltcG9ydCBUaW1lciBmcm9tICcuL3V0aWxzL1RpbWVyJztcbmltcG9ydCBXb3JsZE1hbmFnZXIgZnJvbSAnLi93b3JsZC9Xb3JsZE1hbmFnZXInO1xuXG5pbXBvcnQgdHlwZSB7IEluZXRBZGRyZXNzLCBSYWtOZXRTZXNzaW9uIH0gZnJvbSAnQGpzcHJpc21hcmluZS9yYWtuZXQnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuL2NvbmZpZy9Db25maWcnO1xuXG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbG9nZ2VyJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nIHdpdGggeyB0eXBlOiAnanNvbicgfTtcblxuLyoqXG4gKiBKU1ByaXNtYXJpbmUncyBtYWluIHNlcnZlciBjbGFzcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VydmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBwcml2YXRlIHJha25ldCE6IFJha05ldExpc3RlbmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnNvbGU6IENvbnNvbGUgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWNrZXRSZWdpc3RyeTogUGFja2V0UmVnaXN0cnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uTWFuYWdlciA9IG5ldyBTZXNzaW9uTWFuYWdlcigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZE1hbmFnZXI6IENvbW1hbmRNYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd29ybGRNYW5hZ2VyOiBXb3JsZE1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtTWFuYWdlcjogSXRlbU1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBibG9ja01hbmFnZXI6IEJsb2NrTWFuYWdlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5TWFuYWdlcjogUXVlcnlNYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhdE1hbmFnZXI6IENoYXRNYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvbk1hbmFnZXI6IFBlcm1pc3Npb25NYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFuTWFuYWdlcjogQmFuTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzZXJ2ZXIgaXMgc3RvcHBpbmcuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdG9wcGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgdGlja2VyIHRpbWVyLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgdGlja2VyVGltZXI6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgVFBTLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgdHBzID0gMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCB0aWNrLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgY3VycmVudFRpY2sgPSAwbjtcblxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzZXJ2ZXIgaXMgaGVhZGxlc3MuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBoZWFkbGVzczogYm9vbGVhbjtcblxuICAgIC8vIFRPRE86IE1vdmUgdGhpcyBzb21ld2hlcmUgZWxzZS5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNSU5FQ1JBRlRfVElDS19USU1FX01TID0gMTAwMCAvIDIwO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBzZXJ2ZXIgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0xvZ2dlckJ1aWxkZXJ9IG9wdGlvbnMubG9nZ2VyIC0gVGhlIGxvZ2dlci5cbiAgICAgKiBAcGFyYW0ge0NvbmZpZ30gb3B0aW9ucy5jb25maWcgLSBUaGUgY29uZmlnLlxuICAgICAqIEByZXR1cm5zIHtTZXJ2ZXJ9IFRoZSBzZXJ2ZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHsgbG9nZ2VyLCBjb25maWcsIGhlYWRsZXNzID0gZmFsc2UgfTogeyBsb2dnZXI6IExvZ2dlcjsgY29uZmlnOiBDb25maWc7IGhlYWRsZXNzPzogYm9vbGVhbiB9KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5oZWFkbGVzcyA9IGhlYWRsZXNzO1xuXG4gICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFN0YXJ0aW5nIEpTUHJpc21hcmluZSBzZXJ2ZXIgdmVyc2lvbiDCp2V2JHt2ZXJzaW9ufcKnciBmb3IgTWluZWNyYWZ0OiBCZWRyb2NrIEVkaXRpb24gJHtJZGVudGlmaWVycy5NaW5lY3JhZnRWZXJzaW9ucy5hdCgtMSl9IChwcm90b2NvbCB2ZXJzaW9uIMKnZSR7SWRlbnRpZmllcnMuUHJvdG9jb2x9wqdyKWBcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMucGFja2V0UmVnaXN0cnkgPSBuZXcgUGFja2V0UmVnaXN0cnkodGhpcyk7XG4gICAgICAgIHRoaXMuaXRlbU1hbmFnZXIgPSBuZXcgSXRlbU1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmxvY2tNYW5hZ2VyID0gbmV3IEJsb2NrTWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy53b3JsZE1hbmFnZXIgPSBuZXcgV29ybGRNYW5hZ2VyKHRoaXMpO1xuICAgICAgICBpZiAoIXRoaXMuaGVhZGxlc3MpIHRoaXMuY29uc29sZSA9IG5ldyBDb25zb2xlKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyID0gbmV3IENvbW1hbmRNYW5hZ2VyKHRoaXMpO1xuICAgICAgICB0aGlzLnF1ZXJ5TWFuYWdlciA9IG5ldyBRdWVyeU1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMuY2hhdE1hbmFnZXIgPSBuZXcgQ2hhdE1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbk1hbmFnZXIgPSBuZXcgUGVybWlzc2lvbk1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmFuTWFuYWdlciA9IG5ldyBCYW5NYW5hZ2VyKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIHNlcnZlci5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIGVuYWJsZWQuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBlbmFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbnNvbGU/LmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2dlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wZXJtaXNzaW9uTWFuYWdlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5iYW5NYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLml0ZW1NYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmJsb2NrTWFuYWdlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tYW5kTWFuYWdlci5lbmFibGUoKTtcblxuICAgICAgICB0aGlzLmxvZ2dlci5zZXRDb25zb2xlKHRoaXMuY29uc29sZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIHNlcnZlci5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIGRpc2FibGVkLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgZGlzYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy53b3JsZE1hbmFnZXIuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbW1hbmRNYW5hZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ibG9ja01hbmFnZXIuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLml0ZW1NYW5hZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5iYW5NYW5hZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wZXJtaXNzaW9uTWFuYWdlci5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucGFja2V0UmVnaXN0cnkuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZy5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRpc2FibGUoKTtcblxuICAgICAgICAvLyBGaW5hbGx5LCByZW1vdmUgYWxsIGxpc3RlbmVycy5cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJha25ldCgpLnNlcnZlck5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsb2FkcyB0aGUgc2VydmVyLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXJ2ZXIgaXMgcmVsb2FkZWQuXG4gICAgICogQHJlbWFya3MgVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHtAbGluayBTZXJ2ZXIjZGlzYWJsZX0gYW5kIHtAbGluayBTZXJ2ZXIjZW5hYmxlfS5cbiAgICAgKiBAcmVtYXJrcyBUaGlzIG1ldGhvZCBhbmQgZnVuY3Rpb25hbGl0eSBpcyB1bnN1cHBvcnRlZCBhbmQgc2hvdWxkIGlkZWFsbHkgYmUgY29tcGxldGVseSBhdm9pZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyByZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyB0aGUgc2VydmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VydmVySXA9JzAuMC4wLjAnXSAtIFRoZSBzZXJ2ZXIgSVAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3J0PTE5MTMyXSAtIFRoZSBzZXJ2ZXIgcG9ydC5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIHN0YXJ0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGJvb3RzdHJhcChzZXJ2ZXJJcCA9ICcwLjAuMC4wJywgcG9ydCA9IDE5MTMyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5hYmxlKCk7XG4gICAgICAgIGF3YWl0IEJsb2NrTWFwcGluZ3MuaW5pdE1hcHBpbmdzKHRoaXMpO1xuICAgICAgICBhd2FpdCB0aGlzLndvcmxkTWFuYWdlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wYWNrZXRSZWdpc3RyeS5lbmFibGUoKTtcblxuICAgICAgICB0aGlzLnJha25ldCA9IG5ldyBSYWtOZXRMaXN0ZW5lcihcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZmlnKCkuZ2V0TWF4UGxheWVycygpLFxuICAgICAgICAgICAgdGhpcy5nZXRDb25maWcoKS5nZXRPbmxpbmVNb2RlKCksXG4gICAgICAgICAgICBuZXcgU2VydmVyTmFtZSh0aGlzKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0TG9nZ2VyKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yYWtuZXQuc3RhcnQoc2VydmVySXAsIHBvcnQpO1xuXG4gICAgICAgIHRoaXMucmFrbmV0Lm9uKCdvcGVuQ29ubmVjdGlvbicsIGFzeW5jIChzZXNzaW9uOiBSYWtOZXRTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBSYWtuZXRDb25uZWN0RXZlbnQoc2Vzc2lvbik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3Jha25ldENvbm5lY3QnLCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5pc0NhbmNlbGxlZCgpKSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHNlc3Npb24uZ2V0QWRkcmVzcygpLnRvVG9rZW4oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb25NYW5hZ2VyLmhhcyh0b2tlbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW5vdGhlciBjbGllbnQgd2l0aCB0b2tlbiAoJHt0b2tlbn0pIGlzIGFscmVhZHkgY29ubmVjdGVkIWApO1xuICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzY29ubmVjdCgnQWxyZWFkeSBjb25uZWN0ZWQgZnJvbSBhbm90aGVyIGxvY2F0aW9uJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IG5ldyBUaW1lcigpO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYCR7dG9rZW59IGlzIGF0dGVtcHRpbmcgdG8gY29ubmVjdGApO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uTWFuYWdlci5hZGQodG9rZW4sIG5ldyBDbGllbnRDb25uZWN0aW9uKHNlc3Npb24sIHRoaXMubG9nZ2VyKSk7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBOZXcgY29ubmVjdGlvbiBoYW5kbGluZyB0b29rIMKnZSR7dGltZXIuc3RvcCgpfSBtc8KncmApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJha25ldC5vbignY2xvc2VDb25uZWN0aW9uJywgYXN5bmMgKGluZXRBZGRyOiBJbmV0QWRkcmVzcywgcmVhc29uOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFJha25ldERpc2Nvbm5lY3RFdmVudChpbmV0QWRkciwgcmVhc29uKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgncmFrbmV0RGlzY29ubmVjdCcsIGV2ZW50KTtcblxuICAgICAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGluZXRBZGRyLnRvVG9rZW4oKTtcblxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbk1hbmFnZXIuZ2V0KHRva2VuKTtcbiAgICAgICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDYW5ub3QgcmVtb3ZlIGNvbm5lY3Rpb24gZnJvbSBub24tZXhpc3RpbmcgcGxheWVyICgke3Rva2VufSlgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IHNlc3Npb24uY2xvc2VQbGF5ZXJTZXNzaW9uKCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbk1hbmFnZXIucmVtb3ZlKHRva2VuKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGAke3Rva2VufSBkaXNjb25uZWN0ZWQgZHVlIHRvICR7cmVhc29ufWApO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFBsYXllciBkZXN0cnVjdGlvbiB0b29rIGFib3V0ICR7RGF0ZS5ub3coKSAtIHRpbWV9IG1zYCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmFrbmV0Lm9uKCdlbmNhcHN1bGF0ZWQnLCBhc3luYyAocGFja2V0OiBhbnksIGluZXRBZGRyOiBJbmV0QWRkcmVzcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgUmFrbmV0RW5jYXBzdWxhdGVkUGFja2V0RXZlbnQoaW5ldEFkZHIsIHBhY2tldCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3Jha25ldEVuY2Fwc3VsYXRlZFBhY2tldCcsIGV2ZW50KTtcblxuICAgICAgICAgICAgbGV0IGNvbm5lY3Rpb246IENsaWVudENvbm5lY3Rpb24gfCBudWxsO1xuICAgICAgICAgICAgaWYgKChjb25uZWN0aW9uID0gdGhpcy5zZXNzaW9uTWFuYWdlci5nZXQoaW5ldEFkZHIudG9Ub2tlbigpKSA/PyBudWxsKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBHb3QgYSBwYWNrZXQgZnJvbSBhIGNsb3NlZCBjb25uZWN0aW9uICgke2luZXRBZGRyLnRvVG9rZW4oKX0pYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFJlYWQgYmF0Y2ggY29udGVudCBhbmQgaGFuZGxlIHRoZW1cbiAgICAgICAgICAgICAgICBjb25zdCBiYXRjaGVkID0gbmV3IEJhdGNoUGFja2V0KHBhY2tldC5jb250ZW50KTtcbiAgICAgICAgICAgICAgICBiYXRjaGVkLmNvbXByZXNzZWQgPSBjb25uZWN0aW9uLmhhc0NvbXByZXNzaW9uO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVhZCBhbGwgcGFja2V0cyBpbnNpZGUgYmF0Y2ggYW5kIGhhbmRsZSB0aGVtXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBidWYgb2YgYXdhaXQgYmF0Y2hlZC5hc3luY0RlY29kZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpZCA9IGJ1ZlswXSE7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhY2tldFJlZ2lzdHJ5LmdldFBhY2tldHMoKS5oYXMocGlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgUGFja2V0IDB4JHtwaWQudG9TdHJpbmcoMTYpfSBpc24ndCBpbXBsZW1lbnRlZGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBHZXQgcGFja2V0IGZyb20gcmVnaXN0cnlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFja2V0ID0gbmV3ICh0aGlzLnBhY2tldFJlZ2lzdHJ5LmdldFBhY2tldHMoKS5nZXQocGlkKSEpKGJ1Zik7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldC5kZWNvZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBFcnJvciB3aGlsZSBkZWNvZGluZyBwYWNrZXQ6ICR7cGFja2V0LmNvbnN0cnVjdG9yLm5hbWV9OiAke2Vycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMucGFja2V0UmVnaXN0cnkuZ2V0SGFuZGxlcihwaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuc2lsbHkoYFJlY2VpdmVkIMKnYiR7cGFja2V0LmNvbnN0cnVjdG9yLm5hbWV9wqdyIHBhY2tldGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgKGhhbmRsZXIgYXMgYW55KS5oYW5kbGUocGFja2V0LCB0aGlzLCBjb25uZWN0aW9uLmdldFBsYXllclNlc3Npb24oKSA/PyBjb25uZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBIYW5kbGVyIGVycm9yICR7cGFja2V0LmNvbnN0cnVjdG9yLm5hbWV9LWhhbmRsZXI6ICgke2Vycm9yfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJha25ldC5vbigncmF3JywgYXN5bmMgKGJ1ZmZlcjogQnVmZmVyLCBpbmV0QWRkcjogSW5ldEFkZHJlc3MpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcuZ2V0RW5hYmxlUXVlcnkoKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlNYW5hZ2VyLm9uUmF3KGJ1ZmZlciwgaW5ldEFkZHIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBRdWVyeU1hbmFnZXIgZW5jb3VudGVyZWQgYW4gZXJyb3JgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5nZXRFbmFibGVUaWNraW5nKCkpIHtcbiAgICAgICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgbGV0IHRwc1N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBsZXQgbGFzdFRpY2tUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCB0cHNTdGFydFRpY2sgPSB0aGlzLmdldFRpY2soKTtcbiAgICAgICAgICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RvcHBpbmcpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFRpY2tFdmVudCh0aGlzLmdldFRpY2soKSk7XG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLmVtaXQoJ3RpY2snLCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0aWNrc1BlclNlY29uZCA9IDEwMDAgLyBTZXJ2ZXIuTUlORUNSQUZUX1RJQ0tfVElNRV9NUztcblxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBhbGwgd29ybGRzLlxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgd29ybGQgb2YgdGhpcy53b3JsZE1hbmFnZXIuZ2V0V29ybGRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdm9pZCB3b3JsZC51cGRhdGUoZXZlbnQuZ2V0VGljaygpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgUmFrTmV0IHNlcnZlciBuYW1lLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5nZXRFbmFibGVUaXRsZSgpICYmIHRoaXMuZ2V0VGljaygpICUgdGlja3NQZXJTZWNvbmQgPT09IDAgJiYgIXRoaXMuaGVhZGxlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwcm9jZXNzIHRpdGxlIHdpdGggVFBTIGFuZCB0aWNrLlxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnRpdGxlID0gYFRQUzogJHt0aGlzLmdldFRQUygpLnRvRml4ZWQoMil9IHwgVGljazogJHt0aGlzLmdldFRpY2soKX0gfCAke3Byb2Nlc3MudGl0bGUuc3BsaXQoJ3wgJykuYXQoLTEpIX1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRpY2srKztcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGFwc2VkVGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRFbGFwc2VkVGltZSA9IHRoaXMuZ2V0VGljaygpICogU2VydmVyLk1JTkVDUkFGVF9USUNLX1RJTUVfTVM7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0aW9uVGltZSA9IGVuZFRpbWUgLSBsYXN0VGlja1RpbWU7XG5cbiAgICAgICAgICAgICAgICAvLyBBZGp1c3Qgc2xlZXBUaW1lIGJhc2VkIG9uIGV4ZWN1dGlvbiBzcGVlZC5cbiAgICAgICAgICAgICAgICBsZXQgc2xlZXBUaW1lID0gU2VydmVyLk1JTkVDUkFGVF9USUNLX1RJTUVfTVMgLSBleGVjdXRpb25UaW1lO1xuICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkVGltZSA8IGV4cGVjdGVkRWxhcHNlZFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcnVubmluZyBmYXN0ZXIgdGhhbiBleHBlY3RlZCwgaW5jcmVhc2Ugc2xlZXBUaW1lLlxuICAgICAgICAgICAgICAgICAgICBzbGVlcFRpbWUgKz0gZXhwZWN0ZWRFbGFwc2VkVGltZSAtIGVsYXBzZWRUaW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxhcHNlZFRpbWUgPiBleHBlY3RlZEVsYXBzZWRUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHJ1bm5pbmcgc2xvd2VyIHRoYW4gZXhwZWN0ZWQsIGRlY3JlYXNlIHNsZWVwVGltZSBidXQgZG9uJ3QgbGV0IGl0IGdvIGJlbG93IDAuXG4gICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZSA9IE1hdGgubWF4KDAsIHNsZWVwVGltZSAtIChlbGFwc2VkVGltZSAtIGV4cGVjdGVkRWxhcHNlZFRpbWUpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHBzIGJhc2VkIG9uIHRoZSBhY3R1YWwgZWxhcHNlZCB0aW1lIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgdGljay5cbiAgICAgICAgICAgICAgICBpZiAodHBzU3RhcnRUaW1lICE9PSBlbmRUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHBzID0gKCh0aGlzLmdldFRpY2soKSAtIHRwc1N0YXJ0VGljaykgKiAxMDAwKSAvIChlbmRUaW1lIC0gdHBzU3RhcnRUaW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZW5kVGltZSAtIHRwc1N0YXJ0VGltZSA+PSAxMDAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRwc1N0YXJ0VGljayA9IHRoaXMuZ2V0VGljaygpO1xuICAgICAgICAgICAgICAgICAgICB0cHNTdGFydFRpbWUgPSBlbmRUaW1lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudHBzID0gTWF0aC5taW4odGhpcy50cHMsIDIwKTsgLy8gRW5zdXJlIHRwcyBkb2VzIG5vdCBleGNlZWQgMjBcblxuICAgICAgICAgICAgICAgIGxhc3RUaWNrVGltZSA9IGVuZFRpbWU7XG4gICAgICAgICAgICAgICAgdGhpcy50aWNrZXJUaW1lciA9IHNldFRpbWVvdXQodGljaywgc2xlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpY2tlclRpbWVyLnVucmVmKCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBTdGFydCB0aWNraW5nXG4gICAgICAgICAgICB0aWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKGBKU1ByaXNtYXJpbmUgaXMgbm93IGxpc3RlbmluZyBvbiBwb3J0IMKnYiR7cG9ydH1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLaWxscyB0aGUgc2VydmVyIGFzeW5jaHJvbm91c2x5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBUaGUgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNyYXNoXSAtIElmIHRoZSBzZXJ2ZXIgc2hvdWxkIGNyYXNoLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXJ2ZXIgaXMga2lsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBzaHV0ZG93bihvcHRpb25zPzogeyBjcmFzaD86IGJvb2xlYW47IHN0YXlBbGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5zdG9wcGluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLnN0b3BwaW5nID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKCdTdG9wcGluZyBzZXJ2ZXInLCAnU2VydmVyL2tpbGwnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25zb2xlPy5kaXNhYmxlKCk7XG5cbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpY2tlclRpbWVyKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gS2ljayBhbGwgb25saW5lIHBsYXllcnMuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBsYXllciBvZiB0aGlzLnNlc3Npb25NYW5hZ2VyLmdldEFsbFBsYXllcnMoKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHBsYXllci5raWNrKCdTZXJ2ZXIgY2xvc2VkLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNhYmxlIGFsbCBtYW5hZ2Vycy5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICAgICAgICAvLyBgdGhpcy5yYWtuZXRgIG1pZ2h0IGJlIHVuZGVmaW5lZCBpZiB3ZSBraWxsIHRoZSBzZXJ2ZXIgcmVhbGx5IGVhcmx5LlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJha25ldC5raWxsKCk7XG4gICAgICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0TG9nZ2VyKCkuaW5mbygnU2VydmVyIHN0b3BwZWQsIEdvb2RieWUhXFxuJyk7XG5cbiAgICAgICAgICAgIGlmICghb3B0aW9ucz8uc3RheUFsaXZlKSBwcm9jZXNzLmV4aXQob3B0aW9ucz8uY3Jhc2ggPyAxIDogMCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucz8uc3RheUFsaXZlKSBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnJvYWRjYXN0UGFja2V0PFQgZXh0ZW5kcyBEYXRhUGFja2V0PihkYXRhUGFja2V0OiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIE1heWJlIGkgY2FuIGltcHJvdmUgdGhpcyBieSB1c2luZyB0aGUgVURQIGJyb2FkY2FzdCwgYWxsIHVuY29ubmVjdGVkIGNsaWVudHNcbiAgICAgICAgLy8gd2lsbCBpZ25vcmUgdGhlIGNvbm5lY3RlZCBwYWNrZXQgcHJvYmFibHksIGJ1dCBtYXkgY2F1c2UgaXNzdWVzLlxuICAgICAgICBmb3IgKGNvbnN0IG9ubGluZVBsYXllciBvZiB0aGlzLnNlc3Npb25NYW5hZ2VyLmdldEFsbFBsYXllcnMoKSkge1xuICAgICAgICAgICAgYXdhaXQgb25saW5lUGxheWVyLmdldE5ldHdvcmtTZXNzaW9uKCkuZ2V0Q29ubmVjdGlvbigpLnNlbmREYXRhUGFja2V0KGRhdGFQYWNrZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2VydmVyIHZlcnNpb24uXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHNlcnZlciB2ZXJzaW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnNvbGUubG9nKHNlcnZlci5nZXRWZXJzaW9uKCkpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGlkZW50aWZpZXJzLlxuICAgICAqIEByZXR1cm5zIHtJZGVudGlmaWVyc30gVGhlIGlkZW50aWZpZXJzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJZGVudGlmaWVycygpOiB0eXBlb2YgSWRlbnRpZmllcnMge1xuICAgICAgICByZXR1cm4gSWRlbnRpZmllcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcXVlcnkgbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7UXVlcnlNYW5hZ2VyfSBUaGUgcXVlcnkgbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UXVlcnlNYW5hZ2VyKCk6IFF1ZXJ5TWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5TWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb21tYW5kIG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge0NvbW1hbmRNYW5hZ2VyfSBUaGUgY29tbWFuZCBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb21tYW5kTWFuYWdlcigpOiBDb21tYW5kTWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1hbmRNYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBsYXllciBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtTZXNzaW9uTWFuYWdlcn0gVGhlIHBsYXllciBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTZXNzaW9uTWFuYWdlcigpOiBTZXNzaW9uTWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb25NYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdvcmxkIG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge1dvcmxkTWFuYWdlcn0gVGhlIHdvcmxkIG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldFdvcmxkTWFuYWdlcigpOiBXb3JsZE1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy53b3JsZE1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaXRlbSBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtJdGVtTWFuYWdlcn0gVGhlIGl0ZW0gbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbU1hbmFnZXIoKTogSXRlbU1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtTWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBibG9jayBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtCbG9ja01hbmFnZXJ9IFRoZSBibG9jayBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCbG9ja01hbmFnZXIoKTogQmxvY2tNYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2tNYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvZ2dlci5cbiAgICAgKiBAcmV0dXJucyB7TG9nZ2VyQnVpbGRlcn0gVGhlIGxvZ2dlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBOb3JtYWwgbG9nOlxuICAgICAqIHNlcnZlci5nZXRMb2dnZXIoKS5pbmZvKCdIZWxsbywgd29ybGQhJyk7XG4gICAgICogLy8gRGVidWcgbG9nOlxuICAgICAqIHNlcnZlci5nZXRMb2dnZXIoKS5kZWJ1ZygnSGVsbG8sIHdvcmxkIScpO1xuICAgICAqIC8vIEVycm9yIGxvZzpcbiAgICAgKiBzZXJ2ZXIuZ2V0TG9nZ2VyKCkuZXJyb3IobmV3IEVycm9yKCdIZWxsbyBXb3JsZCcpKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TG9nZ2VyKCk6IExvZ2dlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2dlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwYWNrZXQgcmVnaXN0cnkuXG4gICAgICogQHJldHVybnMge1BhY2tldFJlZ2lzdHJ5fSBUaGUgcGFja2V0IHJlZ2lzdHJ5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQYWNrZXRSZWdpc3RyeSgpOiBQYWNrZXRSZWdpc3RyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhY2tldFJlZ2lzdHJ5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJha25ldCBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyB7UmFrTmV0TGlzdGVuZXJ9IFRoZSByYWtuZXQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGdldFJha25ldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFrbmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNoYXQgbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7Q2hhdE1hbmFnZXJ9IFRoZSBjaGF0IG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldENoYXRNYW5hZ2VyKCk6IENoYXRNYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhdE1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29uZmlnLlxuICAgICAqIEByZXR1cm5zIHtDb25maWd9IFRoZSBjb25maWcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc29sZS5sb2coc2VydmVyLmdldENvbmZpZygpLmdldE1heFBsYXllcnMoKSk7IC8vIDIwXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldENvbmZpZygpOiBDb25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29uc29sZSBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyB7Q29uc29sZSB8IHVuZGVmaW5lZH0gVGhlIGNvbnNvbGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnNvbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnNvbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcGVybWlzc2lvbiBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtQZXJtaXNzaW9uTWFuYWdlcn0gVGhlIHBlcm1pc3Npb24gbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGVybWlzc2lvbk1hbmFnZXIoKTogUGVybWlzc2lvbk1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uTWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiYW4gbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7QmFuTWFuYWdlcn0gVGhlIGJhbiBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCYW5NYW5hZ2VyKCk6IEJhbk1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5iYW5NYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhpcyBQcmlzbWFyaW5lIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtTZXJ2ZXJ9IFRoZSBQcmlzbWFyaW5lIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTZXJ2ZXIoKTogU2VydmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBUaWNrLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjdXJyZW50IFRpY2suXG4gICAgICovXG4gICAgcHVibGljIGdldFRpY2soKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLmN1cnJlbnRUaWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IFRQUy5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCBUUFMuXG4gICAgICovXG4gICAgcHVibGljIGdldFRQUygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTnVtYmVyLnBhcnNlRmxvYXQodGhpcy50cHMudG9GaXhlZCgyKSk7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbInBhY2tldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDQSxNQUFxQixlQUFlLFlBQWEsQ0FBQTtBQUFBLEVBQ3JDLE1BQUE7QUFBQSxFQUNTLE1BQUE7QUFBQSxFQUNBLE1BQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxFQUNBLGNBQUE7QUFBQSxFQUNBLGNBQUEsR0FBaUIsSUFBSSxjQUFlLEVBQUE7QUFBQSxFQUNwQyxjQUFBO0FBQUEsRUFDQSxZQUFBO0FBQUEsRUFDQSxXQUFBO0FBQUEsRUFDQSxZQUFBO0FBQUEsRUFDQSxZQUFBO0FBQUEsRUFDQSxXQUFBO0FBQUEsRUFDQSxpQkFBQTtBQUFBLEVBQ0EsVUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNVCxRQUFXLEdBQUEsS0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNWCxXQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLEdBQU0sR0FBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1OLFdBQWMsR0FBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1MLFFBQUE7QUFBQTtBQUFBLEVBR2pCLE9BQXdCLHlCQUF5QixHQUFPLEdBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTakQsWUFBWSxFQUFFLE1BQUEsRUFBUSxNQUFRLEVBQUEsUUFBQSxHQUFXLE9BQWlFLEVBQUE7QUFDN0csSUFB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
|
|
464
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyLmVzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvU2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJha05ldExpc3RlbmVyLCBTZXJ2ZXJOYW1lIH0gZnJvbSAnQGpzcHJpc21hcmluZS9yYWtuZXQnO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnLi9Db25zb2xlJztcbmltcG9ydCBTZXNzaW9uTWFuYWdlciBmcm9tICcuL1Nlc3Npb25NYW5hZ2VyJztcbmltcG9ydCBCYW5NYW5hZ2VyIGZyb20gJy4vYmFuL0Jhbk1hbmFnZXInO1xuaW1wb3J0IEJsb2NrTWFuYWdlciBmcm9tICcuL2Jsb2NrL0Jsb2NrTWFuYWdlcic7XG5pbXBvcnQgeyBCbG9ja01hcHBpbmdzIH0gZnJvbSAnLi9ibG9jay9CbG9ja01hcHBpbmdzJztcbmltcG9ydCB7IENoYXRNYW5hZ2VyIH0gZnJvbSAnLi9jaGF0L0NoYXRNYW5hZ2VyJztcbmltcG9ydCB7IENvbW1hbmRNYW5hZ2VyIH0gZnJvbSAnLi9jb21tYW5kL0NvbW1hbmRNYW5hZ2VyJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4vZXZlbnRzL0V2ZW50RW1pdHRlcic7XG5pbXBvcnQgeyBUaWNrRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9FdmVudHMnO1xuaW1wb3J0IFJha25ldENvbm5lY3RFdmVudCBmcm9tICcuL2V2ZW50cy9yYWtuZXQvUmFrbmV0Q29ubmVjdEV2ZW50JztcbmltcG9ydCBSYWtuZXREaXNjb25uZWN0RXZlbnQgZnJvbSAnLi9ldmVudHMvcmFrbmV0L1Jha25ldERpc2Nvbm5lY3RFdmVudCc7XG5pbXBvcnQgUmFrbmV0RW5jYXBzdWxhdGVkUGFja2V0RXZlbnQgZnJvbSAnLi9ldmVudHMvcmFrbmV0L1Jha25ldEVuY2Fwc3VsYXRlZFBhY2tldEV2ZW50JztcbmltcG9ydCBJdGVtTWFuYWdlciBmcm9tICcuL2l0ZW0vSXRlbU1hbmFnZXInO1xuaW1wb3J0IENsaWVudENvbm5lY3Rpb24gZnJvbSAnLi9uZXR3b3JrL0NsaWVudENvbm5lY3Rpb24nO1xuaW1wb3J0IElkZW50aWZpZXJzIGZyb20gJy4vbmV0d29yay9JZGVudGlmaWVycyc7XG5pbXBvcnQgUGFja2V0UmVnaXN0cnkgZnJvbSAnLi9uZXR3b3JrL1BhY2tldFJlZ2lzdHJ5JztcbmltcG9ydCB0eXBlIHsgRGF0YVBhY2tldCB9IGZyb20gJy4vbmV0d29yay9QYWNrZXRzJztcbmltcG9ydCBCYXRjaFBhY2tldCBmcm9tICcuL25ldHdvcmsvcGFja2V0L0JhdGNoUGFja2V0JztcbmltcG9ydCB7IFBlcm1pc3Npb25NYW5hZ2VyIH0gZnJvbSAnLi9wZXJtaXNzaW9uL1Blcm1pc3Npb25NYW5hZ2VyJztcbmltcG9ydCB7IFF1ZXJ5TWFuYWdlciB9IGZyb20gJy4vcXVlcnkvUXVlcnlNYW5hZ2VyJztcbmltcG9ydCBUaW1lciBmcm9tICcuL3V0aWxzL1RpbWVyJztcbmltcG9ydCBXb3JsZE1hbmFnZXIgZnJvbSAnLi93b3JsZC9Xb3JsZE1hbmFnZXInO1xuXG5pbXBvcnQgdHlwZSB7IEluZXRBZGRyZXNzLCBSYWtOZXRTZXNzaW9uIH0gZnJvbSAnQGpzcHJpc21hcmluZS9yYWtuZXQnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuL2NvbmZpZy9Db25maWcnO1xuXG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbG9nZ2VyJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nIHdpdGggeyB0eXBlOiAnanNvbicgfTtcblxuLyoqXG4gKiBKU1ByaXNtYXJpbmUncyBtYWluIHNlcnZlciBjbGFzcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VydmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBwcml2YXRlIHJha25ldCE6IFJha05ldExpc3RlbmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnNvbGU6IENvbnNvbGUgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWNrZXRSZWdpc3RyeTogUGFja2V0UmVnaXN0cnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uTWFuYWdlciA9IG5ldyBTZXNzaW9uTWFuYWdlcigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZE1hbmFnZXI6IENvbW1hbmRNYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd29ybGRNYW5hZ2VyOiBXb3JsZE1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtTWFuYWdlcjogSXRlbU1hbmFnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBibG9ja01hbmFnZXI6IEJsb2NrTWFuYWdlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5TWFuYWdlcjogUXVlcnlNYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhdE1hbmFnZXI6IENoYXRNYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvbk1hbmFnZXI6IFBlcm1pc3Npb25NYW5hZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFuTWFuYWdlcjogQmFuTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzZXJ2ZXIgaXMgc3RvcHBpbmcuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdG9wcGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgdGlja2VyIHRpbWVyLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgdGlja2VyVGltZXI6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgVFBTLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgdHBzID0gMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCB0aWNrLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgY3VycmVudFRpY2sgPSAwbjtcblxuICAgIC8qKlxuICAgICAqIElmIHRoZSBzZXJ2ZXIgaXMgaGVhZGxlc3MuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBoZWFkbGVzczogYm9vbGVhbjtcblxuICAgIC8vIFRPRE86IE1vdmUgdGhpcyBzb21ld2hlcmUgZWxzZS5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNSU5FQ1JBRlRfVElDS19USU1FX01TID0gMTAwMCAvIDIwO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBzZXJ2ZXIgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0xvZ2dlckJ1aWxkZXJ9IG9wdGlvbnMubG9nZ2VyIC0gVGhlIGxvZ2dlci5cbiAgICAgKiBAcGFyYW0ge0NvbmZpZ30gb3B0aW9ucy5jb25maWcgLSBUaGUgY29uZmlnLlxuICAgICAqIEByZXR1cm5zIHtTZXJ2ZXJ9IFRoZSBzZXJ2ZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHsgbG9nZ2VyLCBjb25maWcsIGhlYWRsZXNzID0gZmFsc2UgfTogeyBsb2dnZXI6IExvZ2dlcjsgY29uZmlnOiBDb25maWc7IGhlYWRsZXNzPzogYm9vbGVhbiB9KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5oZWFkbGVzcyA9IGhlYWRsZXNzO1xuXG4gICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFN0YXJ0aW5nIEpTUHJpc21hcmluZSBzZXJ2ZXIgdmVyc2lvbiDCp2V2JHt2ZXJzaW9ufcKnciBmb3IgTWluZWNyYWZ0OiBCZWRyb2NrIEVkaXRpb24gJHtJZGVudGlmaWVycy5NaW5lY3JhZnRWZXJzaW9ucy5hdCgtMSl9IChwcm90b2NvbCB2ZXJzaW9uIMKnZSR7SWRlbnRpZmllcnMuUHJvdG9jb2x9wqdyKWBcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMucGFja2V0UmVnaXN0cnkgPSBuZXcgUGFja2V0UmVnaXN0cnkodGhpcyk7XG4gICAgICAgIHRoaXMuaXRlbU1hbmFnZXIgPSBuZXcgSXRlbU1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmxvY2tNYW5hZ2VyID0gbmV3IEJsb2NrTWFuYWdlcih0aGlzKTtcbiAgICAgICAgdGhpcy53b3JsZE1hbmFnZXIgPSBuZXcgV29ybGRNYW5hZ2VyKHRoaXMpO1xuICAgICAgICBpZiAoIXRoaXMuaGVhZGxlc3MpIHRoaXMuY29uc29sZSA9IG5ldyBDb25zb2xlKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyID0gbmV3IENvbW1hbmRNYW5hZ2VyKHRoaXMpO1xuICAgICAgICB0aGlzLnF1ZXJ5TWFuYWdlciA9IG5ldyBRdWVyeU1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMuY2hhdE1hbmFnZXIgPSBuZXcgQ2hhdE1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbk1hbmFnZXIgPSBuZXcgUGVybWlzc2lvbk1hbmFnZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmFuTWFuYWdlciA9IG5ldyBCYW5NYW5hZ2VyKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIHNlcnZlci5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIGVuYWJsZWQuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBlbmFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IEJsb2NrTWFwcGluZ3MuaW5pdE1hcHBpbmdzKHRoaXMpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnLmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbnNvbGU/LmVuYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2dlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wZXJtaXNzaW9uTWFuYWdlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wYWNrZXRSZWdpc3RyeS5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5pdGVtTWFuYWdlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ibG9ja01hbmFnZXIuZW5hYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFuTWFuYWdlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tYW5kTWFuYWdlci5lbmFibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy53b3JsZE1hbmFnZXIuZW5hYmxlKCk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuc2V0Q29uc29sZSh0aGlzLmNvbnNvbGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNlcnZlciBpcyBkaXNhYmxlZC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGRpc2FibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMud29ybGRNYW5hZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tYW5kTWFuYWdlci5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFuTWFuYWdlci5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYmxvY2tNYW5hZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5pdGVtTWFuYWdlci5kaXNhYmxlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucGVybWlzc2lvbk1hbmFnZXIuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnBhY2tldFJlZ2lzdHJ5LmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWcuZGlzYWJsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2dlci5kaXNhYmxlKCk7XG5cbiAgICAgICAgLy8gRmluYWxseSwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMuXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRSYWtuZXQoKS5zZXJ2ZXJOYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbG9hZHMgdGhlIHNlcnZlci5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIHJlbG9hZGVkLlxuICAgICAqIEByZW1hcmtzIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyB7QGxpbmsgU2VydmVyI2Rpc2FibGV9IGFuZCB7QGxpbmsgU2VydmVyI2VuYWJsZX0uXG4gICAgICogQHJlbWFya3MgVGhpcyBtZXRob2QgYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdW5zdXBwb3J0ZWQgYW5kIHNob3VsZCBpZGVhbGx5IGJlIGNvbXBsZXRlbHkgYXZvaWRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmRpc2FibGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGFydHMgdGhlIHNlcnZlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlcnZlcklwPScwLjAuMC4wJ10gLSBUaGUgc2VydmVyIElQLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9ydD0xOTEzMl0gLSBUaGUgc2VydmVyIHBvcnQuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNlcnZlciBpcyBzdGFydGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBib290c3RyYXAoc2VydmVySXAgPSAnMC4wLjAuMCcsIHBvcnQgPSAxOTEzMik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMucmFrbmV0ID0gbmV3IFJha05ldExpc3RlbmVyKFxuICAgICAgICAgICAgdGhpcy5nZXRDb25maWcoKS5nZXRNYXhQbGF5ZXJzKCksXG4gICAgICAgICAgICB0aGlzLmdldENvbmZpZygpLmdldE9ubGluZU1vZGUoKSxcbiAgICAgICAgICAgIG5ldyBTZXJ2ZXJOYW1lKHRoaXMpLFxuICAgICAgICAgICAgdGhpcy5nZXRMb2dnZXIoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJha25ldC5zdGFydChzZXJ2ZXJJcCwgcG9ydCk7XG5cbiAgICAgICAgdGhpcy5yYWtuZXQub24oJ29wZW5Db25uZWN0aW9uJywgYXN5bmMgKHNlc3Npb246IFJha05ldFNlc3Npb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFJha25ldENvbm5lY3RFdmVudChzZXNzaW9uKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgncmFrbmV0Q29ubmVjdCcsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LmlzQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gc2Vzc2lvbi5nZXRBZGRyZXNzKCkudG9Ub2tlbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbk1hbmFnZXIuaGFzKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBBbm90aGVyIGNsaWVudCB3aXRoIHRva2VuICgke3Rva2VufSkgaXMgYWxyZWFkeSBjb25uZWN0ZWQhYCk7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNjb25uZWN0KCdBbHJlYWR5IGNvbm5lY3RlZCBmcm9tIGFub3RoZXIgbG9jYXRpb24nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IFRpbWVyKCk7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgJHt0b2tlbn0gaXMgYXR0ZW1wdGluZyB0byBjb25uZWN0YCk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25NYW5hZ2VyLmFkZCh0b2tlbiwgbmV3IENsaWVudENvbm5lY3Rpb24oc2Vzc2lvbiwgdGhpcy5sb2dnZXIpKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoYE5ldyBjb25uZWN0aW9uIGhhbmRsaW5nIHRvb2sgwqdlJHt0aW1lci5zdG9wKCl9IG1zwqdyYCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmFrbmV0Lm9uKCdjbG9zZUNvbm5lY3Rpb24nLCBhc3luYyAoaW5ldEFkZHI6IEluZXRBZGRyZXNzLCByZWFzb246IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgUmFrbmV0RGlzY29ubmVjdEV2ZW50KGluZXRBZGRyLCByZWFzb24pO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdyYWtuZXREaXNjb25uZWN0JywgZXZlbnQpO1xuXG4gICAgICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gaW5ldEFkZHIudG9Ub2tlbigpO1xuXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uTWFuYWdlci5nZXQodG9rZW4pO1xuICAgICAgICAgICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYENhbm5vdCByZW1vdmUgY29ubmVjdGlvbiBmcm9tIG5vbi1leGlzdGluZyBwbGF5ZXIgKCR7dG9rZW59KWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgc2Vzc2lvbi5jbG9zZVBsYXllclNlc3Npb24oKTtcblxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uTWFuYWdlci5yZW1vdmUodG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYCR7dG9rZW59IGRpc2Nvbm5lY3RlZCBkdWUgdG8gJHtyZWFzb259YCk7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgUGxheWVyIGRlc3RydWN0aW9uIHRvb2sgYWJvdXQgJHtEYXRlLm5vdygpIC0gdGltZX0gbXNgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yYWtuZXQub24oJ2VuY2Fwc3VsYXRlZCcsIGFzeW5jIChwYWNrZXQ6IGFueSwgaW5ldEFkZHI6IEluZXRBZGRyZXNzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBSYWtuZXRFbmNhcHN1bGF0ZWRQYWNrZXRFdmVudChpbmV0QWRkciwgcGFja2V0KTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgncmFrbmV0RW5jYXBzdWxhdGVkUGFja2V0JywgZXZlbnQpO1xuXG4gICAgICAgICAgICBsZXQgY29ubmVjdGlvbjogQ2xpZW50Q29ubmVjdGlvbiB8IG51bGw7XG4gICAgICAgICAgICBpZiAoKGNvbm5lY3Rpb24gPSB0aGlzLnNlc3Npb25NYW5hZ2VyLmdldChpbmV0QWRkci50b1Rva2VuKCkpID8/IG51bGwpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEdvdCBhIHBhY2tldCBmcm9tIGEgY2xvc2VkIGNvbm5lY3Rpb24gKCR7aW5ldEFkZHIudG9Ub2tlbigpfSlgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gUmVhZCBiYXRjaCBjb250ZW50IGFuZCBoYW5kbGUgdGhlbVxuICAgICAgICAgICAgICAgIGNvbnN0IGJhdGNoZWQgPSBuZXcgQmF0Y2hQYWNrZXQocGFja2V0LmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIGJhdGNoZWQuY29tcHJlc3NlZCA9IGNvbm5lY3Rpb24uaGFzQ29tcHJlc3Npb247XG5cbiAgICAgICAgICAgICAgICAvLyBSZWFkIGFsbCBwYWNrZXRzIGluc2lkZSBiYXRjaCBhbmQgaGFuZGxlIHRoZW1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBhd2FpdCBiYXRjaGVkLmFzeW5jRGVjb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGlkID0gYnVmWzBdITtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFja2V0UmVnaXN0cnkuZ2V0UGFja2V0cygpLmhhcyhwaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBQYWNrZXQgMHgke3BpZC50b1N0cmluZygxNil9IGlzbid0IGltcGxlbWVudGVkYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEdldCBwYWNrZXQgZnJvbSByZWdpc3RyeVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWNrZXQgPSBuZXcgKHRoaXMucGFja2V0UmVnaXN0cnkuZ2V0UGFja2V0cygpLmdldChwaWQpISkoYnVmKTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0LmRlY29kZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEVycm9yIHdoaWxlIGRlY29kaW5nIHBhY2tldDogJHtwYWNrZXQuY29uc3RydWN0b3IubmFtZX06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5wYWNrZXRSZWdpc3RyeS5nZXRIYW5kbGVyKHBpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5zaWxseShgUmVjZWl2ZWQgwqdiJHtwYWNrZXQuY29uc3RydWN0b3IubmFtZX3Cp3IgcGFja2V0YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCAoaGFuZGxlciBhcyBhbnkpLmhhbmRsZShwYWNrZXQsIHRoaXMsIGNvbm5lY3Rpb24uZ2V0UGxheWVyU2Vzc2lvbigpID8/IGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEhhbmRsZXIgZXJyb3IgJHtwYWNrZXQuY29uc3RydWN0b3IubmFtZX0taGFuZGxlcjogKCR7ZXJyb3J9KWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmFrbmV0Lm9uKCdyYXcnLCBhc3luYyAoYnVmZmVyOiBCdWZmZXIsIGluZXRBZGRyOiBJbmV0QWRkcmVzcykgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5nZXRFbmFibGVRdWVyeSgpKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeU1hbmFnZXIub25SYXcoYnVmZmVyLCBpbmV0QWRkcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoYFF1ZXJ5TWFuYWdlciBlbmNvdW50ZXJlZCBhbiBlcnJvcmApO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmdldEVuYWJsZVRpY2tpbmcoKSkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBsZXQgdHBzU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBsYXN0VGlja1RpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgbGV0IHRwc1N0YXJ0VGljayA9IHRoaXMuZ2V0VGljaygpO1xuICAgICAgICAgICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdG9wcGluZykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgVGlja0V2ZW50KHRoaXMuZ2V0VGljaygpKTtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZW1pdCgndGljaycsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRpY2tzUGVyU2Vjb25kID0gMTAwMCAvIFNlcnZlci5NSU5FQ1JBRlRfVElDS19USU1FX01TO1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGFsbCB3b3JsZHMuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB3b3JsZCBvZiB0aGlzLndvcmxkTWFuYWdlci5nZXRXb3JsZHMoKSkge1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHdvcmxkLnVwZGF0ZShldmVudC5nZXRUaWNrKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBSYWtOZXQgc2VydmVyIG5hbWUuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmdldEVuYWJsZVRpdGxlKCkgJiYgdGhpcy5nZXRUaWNrKCkgJSB0aWNrc1BlclNlY29uZCA9PT0gMCAmJiAhdGhpcy5oZWFkbGVzcykge1xuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHByb2Nlc3MgdGl0bGUgd2l0aCBUUFMgYW5kIHRpY2suXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MudGl0bGUgPSBgVFBTOiAke3RoaXMuZ2V0VFBTKCkudG9GaXhlZCgyKX0gfCBUaWNrOiAke3RoaXMuZ2V0VGljaygpfSB8ICR7cHJvY2Vzcy50aXRsZS5zcGxpdCgnfCAnKS5hdCgtMSkhfWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VGljaysrO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZEVsYXBzZWRUaW1lID0gdGhpcy5nZXRUaWNrKCkgKiBTZXJ2ZXIuTUlORUNSQUZUX1RJQ0tfVElNRV9NUztcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRpb25UaW1lID0gZW5kVGltZSAtIGxhc3RUaWNrVGltZTtcblxuICAgICAgICAgICAgICAgIC8vIEFkanVzdCBzbGVlcFRpbWUgYmFzZWQgb24gZXhlY3V0aW9uIHNwZWVkLlxuICAgICAgICAgICAgICAgIGxldCBzbGVlcFRpbWUgPSBTZXJ2ZXIuTUlORUNSQUZUX1RJQ0tfVElNRV9NUyAtIGV4ZWN1dGlvblRpbWU7XG4gICAgICAgICAgICAgICAgaWYgKGVsYXBzZWRUaW1lIDwgZXhwZWN0ZWRFbGFwc2VkVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBydW5uaW5nIGZhc3RlciB0aGFuIGV4cGVjdGVkLCBpbmNyZWFzZSBzbGVlcFRpbWUuXG4gICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZSArPSBleHBlY3RlZEVsYXBzZWRUaW1lIC0gZWxhcHNlZFRpbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGFwc2VkVGltZSA+IGV4cGVjdGVkRWxhcHNlZFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcnVubmluZyBzbG93ZXIgdGhhbiBleHBlY3RlZCwgZGVjcmVhc2Ugc2xlZXBUaW1lIGJ1dCBkb24ndCBsZXQgaXQgZ28gYmVsb3cgMC5cbiAgICAgICAgICAgICAgICAgICAgc2xlZXBUaW1lID0gTWF0aC5tYXgoMCwgc2xlZXBUaW1lIC0gKGVsYXBzZWRUaW1lIC0gZXhwZWN0ZWRFbGFwc2VkVGltZSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0cHMgYmFzZWQgb24gdGhlIGFjdHVhbCBlbGFwc2VkIHRpbWUgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSB0aWNrLlxuICAgICAgICAgICAgICAgIGlmICh0cHNTdGFydFRpbWUgIT09IGVuZFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cHMgPSAoKHRoaXMuZ2V0VGljaygpIC0gdHBzU3RhcnRUaWNrKSAqIDEwMDApIC8gKGVuZFRpbWUgLSB0cHNTdGFydFRpbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChlbmRUaW1lIC0gdHBzU3RhcnRUaW1lID49IDEwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgdHBzU3RhcnRUaWNrID0gdGhpcy5nZXRUaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHRwc1N0YXJ0VGltZSA9IGVuZFRpbWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy50cHMgPSBNYXRoLm1pbih0aGlzLnRwcywgMjApOyAvLyBFbnN1cmUgdHBzIGRvZXMgbm90IGV4Y2VlZCAyMFxuXG4gICAgICAgICAgICAgICAgbGFzdFRpY2tUaW1lID0gZW5kVGltZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpY2tlclRpbWVyID0gc2V0VGltZW91dCh0aWNrLCBzbGVlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMudGlja2VyVGltZXIudW5yZWYoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFN0YXJ0IHRpY2tpbmdcbiAgICAgICAgICAgIHRpY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oYEpTUHJpc21hcmluZSBpcyBub3cgbGlzdGVuaW5nIG9uIHBvcnQgwqdiJHtwb3J0fWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEtpbGxzIHRoZSBzZXJ2ZXIgYXN5bmNocm9ub3VzbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIFRoZSBvcHRpb25zLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY3Jhc2hdIC0gSWYgdGhlIHNlcnZlciBzaG91bGQgY3Jhc2guXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNlcnZlciBpcyBraWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHNodXRkb3duKG9wdGlvbnM/OiB7IGNyYXNoPzogYm9vbGVhbjsgc3RheUFsaXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BwaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuc3RvcHBpbmcgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oJ1N0b3BwaW5nIHNlcnZlcicsICdTZXJ2ZXIva2lsbCcpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbnNvbGU/LmRpc2FibGUoKTtcblxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGlja2VyVGltZXIpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBLaWNrIGFsbCBvbmxpbmUgcGxheWVycy5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcGxheWVyIG9mIHRoaXMuc2Vzc2lvbk1hbmFnZXIuZ2V0QWxsUGxheWVycygpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcGxheWVyLmtpY2soJ1NlcnZlciBjbG9zZWQuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgYWxsIG1hbmFnZXJzLlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgICAgICAgIC8vIGB0aGlzLnJha25ldGAgbWlnaHQgYmUgdW5kZWZpbmVkIGlmIHdlIGtpbGwgdGhlIHNlcnZlciByZWFsbHkgZWFybHkuXG4gICAgICAgICAgICAodGhpcy5yYWtuZXQgYXMgYW55KT8ua2lsbCgpO1xuXG4gICAgICAgICAgICAvLyBMb2dnZXIgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1NlcnZlciBzdG9wcGVkLCBHb29kYnllIVxcbicpO1xuXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnM/LnN0YXlBbGl2ZSkgcHJvY2Vzcy5leGl0KG9wdGlvbnM/LmNyYXNoID8gMSA6IDApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnM/LnN0YXlBbGl2ZSkgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJyb2FkY2FzdFBhY2tldDxUIGV4dGVuZHMgRGF0YVBhY2tldD4oZGF0YVBhY2tldDogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBNYXliZSBpIGNhbiBpbXByb3ZlIHRoaXMgYnkgdXNpbmcgdGhlIFVEUCBicm9hZGNhc3QsIGFsbCB1bmNvbm5lY3RlZCBjbGllbnRzXG4gICAgICAgIC8vIHdpbGwgaWdub3JlIHRoZSBjb25uZWN0ZWQgcGFja2V0IHByb2JhYmx5LCBidXQgbWF5IGNhdXNlIGlzc3Vlcy5cbiAgICAgICAgZm9yIChjb25zdCBvbmxpbmVQbGF5ZXIgb2YgdGhpcy5zZXNzaW9uTWFuYWdlci5nZXRBbGxQbGF5ZXJzKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IG9ubGluZVBsYXllci5nZXROZXR3b3JrU2Vzc2lvbigpLmdldENvbm5lY3Rpb24oKS5zZW5kRGF0YVBhY2tldChkYXRhUGFja2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNlcnZlciB2ZXJzaW9uLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzZXJ2ZXIgdmVyc2lvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zb2xlLmxvZyhzZXJ2ZXIuZ2V0VmVyc2lvbigpKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpZGVudGlmaWVycy5cbiAgICAgKiBAcmV0dXJucyB7SWRlbnRpZmllcnN9IFRoZSBpZGVudGlmaWVycy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SWRlbnRpZmllcnMoKTogdHlwZW9mIElkZW50aWZpZXJzIHtcbiAgICAgICAgcmV0dXJuIElkZW50aWZpZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHF1ZXJ5IG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge1F1ZXJ5TWFuYWdlcn0gVGhlIHF1ZXJ5IG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldFF1ZXJ5TWFuYWdlcigpOiBRdWVyeU1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeU1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29tbWFuZCBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtDb21tYW5kTWFuYWdlcn0gVGhlIGNvbW1hbmQgbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29tbWFuZE1hbmFnZXIoKTogQ29tbWFuZE1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kTWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwbGF5ZXIgbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7U2Vzc2lvbk1hbmFnZXJ9IFRoZSBwbGF5ZXIgbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2Vzc2lvbk1hbmFnZXIoKTogU2Vzc2lvbk1hbmFnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uTWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB3b3JsZCBtYW5hZ2VyLlxuICAgICAqIEByZXR1cm5zIHtXb3JsZE1hbmFnZXJ9IFRoZSB3b3JsZCBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRXb3JsZE1hbmFnZXIoKTogV29ybGRNYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ybGRNYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGl0ZW0gbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7SXRlbU1hbmFnZXJ9IFRoZSBpdGVtIG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldEl0ZW1NYW5hZ2VyKCk6IEl0ZW1NYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbU1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYmxvY2sgbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7QmxvY2tNYW5hZ2VyfSBUaGUgYmxvY2sgbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QmxvY2tNYW5hZ2VyKCk6IEJsb2NrTWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2NrTWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsb2dnZXIuXG4gICAgICogQHJldHVybnMge0xvZ2dlckJ1aWxkZXJ9IFRoZSBsb2dnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gTm9ybWFsIGxvZzpcbiAgICAgKiBzZXJ2ZXIuZ2V0TG9nZ2VyKCkuaW5mbygnSGVsbG8sIHdvcmxkIScpO1xuICAgICAqIC8vIERlYnVnIGxvZzpcbiAgICAgKiBzZXJ2ZXIuZ2V0TG9nZ2VyKCkuZGVidWcoJ0hlbGxvLCB3b3JsZCEnKTtcbiAgICAgKiAvLyBFcnJvciBsb2c6XG4gICAgICogc2VydmVyLmdldExvZ2dlcigpLmVycm9yKG5ldyBFcnJvcignSGVsbG8gV29ybGQnKSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldExvZ2dlcigpOiBMb2dnZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2dnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcGFja2V0IHJlZ2lzdHJ5LlxuICAgICAqIEByZXR1cm5zIHtQYWNrZXRSZWdpc3RyeX0gVGhlIHBhY2tldCByZWdpc3RyeS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGFja2V0UmVnaXN0cnkoKTogUGFja2V0UmVnaXN0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWNrZXRSZWdpc3RyeTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByYWtuZXQgaW5zdGFuY2UuXG4gICAgICogQHJldHVybnMge1Jha05ldExpc3RlbmVyfSBUaGUgcmFrbmV0IGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSYWtuZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJha25ldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGF0IG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge0NoYXRNYW5hZ2VyfSBUaGUgY2hhdCBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDaGF0TWFuYWdlcigpOiBDaGF0TWFuYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYXRNYW5hZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbmZpZy5cbiAgICAgKiBAcmV0dXJucyB7Q29uZmlnfSBUaGUgY29uZmlnLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnNvbGUubG9nKHNlcnZlci5nZXRDb25maWcoKS5nZXRNYXhQbGF5ZXJzKCkpOyAvLyAyMFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb25maWcoKTogQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbnNvbGUgaW5zdGFuY2UuXG4gICAgICogQHJldHVybnMge0NvbnNvbGUgfCB1bmRlZmluZWR9IFRoZSBjb25zb2xlIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb25zb2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zb2xlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBlcm1pc3Npb24gbWFuYWdlci5cbiAgICAgKiBAcmV0dXJucyB7UGVybWlzc2lvbk1hbmFnZXJ9IFRoZSBwZXJtaXNzaW9uIG1hbmFnZXIuXG4gICAgICovXG4gICAgcHVibGljIGdldFBlcm1pc3Npb25NYW5hZ2VyKCk6IFBlcm1pc3Npb25NYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbk1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYmFuIG1hbmFnZXIuXG4gICAgICogQHJldHVybnMge0Jhbk1hbmFnZXJ9IFRoZSBiYW4gbWFuYWdlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QmFuTWFuYWdlcigpOiBCYW5NYW5hZ2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFuTWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoaXMgUHJpc21hcmluZSBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyB7U2VydmVyfSBUaGUgUHJpc21hcmluZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2VydmVyKCk6IFNlcnZlciB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgVGljay5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCBUaWNrLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUaWNrKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5jdXJyZW50VGljayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBUUFMuXG4gICAgICogQHJldHVybnMge251bWJlcn0gVGhlIGN1cnJlbnQgVFBTLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUUFMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE51bWJlci5wYXJzZUZsb2F0KHRoaXMudHBzLnRvRml4ZWQoMikpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJwYWNrZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ0EsTUFBcUIsZUFBZSxZQUFhLENBQUE7QUFBQSxFQUNyQyxNQUFBO0FBQUEsRUFDUyxNQUFBO0FBQUEsRUFDQSxNQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsRUFDQSxjQUFBO0FBQUEsRUFDQSxjQUFBLEdBQWlCLElBQUksY0FBZSxFQUFBO0FBQUEsRUFDcEMsY0FBQTtBQUFBLEVBQ0EsWUFBQTtBQUFBLEVBQ0EsV0FBQTtBQUFBLEVBQ0EsWUFBQTtBQUFBLEVBQ0EsWUFBQTtBQUFBLEVBQ0EsV0FBQTtBQUFBLEVBQ0EsaUJBQUE7QUFBQSxFQUNBLFVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTVQsUUFBVyxHQUFBLEtBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTVgsV0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxHQUFNLEdBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTixXQUFjLEdBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTCxRQUFBO0FBQUE7QUFBQSxFQUdqQixPQUF3Qix5QkFBeUIsR0FBTyxHQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU2pELFlBQVksRUFBRSxNQUFBLEVBQVEsTUFBUSxFQUFBLFFBQUEsR0FBVyxPQUFpRSxFQUFBO0FBQzdH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
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
|
-
const version = "0.11.
|
|
5
|
+
const version = "0.11.1";
|
|
6
6
|
|
|
7
7
|
exports.version = version;
|
|
8
8
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qc29uLmNqcy5janMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OzsifQ==
|
package/dist/package.json.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const version = "0.11.
|
|
1
|
+
const version = "0.11.1";
|
|
2
2
|
|
|
3
3
|
export { version };
|
|
4
4
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qc29uLmVzLmpzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OzsifQ==
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "@jsprismarine/prismarine",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "0.11.
|
|
6
|
+
"version": "0.11.1",
|
|
7
7
|
"description": "Dedicated Minecraft Bedrock Edition server written in TypeScript",
|
|
8
8
|
"prettier": "@nordcom/prettier",
|
|
9
9
|
"files": [
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"url": "https://github.com/JSPrismarine/JSPrismarine/issues"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@types/node": "22.8.
|
|
54
|
+
"@types/node": "22.8.7",
|
|
55
55
|
"@types/terminal-kit": "2.5.6",
|
|
56
56
|
"glob": "11.0.0",
|
|
57
57
|
"rimraf": "6.0.1",
|
|
@@ -66,14 +66,14 @@
|
|
|
66
66
|
"fast-jwt": "4.0.5",
|
|
67
67
|
"heap": "0.2.7",
|
|
68
68
|
"node-fetch": "3.3.2",
|
|
69
|
-
"@jsprismarine/color-parser": "0.11.
|
|
70
|
-
"@jsprismarine/errors": "0.11.
|
|
71
|
-
"@jsprismarine/logger": "0.11.
|
|
72
|
-
"@jsprismarine/math": "0.11.
|
|
73
|
-
"@jsprismarine/minecraft": "0.11.
|
|
74
|
-
"@jsprismarine/nbt": "0.11.
|
|
75
|
-
"@jsprismarine/protocol": "0.11.
|
|
76
|
-
"@jsprismarine/raknet": "0.11.
|
|
69
|
+
"@jsprismarine/color-parser": "0.11.1",
|
|
70
|
+
"@jsprismarine/errors": "0.11.1",
|
|
71
|
+
"@jsprismarine/logger": "0.11.1",
|
|
72
|
+
"@jsprismarine/math": "0.11.1",
|
|
73
|
+
"@jsprismarine/minecraft": "0.11.1",
|
|
74
|
+
"@jsprismarine/nbt": "0.11.1",
|
|
75
|
+
"@jsprismarine/protocol": "0.11.1",
|
|
76
|
+
"@jsprismarine/raknet": "0.11.1"
|
|
77
77
|
},
|
|
78
78
|
"scripts": {
|
|
79
79
|
"clean": "rimraf dist jsp *.tsbuildinfo vite.config.ts.timestamp-* .tsup .turbo",
|