ngx-kel-agent 0.4.9 → 0.4.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -26
- package/esm2020/lib/agent.service.mjs +12 -1
- package/esm2020/lib/messages.mjs +1 -1
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/ngx-kel-agent.mjs +14 -0
- package/fesm2015/ngx-kel-agent.mjs.map +1 -1
- package/fesm2020/ngx-kel-agent.mjs +13 -0
- package/fesm2020/ngx-kel-agent.mjs.map +1 -1
- package/lib/agent.service.d.ts +3 -1
- package/lib/messages.d.ts +4 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,29 +4,3 @@ This is a client library for Angular applications to integrate with
|
|
|
4
4
|
[`kel-agent`](https://github.com/k0swe/kel-agent). It provides an Angular service that creates and
|
|
5
5
|
manages the websocket connection, and exposes incoming messages as `Observable`s and outgoing
|
|
6
6
|
messages as method calls.
|
|
7
|
-
|
|
8
|
-
## Code scaffolding
|
|
9
|
-
|
|
10
|
-
Run `ng generate component component-name --project ngx-kel-agent` to generate a new component. You
|
|
11
|
-
can also
|
|
12
|
-
use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-kel-agent`.
|
|
13
|
-
> Note: Don't forget to add `--project ngx-kel-agent` or else it will be added to the default project in your `angular.json` file.
|
|
14
|
-
|
|
15
|
-
## Build
|
|
16
|
-
|
|
17
|
-
Run `ng build ngx-kel-agent` to build the project. The build artifacts will be stored in the `dist/`
|
|
18
|
-
directory.
|
|
19
|
-
|
|
20
|
-
## Publishing
|
|
21
|
-
|
|
22
|
-
After building your library with `ng build ngx-kel-agent`, go to the dist
|
|
23
|
-
folder `cd dist/ngx-kel-agent` and run `npm publish`.
|
|
24
|
-
|
|
25
|
-
## Running unit tests
|
|
26
|
-
|
|
27
|
-
Run `ng test ngx-kel-agent` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
28
|
-
|
|
29
|
-
## Further help
|
|
30
|
-
|
|
31
|
-
To get more help on the Angular CLI use `ng help` or go check out
|
|
32
|
-
the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -248,6 +248,17 @@ export class AgentService {
|
|
|
248
248
|
};
|
|
249
249
|
this.agentWebSocketSubject?.next(wsMsg);
|
|
250
250
|
}
|
|
251
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
252
|
+
sendWsjtxHighlightCallsign(highlightMsg) {
|
|
253
|
+
highlightMsg.id = this.wsjtxId;
|
|
254
|
+
const wsMsg = {
|
|
255
|
+
wsjtx: {
|
|
256
|
+
type: 'HighlightCallsignMessage',
|
|
257
|
+
payload: highlightMsg,
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
this.agentWebSocketSubject?.next(wsMsg);
|
|
261
|
+
}
|
|
251
262
|
/** Given a decode message, format a string the same way as displayed in the WSJT-X Band
|
|
252
263
|
* Activity/Rx Frequency windows. */
|
|
253
264
|
static formatDecode(msg) {
|
|
@@ -272,4 +283,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
|
|
|
272
283
|
providedIn: 'root'
|
|
273
284
|
}]
|
|
274
285
|
}], ctorParameters: function () { return []; } });
|
|
275
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL2xpYi9hZ2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxHQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFDLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFtQjNELE1BQU0sT0FBTyxZQUFZO0lBMkN2QjtRQTFDQSw0Q0FBNEM7UUFDNUIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUV0RSxjQUFjO1FBQ2Qsc0RBQXNEO1FBQ3RDLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEUsNERBQTREO1FBQzVDLG9CQUFlLEdBQUcsSUFBSSxhQUFhLENBQXdCLENBQUMsQ0FBQyxDQUFDO1FBQzlFLHlEQUF5RDtRQUN6QyxpQkFBWSxHQUFHLElBQUksYUFBYSxDQUFxQixDQUFDLENBQUMsQ0FBQztRQUN4RSx5REFBeUQ7UUFDekMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQzFELHdEQUF3RDtRQUN4QyxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDeEQsNERBQTREO1FBQzVDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQWtCLENBQUM7UUFDaEUsd0RBQXdEO1FBQ3hDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUN4RCw2REFBNkQ7UUFDN0MscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQW1C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Q2pFLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDVixRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQ3pELEdBQUcsQ0FBQyxPQUNOLEVBQUUsQ0FBQztJQUNMLENBQUM7O3lHQXBTVSxZQUFZOzZHQUFaLFlBQVksY0FGWCxNQUFNOzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRlbGF5LCByZXRyeVdoZW4sIHRhcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge3dlYlNvY2tldCwgV2ViU29ja2V0U3ViamVjdH0gZnJvbSBcInJ4anMvd2ViU29ja2V0XCI7XG5pbXBvcnQge1xuICBIYW1saWJSaWdTdGF0ZSxcbiAgV3NqdHhDbGVhcixcbiAgV3NqdHhDbG9zZSxcbiAgV3NqdHhEZWNvZGUsXG4gIFdzanR4SGFsdFR4LFxuICBXc2p0eEhlYXJ0YmVhdCxcbiAgV3NqdHhMb2dnZWRBZGlmLFxuICBXc2p0eFFzb0xvZ2dlZCxcbiAgV3NqdHhSZXBsYXksXG4gIFdzanR4UmVwbHksXG4gIFdzanR4U3RhdHVzLFxuICBXc2p0eFdzcHJEZWNvZGVcbn0gZnJvbSBcIi4vbWVzc2FnZXNcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWdlbnRTZXJ2aWNlIHtcbiAgLyoqIFdoZXRoZXIgd2UncmUgY29ubmVjdGVkIHRvIHRoZSBhZ2VudC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3RlZFN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qICBXU0pULVggICovXG4gIC8qKiBXaGV0aGVyIHdlJ3JlIGdldHRpbmcgYW55IG1lc3NhZ2VzIGZyb20gV1NKVC1YLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd3NqdHhTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJIZWFydGJlYXRcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdzanR4SGVhcnRiZWF0JCA9IG5ldyBSZXBsYXlTdWJqZWN0PFdzanR4SGVhcnRiZWF0IHwgbnVsbD4oMSk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gV1NKVC1YIFwiU3RhdHVzXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSB3c2p0eFN0YXR1cyQgPSBuZXcgUmVwbGF5U3ViamVjdDxXc2p0eFN0YXR1cyB8IG51bGw+KDEpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkRlY29kZVwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd3NqdHhEZWNvZGUkID0gbmV3IFN1YmplY3Q8V3NqdHhEZWNvZGU+KCk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gV1NKVC1YIFwiQ2xlYXJcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdzanR4Q2xlYXIkID0gbmV3IFN1YmplY3Q8V3NqdHhDbGVhcj4oKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJRc29Mb2dnZWRcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdzanR4UXNvTG9nZ2VkJCA9IG5ldyBTdWJqZWN0PFdzanR4UXNvTG9nZ2VkPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkNsb3NlXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSB3c2p0eENsb3NlJCA9IG5ldyBTdWJqZWN0PFdzanR4Q2xvc2U+KCk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gV1NKVC1YIFwiV3NwckRlY29kZVwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd3NqdHhXc3ByRGVjb2RlJCA9IG5ldyBTdWJqZWN0PFdzanR4V3NwckRlY29kZT4oKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJMb2dnZWRBZGlmXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSB3c2p0eExvZ2dlZEFkaWYkID0gbmV3IFN1YmplY3Q8V3NqdHhMb2dnZWRBZGlmPigpO1xuXG4gIC8qICBIYW1saWIgICovXG4gIC8qKiBXaGV0aGVyIHdlJ3JlIGdldHRpbmcgYW55IG1lc3NhZ2VzIGZyb20gSGFtbGliLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaGFtbGliU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gSGFtbGliIFwiUmlnU3RhdGVcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGhhbWxpYlJpZ1N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGFtbGliUmlnU3RhdGUgfCBudWxsPihcbiAgICBudWxsXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0QWdlbnRIb3N0ID0gJ2xvY2FsaG9zdCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEFnZW50UG9ydCA9IDgwODE7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlSG9zdEtleSA9ICdhZ2VudC1ob3N0JztcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFN0b3JhZ2VQb3J0S2V5ID0gJ2FnZW50LXBvcnQnO1xuXG4gIHByaXZhdGUgYWdlbnRIb3N0OiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRBZ2VudEhvc3Q7XG4gIHByaXZhdGUgYWdlbnRQb3J0OiBudW1iZXIgPSB0aGlzLmRlZmF1bHRBZ2VudFBvcnQ7XG4gIHByaXZhdGUgYWdlbnRXZWJTb2NrZXRTdWJqZWN0OiBXZWJTb2NrZXRTdWJqZWN0PG9iamVjdD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBhZ2VudFdlYnNvY2tldFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgd3NqdHhJZDogc3RyaW5nID0gJ1dTSlQtWCc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gIH1cblxuICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFnZW50SG9zdCA9IHRoaXMuZ2V0SG9zdCgpO1xuICAgIHRoaXMuYWdlbnRQb3J0ID0gdGhpcy5nZXRQb3J0KCk7XG4gICAgdGhpcy5zZXR1cFdzanR4QmVoYXZpb3JzKCk7XG4gICAgdGhpcy5zZXR1cEhhbWxpYkJlaGF2aW9ycygpO1xuICAgIHRoaXMuY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFdzanR4QmVoYXZpb3JzKCk6IHZvaWQge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgaGVhcmQgZnJvbSBXU0pULVggaW4gMTUgc2Vjb25kcywgY29uc2lkZXIgaXQgXCJkb3duXCJcbiAgICB0aGlzLndzanR4U3RhdGUkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTUwMDApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLndzanR4U3RhdGUkLm5leHQoZmFsc2UpKTtcbiAgICAvLyBXaGVuIFdTSlQtWCBhbm5vdW5jZXMgaXQncyBjbG9zaW5nLCBzZXQgaXQgdG8gXCJkb3duXCIgaW1tZWRpYXRlbHlcbiAgICB0aGlzLndzanR4Q2xvc2UkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLndzanR4U3RhdGUkLm5leHQoZmFsc2UpO1xuICAgIH0pO1xuICAgIC8vIFdoZW4gV1NKVC1YIGdvZXMgZG93biwgY2xlYXIgaXRzIHBlcnNpc3RlbnQgbWVzc2FnZSBzdWJqZWN0c1xuICAgIHRoaXMud3NqdHhTdGF0ZSQuc3Vic2NyaWJlKChpc1VwKSA9PiB7XG4gICAgICBpZiAoIWlzVXApIHtcbiAgICAgICAgdGhpcy53c2p0eEhlYXJ0YmVhdCQubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy53c2p0eFN0YXR1cyQubmV4dChudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBIYW1saWJCZWhhdmlvcnMoKTogdm9pZCB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBoZWFyZCBmcm9tIEhhbWxpYiBpbiAxNSBzZWNvbmRzLCBjb25zaWRlciBpdCBkb3duXG4gICAgdGhpcy5oYW1saWJTdGF0ZSQucGlwZShkZWJvdW5jZVRpbWUoMTUwMDApKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5oYW1saWJTdGF0ZSQubmV4dChmYWxzZSk7XG4gICAgfSk7XG4gICAgLy8gV2hlbiBIYW1saWIgZ29lcyBkb3duLCBjbGVhciBpdHMgcGVyc2lzdGVudCBtZXNzYWdlIHN1YmplY3RzXG4gICAgdGhpcy5oYW1saWJTdGF0ZSQuc3Vic2NyaWJlKChpc1VwKSA9PiB7XG4gICAgICBpZiAoIWlzVXApIHtcbiAgICAgICAgdGhpcy5oYW1saWJSaWdTdGF0ZSQubmV4dChudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDb25uZWN0IChvciByZWNvbm5lY3QpIHRoZSB3ZWJzb2NrZXQgdG8gdGhlIGtlbC1hZ2VudCBzZXJ2ZXIuICovXG4gIHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFnZW50V2Vic29ja2V0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmFnZW50V2Vic29ja2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuYWdlbnRIb3N0ID0gdGhpcy5nZXRIb3N0KCk7XG4gICAgdGhpcy5hZ2VudFBvcnQgPSB0aGlzLmdldFBvcnQoKTtcbiAgICBjb25zdCBwcm90b2NvbCA9IHRoaXMuYWdlbnRIb3N0ID09PSAnbG9jYWxob3N0JyA/ICd3czovLycgOiAnd3NzOi8vJztcbiAgICB0aGlzLmFnZW50V2ViU29ja2V0U3ViamVjdCA9IHdlYlNvY2tldDxvYmplY3Q+KHtcbiAgICAgIHVybDogcHJvdG9jb2wgKyB0aGlzLmFnZW50SG9zdCArICc6JyArIHRoaXMuYWdlbnRQb3J0ICsgJy93ZWJzb2NrZXQnLFxuICAgIH0pO1xuICAgIHRoaXMuY29ubmVjdGVkU3RhdGUkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5hZ2VudFdlYnNvY2tldFN1YnNjcmlwdGlvbiA9IHRoaXMuYWdlbnRXZWJTb2NrZXRTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgcmV0cnlXaGVuKChlcnJvcnMpID0+XG4gICAgICAgICAgLy8gcmV0cnkgdGhlIHdlYnNvY2tldCBjb25uZWN0aW9uIGFmdGVyIDEwIHNlY29uZHNcbiAgICAgICAgICBlcnJvcnMucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmNvbm5lY3RlZFN0YXRlJC5uZXh0KGZhbHNlKSksXG4gICAgICAgICAgICBkZWxheSgxMDAwMClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAobXNnKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb25uZWN0ZWRTdGF0ZSQubmV4dCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZU1lc3NhZ2UobXNnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMuY29ubmVjdGVkU3RhdGUkLm5leHQoZmFsc2UpLFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5jb25uZWN0ZWRTdGF0ZSQubmV4dChmYWxzZSksXG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTWVzc2FnZShtc2c6IGFueSk6IHZvaWQge1xuICAgIGlmIChtc2cud3NqdHggIT0gbnVsbCAmJiBtc2cud3NqdHgudHlwZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLndzanR4U3RhdGUkLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLndzanR4SWQgPSBtc2cud3NqdHgucGF5bG9hZC5pZDtcbiAgICAgIHN3aXRjaCAobXNnLndzanR4LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnSGVhcnRiZWF0TWVzc2FnZSc6XG4gICAgICAgICAgdGhpcy53c2p0eEhlYXJ0YmVhdCQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eEhlYXJ0YmVhdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdTdGF0dXNNZXNzYWdlJzpcbiAgICAgICAgICB0aGlzLndzanR4U3RhdHVzJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4U3RhdHVzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgJ0RlY29kZU1lc3NhZ2UnOlxuICAgICAgICAgIHRoaXMud3NqdHhEZWNvZGUkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhEZWNvZGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnQ2xlYXJNZXNzYWdlJzpcbiAgICAgICAgICB0aGlzLndzanR4Q2xlYXIkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhDbGVhcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdRc29Mb2dnZWRNZXNzYWdlJzpcbiAgICAgICAgICB0aGlzLndzanR4UXNvTG9nZ2VkJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4UXNvTG9nZ2VkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgJ0Nsb3NlTWVzc2FnZSc6XG4gICAgICAgICAgdGhpcy53c2p0eENsb3NlJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4Q2xvc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnV1NQUkRlY29kZU1lc3NhZ2UnOlxuICAgICAgICAgIHRoaXMud3NqdHhXc3ByRGVjb2RlJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4V3NwckRlY29kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdMb2dnZWRBZGlmTWVzc2FnZSc6XG4gICAgICAgICAgdGhpcy53c2p0eExvZ2dlZEFkaWYkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhMb2dnZWRBZGlmKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtc2cuaGFtbGliICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmhhbWxpYlN0YXRlJC5uZXh0KHRydWUpO1xuICAgICAgc3dpdGNoIChtc2cuaGFtbGliLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnUmlnU3RhdGUnOlxuICAgICAgICAgIHRoaXMuaGFtbGliUmlnU3RhdGUkLm5leHQobXNnLmhhbWxpYi5wYXlsb2FkIGFzIEhhbWxpYlJpZ1N0YXRlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQga2VsLWFnZW50IGhvc3QuICovXG4gIHB1YmxpYyBnZXRIb3N0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSG9zdEtleSkgfHwgdGhpcy5kZWZhdWx0QWdlbnRIb3N0O1xuICB9XG5cbiAgLyoqIEdldCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQga2VsLWFnZW50IHBvcnQuICovXG4gIHB1YmxpYyBnZXRQb3J0KCk6IG51bWJlciB7XG4gICAgbGV0IHBvcnRTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZVBvcnRLZXkpO1xuICAgIGlmIChwb3J0U3RyID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRBZ2VudFBvcnQ7XG4gICAgfVxuICAgIGxldCBwb3J0TnVtID0gcGFyc2VJbnQocG9ydFN0ciwgMTApO1xuICAgIGlmIChpc05hTihwb3J0TnVtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEFnZW50UG9ydDtcbiAgICB9XG4gICAgcmV0dXJuIHBvcnROdW07XG4gIH1cblxuICAvKiogU2V0IHRoZSBrZWwtYWdlbnQgaG9zdC4gKi9cbiAgcHVibGljIHNldEhvc3QoaG9zdDogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VIb3N0S2V5LCBob3N0KTtcbiAgICB0aGlzLmNvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGtlbC1hZ2VudCBwb3J0LiAqL1xuICBwdWJsaWMgc2V0UG9ydChwb3J0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZVBvcnRLZXksIFN0cmluZyhwb3J0KSk7XG4gICAgdGhpcy5jb25uZWN0KCk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIGNsZWFyIHRoZSBCYW5kIEFjdGl2aXR5IHdpbmRvdy4gKi9cbiAgcHVibGljIHNlbmRXc2p0eENsZWFyQmFuZEFjdGl2aXR5KCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0NsZWFyTWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eENsZWFyPntpZDogdGhpcy53c2p0eElkLCB3aW5kb3c6IDB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuYWdlbnRXZWJTb2NrZXRTdWJqZWN0Py5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gY2xlYXIgdGhlIFJ4IEZyZXF1ZW5jeSB3aW5kb3cuICovXG4gIHB1YmxpYyBzZW5kV3NqdHhDbGVhclJ4RnJlcVdpbmRvdygpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdDbGVhck1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhDbGVhcj57aWQ6IHRoaXMud3NqdHhJZCwgd2luZG93OiAxfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmFnZW50V2ViU29ja2V0U3ViamVjdD8ubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIGNsZWFyIHRoZSBCYW5kIEFjdGl2aXR5IGFuZCBSeCBGcmVxdWVuY3kgd2luZG93cy4gKi9cbiAgcHVibGljIHNlbmRXc2p0eENsZWFyQWxsKCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0NsZWFyTWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eENsZWFyPntpZDogdGhpcy53c2p0eElkLCB3aW5kb3c6IDJ9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuYWdlbnRXZWJTb2NrZXRTdWJqZWN0Py5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gcmVwbGF5IG1lc3NhZ2VzLiBVc2VmdWwgZm9yIGEgZnJlc2ggY2xpZW50IHRoYXQgd2FudHMgdG8gaGVhclxuICAgKiBwcmV2aW91cyBXU0pULVggZGVjb2Rlcy4gKi9cbiAgcHVibGljIHNlbmRXc2p0eFJlcGxheSgpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdSZXBsYXlNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4UmVwbGF5PntpZDogdGhpcy53c2p0eElkfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmFnZW50V2ViU29ja2V0U3ViamVjdD8ubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIGhhbHQgYW55IHRyYW5zbWlzc2lvbnMgaW1tZWRpYXRlbHkuICovXG4gIHB1YmxpYyBzZW5kV3NqdHhIYWx0VHhOb3coKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnSGFsdFR4TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eEhhbHRUeD57aWQ6IHRoaXMud3NqdHhJZCwgYXV0b1R4T25seTogZmFsc2V9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuYWdlbnRXZWJTb2NrZXRTdWJqZWN0Py5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gc3RvcCBhdXRvLXRyYW5zbWl0dGluZyBhZnRlciBmaW5pc2hpbmcgdGhlIGN1cnJlbnQgcm91bmQuICovXG4gIHB1YmxpYyBzZW5kV3NqdHhIYWx0VHhBZnRlckN1cnJlbnQoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnSGFsdFR4TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eEhhbHRUeD57aWQ6IHRoaXMud3NqdHhJZCwgYXV0b1R4T25seTogdHJ1ZX0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5hZ2VudFdlYlNvY2tldFN1YmplY3Q/Lm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byByZXBseSB0byB0aGUgZ2l2ZW4gZGVjb2RlLiBUaGUgbWVzc2FnZSBtdXN0IGluY2x1ZGUgQ1Egb3IgUVJaLiAqL1xuICBwdWJsaWMgc2VuZFdzanR4UmVwbHkoZGVjb2RlOiBXc2p0eERlY29kZSkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ1JlcGx5TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eFJlcGx5PntcbiAgICAgICAgICBpZDogZGVjb2RlLmlkLFxuICAgICAgICAgIHRpbWU6IGRlY29kZS50aW1lLFxuICAgICAgICAgIHNucjogZGVjb2RlLnNucixcbiAgICAgICAgICBkZWx0YVRpbWU6IGRlY29kZS5kZWx0YVRpbWUsXG4gICAgICAgICAgZGVsdGFGcmVxdWVuY3k6IGRlY29kZS5kZWx0YUZyZXF1ZW5jeSxcbiAgICAgICAgICBtb2RlOiBkZWNvZGUubW9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBkZWNvZGUubWVzc2FnZSxcbiAgICAgICAgICBsb3dDb25maWRlbmNlOiBkZWNvZGUubG93Q29uZmlkZW5jZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmFnZW50V2ViU29ja2V0U3ViamVjdD8ubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogR2l2ZW4gYSBkZWNvZGUgbWVzc2FnZSwgZm9ybWF0IGEgc3RyaW5nIHRoZSBzYW1lIHdheSBhcyBkaXNwbGF5ZWQgaW4gdGhlIFdTSlQtWCBCYW5kXG4gICAqIEFjdGl2aXR5L1J4IEZyZXF1ZW5jeSB3aW5kb3dzLiAqL1xuICBwdWJsaWMgc3RhdGljIGZvcm1hdERlY29kZShtc2c6IFdzanR4RGVjb2RlKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWNvbmRzU2luY2VNaWRuaWdodCA9IE1hdGguZmxvb3IobXNnLnRpbWUgLyAxMDAwKTtcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kc1NpbmNlTWlkbmlnaHQgLyAzNjAwKTtcbiAgICBjb25zdCBzZWNvbmRzU2luY2VIb3VyID0gc2Vjb25kc1NpbmNlTWlkbmlnaHQgLSBob3VycyAqIDM2MDA7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kc1NpbmNlSG91ciAvIDYwKTtcbiAgICBjb25zdCBzZWNvbmRzID0gc2Vjb25kc1NpbmNlSG91ciAtIG1pbnV0ZXMgKiA2MDtcbiAgICBjb25zdCB0aW1lU3RyID0gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSR7bWludXRlc1xuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5wYWRTdGFydCgyLCAnMCcpfSR7c2Vjb25kcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YDtcblxuICAgIHJldHVybiBgJHt0aW1lU3RyfSAke21zZy5zbnIudG9TdHJpbmcoKS5wYWRTdGFydCgzKX0gJHttc2cuZGVsdGFUaW1lXG4gICAgICAudG9GaXhlZCgxKVxuICAgICAgLnBhZFN0YXJ0KDQpfSAke21zZy5kZWx0YUZyZXF1ZW5jeS50b1N0cmluZygpLnBhZFN0YXJ0KDQpfSB+ICAke1xuICAgICAgbXNnLm1lc3NhZ2VcbiAgICB9YDtcbiAgfVxufVxuIl19
|
|
286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL2xpYi9hZ2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxHQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFDLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFvQjNELE1BQU0sT0FBTyxZQUFZO0lBMkN2QjtRQTFDQSw0Q0FBNEM7UUFDNUIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUV0RSxjQUFjO1FBQ2Qsc0RBQXNEO1FBQ3RDLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEUsNERBQTREO1FBQzVDLG9CQUFlLEdBQUcsSUFBSSxhQUFhLENBQXdCLENBQUMsQ0FBQyxDQUFDO1FBQzlFLHlEQUF5RDtRQUN6QyxpQkFBWSxHQUFHLElBQUksYUFBYSxDQUFxQixDQUFDLENBQUMsQ0FBQztRQUN4RSx5REFBeUQ7UUFDekMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQzFELHdEQUF3RDtRQUN4QyxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDeEQsNERBQTREO1FBQzVDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQWtCLENBQUM7UUFDaEUsd0RBQXdEO1FBQ3hDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUN4RCw2REFBNkQ7UUFDN0MscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQW1C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QUcsQ0FBQyxHQUFHLE9BQU87YUFDM0QsUUFBUSxFQUFFO2FBQ1YsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBRTVELE9BQU8sR0FBRyxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLFNBQVM7YUFDakUsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNWLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FDekQsR0FBRyxDQUFDLE9BQ04sRUFBRSxDQUFDO0lBQ0wsQ0FBQzs7eUdBaFRVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbix9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGVsYXksIHJldHJ5V2hlbiwgdGFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7d2ViU29ja2V0LCBXZWJTb2NrZXRTdWJqZWN0fSBmcm9tIFwicnhqcy93ZWJTb2NrZXRcIjtcbmltcG9ydCB7XG4gIEhhbWxpYlJpZ1N0YXRlLFxuICBXc2p0eENsZWFyLFxuICBXc2p0eENsb3NlLFxuICBXc2p0eERlY29kZSxcbiAgV3NqdHhIYWx0VHgsXG4gIFdzanR4SGVhcnRiZWF0LFxuICBXc2p0eEhpZ2hsaWdodENhbGxzaWduLFxuICBXc2p0eExvZ2dlZEFkaWYsXG4gIFdzanR4UXNvTG9nZ2VkLFxuICBXc2p0eFJlcGxheSxcbiAgV3NqdHhSZXBseSxcbiAgV3NqdHhTdGF0dXMsXG4gIFdzanR4V3NwckRlY29kZVxufSBmcm9tIFwiLi9tZXNzYWdlc1wiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBZ2VudFNlcnZpY2Uge1xuICAvKiogV2hldGhlciB3ZSdyZSBjb25uZWN0ZWQgdG8gdGhlIGFnZW50LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGVkU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyogIFdTSlQtWCAgKi9cbiAgLyoqIFdoZXRoZXIgd2UncmUgZ2V0dGluZyBhbnkgbWVzc2FnZXMgZnJvbSBXU0pULVguICovXG4gIHB1YmxpYyByZWFkb25seSB3c2p0eFN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkhlYXJ0YmVhdFwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd3NqdHhIZWFydGJlYXQkID0gbmV3IFJlcGxheVN1YmplY3Q8V3NqdHhIZWFydGJlYXQgfCBudWxsPigxKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJTdGF0dXNcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdzanR4U3RhdHVzJCA9IG5ldyBSZXBsYXlTdWJqZWN0PFdzanR4U3RhdHVzIHwgbnVsbD4oMSk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gV1NKVC1YIFwiRGVjb2RlXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSB3c2p0eERlY29kZSQgPSBuZXcgU3ViamVjdDxXc2p0eERlY29kZT4oKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJDbGVhclwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd3NqdHhDbGVhciQgPSBuZXcgU3ViamVjdDxXc2p0eENsZWFyPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIlFzb0xvZ2dlZFwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd3NqdHhRc29Mb2dnZWQkID0gbmV3IFN1YmplY3Q8V3NqdHhRc29Mb2dnZWQ+KCk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gV1NKVC1YIFwiQ2xvc2VcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdzanR4Q2xvc2UkID0gbmV3IFN1YmplY3Q8V3NqdHhDbG9zZT4oKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJXc3ByRGVjb2RlXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSB3c2p0eFdzcHJEZWNvZGUkID0gbmV3IFN1YmplY3Q8V3NqdHhXc3ByRGVjb2RlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkxvZ2dlZEFkaWZcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdzanR4TG9nZ2VkQWRpZiQgPSBuZXcgU3ViamVjdDxXc2p0eExvZ2dlZEFkaWY+KCk7XG5cbiAgLyogIEhhbWxpYiAgKi9cbiAgLyoqIFdoZXRoZXIgd2UncmUgZ2V0dGluZyBhbnkgbWVzc2FnZXMgZnJvbSBIYW1saWIuICovXG4gIHB1YmxpYyByZWFkb25seSBoYW1saWJTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBIYW1saWIgXCJSaWdTdGF0ZVwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaGFtbGliUmlnU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIYW1saWJSaWdTdGF0ZSB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBZ2VudEhvc3QgPSAnbG9jYWxob3N0JztcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0QWdlbnRQb3J0ID0gODA4MTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFN0b3JhZ2VIb3N0S2V5ID0gJ2FnZW50LWhvc3QnO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsU3RvcmFnZVBvcnRLZXkgPSAnYWdlbnQtcG9ydCc7XG5cbiAgcHJpdmF0ZSBhZ2VudEhvc3Q6IHN0cmluZyA9IHRoaXMuZGVmYXVsdEFnZW50SG9zdDtcbiAgcHJpdmF0ZSBhZ2VudFBvcnQ6IG51bWJlciA9IHRoaXMuZGVmYXVsdEFnZW50UG9ydDtcbiAgcHJpdmF0ZSBhZ2VudFdlYlNvY2tldFN1YmplY3Q6IFdlYlNvY2tldFN1YmplY3Q8b2JqZWN0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGFnZW50V2Vic29ja2V0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB3c2p0eElkOiBzdHJpbmcgPSAnV1NKVC1YJztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIHB1YmxpYyBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWdlbnRIb3N0ID0gdGhpcy5nZXRIb3N0KCk7XG4gICAgdGhpcy5hZ2VudFBvcnQgPSB0aGlzLmdldFBvcnQoKTtcbiAgICB0aGlzLnNldHVwV3NqdHhCZWhhdmlvcnMoKTtcbiAgICB0aGlzLnNldHVwSGFtbGliQmVoYXZpb3JzKCk7XG4gICAgdGhpcy5jb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwV3NqdHhCZWhhdmlvcnMoKTogdm9pZCB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBoZWFyZCBmcm9tIFdTSlQtWCBpbiAxNSBzZWNvbmRzLCBjb25zaWRlciBpdCBcImRvd25cIlxuICAgIHRoaXMud3NqdHhTdGF0ZSRcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxNTAwMCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMud3NqdHhTdGF0ZSQubmV4dChmYWxzZSkpO1xuICAgIC8vIFdoZW4gV1NKVC1YIGFubm91bmNlcyBpdCdzIGNsb3NpbmcsIHNldCBpdCB0byBcImRvd25cIiBpbW1lZGlhdGVseVxuICAgIHRoaXMud3NqdHhDbG9zZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMud3NqdHhTdGF0ZSQubmV4dChmYWxzZSk7XG4gICAgfSk7XG4gICAgLy8gV2hlbiBXU0pULVggZ29lcyBkb3duLCBjbGVhciBpdHMgcGVyc2lzdGVudCBtZXNzYWdlIHN1YmplY3RzXG4gICAgdGhpcy53c2p0eFN0YXRlJC5zdWJzY3JpYmUoKGlzVXApID0+IHtcbiAgICAgIGlmICghaXNVcCkge1xuICAgICAgICB0aGlzLndzanR4SGVhcnRiZWF0JC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLndzanR4U3RhdHVzJC5uZXh0KG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEhhbWxpYkJlaGF2aW9ycygpOiB2b2lkIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGhlYXJkIGZyb20gSGFtbGliIGluIDE1IHNlY29uZHMsIGNvbnNpZGVyIGl0IGRvd25cbiAgICB0aGlzLmhhbWxpYlN0YXRlJC5waXBlKGRlYm91bmNlVGltZSgxNTAwMCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmhhbWxpYlN0YXRlJC5uZXh0KGZhbHNlKTtcbiAgICB9KTtcbiAgICAvLyBXaGVuIEhhbWxpYiBnb2VzIGRvd24sIGNsZWFyIGl0cyBwZXJzaXN0ZW50IG1lc3NhZ2Ugc3ViamVjdHNcbiAgICB0aGlzLmhhbWxpYlN0YXRlJC5zdWJzY3JpYmUoKGlzVXApID0+IHtcbiAgICAgIGlmICghaXNVcCkge1xuICAgICAgICB0aGlzLmhhbWxpYlJpZ1N0YXRlJC5uZXh0KG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENvbm5lY3QgKG9yIHJlY29ubmVjdCkgdGhlIHdlYnNvY2tldCB0byB0aGUga2VsLWFnZW50IHNlcnZlci4gKi9cbiAgcHVibGljIGNvbm5lY3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWdlbnRXZWJzb2NrZXRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYWdlbnRXZWJzb2NrZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5hZ2VudEhvc3QgPSB0aGlzLmdldEhvc3QoKTtcbiAgICB0aGlzLmFnZW50UG9ydCA9IHRoaXMuZ2V0UG9ydCgpO1xuICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5hZ2VudEhvc3QgPT09ICdsb2NhbGhvc3QnID8gJ3dzOi8vJyA6ICd3c3M6Ly8nO1xuICAgIHRoaXMuYWdlbnRXZWJTb2NrZXRTdWJqZWN0ID0gd2ViU29ja2V0PG9iamVjdD4oe1xuICAgICAgdXJsOiBwcm90b2NvbCArIHRoaXMuYWdlbnRIb3N0ICsgJzonICsgdGhpcy5hZ2VudFBvcnQgKyAnL3dlYnNvY2tldCcsXG4gICAgfSk7XG4gICAgdGhpcy5jb25uZWN0ZWRTdGF0ZSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmFnZW50V2Vic29ja2V0U3Vic2NyaXB0aW9uID0gdGhpcy5hZ2VudFdlYlNvY2tldFN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICByZXRyeVdoZW4oKGVycm9ycykgPT5cbiAgICAgICAgICAvLyByZXRyeSB0aGUgd2Vic29ja2V0IGNvbm5lY3Rpb24gYWZ0ZXIgMTAgc2Vjb25kc1xuICAgICAgICAgIGVycm9ycy5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuY29ubmVjdGVkU3RhdGUkLm5leHQoZmFsc2UpKSxcbiAgICAgICAgICAgIGRlbGF5KDEwMDAwKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChtc2cpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbm5lY3RlZFN0YXRlJC5uZXh0KHRydWUpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlTWVzc2FnZShtc2cpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5jb25uZWN0ZWRTdGF0ZSQubmV4dChmYWxzZSksXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLmNvbm5lY3RlZFN0YXRlJC5uZXh0KGZhbHNlKSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNZXNzYWdlKG1zZzogYW55KTogdm9pZCB7XG4gICAgaWYgKG1zZy53c2p0eCAhPSBudWxsICYmIG1zZy53c2p0eC50eXBlICE9IG51bGwpIHtcbiAgICAgIHRoaXMud3NqdHhTdGF0ZSQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMud3NqdHhJZCA9IG1zZy53c2p0eC5wYXlsb2FkLmlkO1xuICAgICAgc3dpdGNoIChtc2cud3NqdHgudHlwZSkge1xuICAgICAgICBjYXNlICdIZWFydGJlYXRNZXNzYWdlJzpcbiAgICAgICAgICB0aGlzLndzanR4SGVhcnRiZWF0JC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4SGVhcnRiZWF0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgJ1N0YXR1c01lc3NhZ2UnOlxuICAgICAgICAgIHRoaXMud3NqdHhTdGF0dXMkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhTdGF0dXMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnRGVjb2RlTWVzc2FnZSc6XG4gICAgICAgICAgdGhpcy53c2p0eERlY29kZSQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eERlY29kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdDbGVhck1lc3NhZ2UnOlxuICAgICAgICAgIHRoaXMud3NqdHhDbGVhciQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eENsZWFyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgJ1Fzb0xvZ2dlZE1lc3NhZ2UnOlxuICAgICAgICAgIHRoaXMud3NqdHhRc29Mb2dnZWQkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhRc29Mb2dnZWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnQ2xvc2VNZXNzYWdlJzpcbiAgICAgICAgICB0aGlzLndzanR4Q2xvc2UkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhDbG9zZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdXU1BSRGVjb2RlTWVzc2FnZSc6XG4gICAgICAgICAgdGhpcy53c2p0eFdzcHJEZWNvZGUkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhXc3ByRGVjb2RlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgJ0xvZ2dlZEFkaWZNZXNzYWdlJzpcbiAgICAgICAgICB0aGlzLndzanR4TG9nZ2VkQWRpZiQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eExvZ2dlZEFkaWYpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1zZy5oYW1saWIgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuaGFtbGliU3RhdGUkLm5leHQodHJ1ZSk7XG4gICAgICBzd2l0Y2ggKG1zZy5oYW1saWIudHlwZSkge1xuICAgICAgICBjYXNlICdSaWdTdGF0ZSc6XG4gICAgICAgICAgdGhpcy5oYW1saWJSaWdTdGF0ZSQubmV4dChtc2cuaGFtbGliLnBheWxvYWQgYXMgSGFtbGliUmlnU3RhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogR2V0IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBrZWwtYWdlbnQgaG9zdC4gKi9cbiAgcHVibGljIGdldEhvc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VIb3N0S2V5KSB8fCB0aGlzLmRlZmF1bHRBZ2VudEhvc3Q7XG4gIH1cblxuICAvKiogR2V0IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBrZWwtYWdlbnQgcG9ydC4gKi9cbiAgcHVibGljIGdldFBvcnQoKTogbnVtYmVyIHtcbiAgICBsZXQgcG9ydFN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlUG9ydEtleSk7XG4gICAgaWYgKHBvcnRTdHIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEFnZW50UG9ydDtcbiAgICB9XG4gICAgbGV0IHBvcnROdW0gPSBwYXJzZUludChwb3J0U3RyLCAxMCk7XG4gICAgaWYgKGlzTmFOKHBvcnROdW0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0QWdlbnRQb3J0O1xuICAgIH1cbiAgICByZXR1cm4gcG9ydE51bTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGtlbC1hZ2VudCBob3N0LiAqL1xuICBwdWJsaWMgc2V0SG9zdChob3N0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUhvc3RLZXksIGhvc3QpO1xuICAgIHRoaXMuY29ubmVjdCgpO1xuICB9XG5cbiAgLyoqIFNldCB0aGUga2VsLWFnZW50IHBvcnQuICovXG4gIHB1YmxpYyBzZXRQb3J0KHBvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlUG9ydEtleSwgU3RyaW5nKHBvcnQpKTtcbiAgICB0aGlzLmNvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gY2xlYXIgdGhlIEJhbmQgQWN0aXZpdHkgd2luZG93LiAqL1xuICBwdWJsaWMgc2VuZFdzanR4Q2xlYXJCYW5kQWN0aXZpdHkoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnQ2xlYXJNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4Q2xlYXI+e2lkOiB0aGlzLndzanR4SWQsIHdpbmRvdzogMH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5hZ2VudFdlYlNvY2tldFN1YmplY3Q/Lm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byBjbGVhciB0aGUgUnggRnJlcXVlbmN5IHdpbmRvdy4gKi9cbiAgcHVibGljIHNlbmRXc2p0eENsZWFyUnhGcmVxV2luZG93KCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0NsZWFyTWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eENsZWFyPntpZDogdGhpcy53c2p0eElkLCB3aW5kb3c6IDF9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuYWdlbnRXZWJTb2NrZXRTdWJqZWN0Py5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gY2xlYXIgdGhlIEJhbmQgQWN0aXZpdHkgYW5kIFJ4IEZyZXF1ZW5jeSB3aW5kb3dzLiAqL1xuICBwdWJsaWMgc2VuZFdzanR4Q2xlYXJBbGwoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnQ2xlYXJNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4Q2xlYXI+e2lkOiB0aGlzLndzanR4SWQsIHdpbmRvdzogMn0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5hZ2VudFdlYlNvY2tldFN1YmplY3Q/Lm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byByZXBsYXkgbWVzc2FnZXMuIFVzZWZ1bCBmb3IgYSBmcmVzaCBjbGllbnQgdGhhdCB3YW50cyB0byBoZWFyXG4gICAqIHByZXZpb3VzIFdTSlQtWCBkZWNvZGVzLiAqL1xuICBwdWJsaWMgc2VuZFdzanR4UmVwbGF5KCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ1JlcGxheU1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhSZXBsYXk+e2lkOiB0aGlzLndzanR4SWR9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuYWdlbnRXZWJTb2NrZXRTdWJqZWN0Py5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gaGFsdCBhbnkgdHJhbnNtaXNzaW9ucyBpbW1lZGlhdGVseS4gKi9cbiAgcHVibGljIHNlbmRXc2p0eEhhbHRUeE5vdygpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdIYWx0VHhNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4SGFsdFR4PntpZDogdGhpcy53c2p0eElkLCBhdXRvVHhPbmx5OiBmYWxzZX0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5hZ2VudFdlYlNvY2tldFN1YmplY3Q/Lm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byBzdG9wIGF1dG8tdHJhbnNtaXR0aW5nIGFmdGVyIGZpbmlzaGluZyB0aGUgY3VycmVudCByb3VuZC4gKi9cbiAgcHVibGljIHNlbmRXc2p0eEhhbHRUeEFmdGVyQ3VycmVudCgpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdIYWx0VHhNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4SGFsdFR4PntpZDogdGhpcy53c2p0eElkLCBhdXRvVHhPbmx5OiB0cnVlfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmFnZW50V2ViU29ja2V0U3ViamVjdD8ubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHJlcGx5IHRvIHRoZSBnaXZlbiBkZWNvZGUuIFRoZSBtZXNzYWdlIG11c3QgaW5jbHVkZSBDUSBvciBRUlouICovXG4gIHB1YmxpYyBzZW5kV3NqdHhSZXBseShkZWNvZGU6IFdzanR4RGVjb2RlKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnUmVwbHlNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4UmVwbHk+e1xuICAgICAgICAgIGlkOiBkZWNvZGUuaWQsXG4gICAgICAgICAgdGltZTogZGVjb2RlLnRpbWUsXG4gICAgICAgICAgc25yOiBkZWNvZGUuc25yLFxuICAgICAgICAgIGRlbHRhVGltZTogZGVjb2RlLmRlbHRhVGltZSxcbiAgICAgICAgICBkZWx0YUZyZXF1ZW5jeTogZGVjb2RlLmRlbHRhRnJlcXVlbmN5LFxuICAgICAgICAgIG1vZGU6IGRlY29kZS5tb2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGRlY29kZS5tZXNzYWdlLFxuICAgICAgICAgIGxvd0NvbmZpZGVuY2U6IGRlY29kZS5sb3dDb25maWRlbmNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuYWdlbnRXZWJTb2NrZXRTdWJqZWN0Py5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gcmVwbHkgdG8gdGhlIGdpdmVuIGRlY29kZS4gVGhlIG1lc3NhZ2UgbXVzdCBpbmNsdWRlIENRIG9yIFFSWi4gKi9cbiAgcHVibGljIHNlbmRXc2p0eEhpZ2hsaWdodENhbGxzaWduKGhpZ2hsaWdodE1zZzogV3NqdHhIaWdobGlnaHRDYWxsc2lnbikge1xuICAgIGhpZ2hsaWdodE1zZy5pZCA9IHRoaXMud3NqdHhJZDtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdIaWdobGlnaHRDYWxsc2lnbk1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiBoaWdobGlnaHRNc2csXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5hZ2VudFdlYlNvY2tldFN1YmplY3Q/Lm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIEdpdmVuIGEgZGVjb2RlIG1lc3NhZ2UsIGZvcm1hdCBhIHN0cmluZyB0aGUgc2FtZSB3YXkgYXMgZGlzcGxheWVkIGluIHRoZSBXU0pULVggQmFuZFxuICAgKiBBY3Rpdml0eS9SeCBGcmVxdWVuY3kgd2luZG93cy4gKi9cbiAgcHVibGljIHN0YXRpYyBmb3JtYXREZWNvZGUobXNnOiBXc2p0eERlY29kZSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2Vjb25kc1NpbmNlTWlkbmlnaHQgPSBNYXRoLmZsb29yKG1zZy50aW1lIC8gMTAwMCk7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHNlY29uZHNTaW5jZU1pZG5pZ2h0IC8gMzYwMCk7XG4gICAgY29uc3Qgc2Vjb25kc1NpbmNlSG91ciA9IHNlY29uZHNTaW5jZU1pZG5pZ2h0IC0gaG91cnMgKiAzNjAwO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHNTaW5jZUhvdXIgLyA2MCk7XG4gICAgY29uc3Qgc2Vjb25kcyA9IHNlY29uZHNTaW5jZUhvdXIgLSBtaW51dGVzICogNjA7XG4gICAgY29uc3QgdGltZVN0ciA9IGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0ke21pbnV0ZXNcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAucGFkU3RhcnQoMiwgJzAnKX0ke3NlY29uZHMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG5cbiAgICByZXR1cm4gYCR7dGltZVN0cn0gJHttc2cuc25yLnRvU3RyaW5nKCkucGFkU3RhcnQoMyl9ICR7bXNnLmRlbHRhVGltZVxuICAgICAgLnRvRml4ZWQoMSlcbiAgICAgIC5wYWRTdGFydCg0KX0gJHttc2cuZGVsdGFGcmVxdWVuY3kudG9TdHJpbmcoKS5wYWRTdGFydCg0KX0gfiAgJHtcbiAgICAgIG1zZy5tZXNzYWdlXG4gICAgfWA7XG4gIH1cbn1cbiJdfQ==
|
package/esm2020/lib/messages.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gta2VsLWFnZW50L3NyYy9saWIvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGhlYXJ0YmVhdCAgbWVzc2FnZSBzaGFsbCBiZSAgc2VudCBvbiBhIHBlcmlvZGljICBiYXNpcyBldmVyeVxuICogICAgMTUgICBzZWNvbmRzLiAgVGhpc1xuICogICAgbWVzc2FnZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHNlcnZlcnMgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZVxuICogICAgb2YgYSAgY2xpZW50IGFuZCBhbHNvICB0aGUgdW5leHBlY3RlZCBkaXNhcHBlYXJhbmNlIG9mICBhIGNsaWVudFxuICogICAgYW5kICBieSBjbGllbnRzICB0byBsZWFybiAgdGhlIHNjaGVtYSAgbmVnb3RpYXRlZCBieSAgdGhlIHNlcnZlclxuICogICAgYWZ0ZXIgaXQgcmVjZWl2ZXMgIHRoZSBpbml0aWFsIGhlYXJ0YmVhdCBtZXNzYWdlICBmcm9tIGEgY2xpZW50LlxuICpcbiAqIFNlZVxuICogW1dTSlQtWCBzb3VyY2VdKGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avd3NqdC93c2p0eC9jaS93c2p0eC0yLjUuMi90cmVlL05ldHdvcmsvTmV0d29ya01lc3NhZ2UuaHBwI2wxMTApLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdzanR4SGVhcnRiZWF0IHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogV1NKVC1YIGNsaWVudCdzIHN1cHBvcnRlZCBzY2hlbWEgdmVyc2lvbiAqL1xuICBtYXhTY2hlbWFWZXJzaW9uOiBudW1iZXI7XG4gIC8qKiBXU0pULVggY2xpZW50J3MgY29tbWl0IGhhc2ggKi9cbiAgcmV2aXNpb246IHN0cmluZztcbiAgLyoqIFdTSlQtWCBjbGllbnQncyBzZW1hbnRpYyB2ZXJzaW9uICovXG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBXU0pULVggIHNlbmRzIHRoaXMgIHN0YXR1cyBtZXNzYWdlICB3aGVuIHZhcmlvdXMgIGludGVybmFsIHN0YXRlXG4gKiBjaGFuZ2VzIHRvIGFsbG93IHRoZSBzZXJ2ZXIgdG8gIHRyYWNrIHRoZSByZWxldmFudCBzdGF0ZSBvZiBlYWNoXG4gKiBjbGllbnQgd2l0aG91dCB0aGUgbmVlZCBmb3IgIHBvbGxpbmcgY29tbWFuZHMuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDE0MSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhTdGF0dXMge1xuICBjb25maWdOYW1lOiBzdHJpbmc7XG4gIC8qKiBMb2NhbCBzdGF0aW9uJ3MgY2FsbHNpZ24gKi9cbiAgZGVDYWxsOiBzdHJpbmc7XG4gIC8qKiBMb2NhbCBzdGF0aW9uJ3MgTWFpZGVuaGVhZCBncmlkICovXG4gIGRlR3JpZDogc3RyaW5nO1xuICAvKiogV2hldGhlciBXU0pULVggaXMgY3VycmVudGx5IGRlY29kaW5nICovXG4gIGRlY29kaW5nOiBib29sZWFuO1xuICAvKiogVGhlIGNvbm5lY3RlZCB0cmFuc2NlaXZlcidzIGRpYWwgZnJlcXVlbmN5IGluIGhlcnR6ICovXG4gIGRpYWxGcmVxdWVuY3k6IG51bWJlcjtcbiAgLyoqIFJlbW90ZSBzdGF0aW9uJ3MgY2FsbHNpZ24gKi9cbiAgZHhDYWxsOiBzdHJpbmc7XG4gIC8qKiBSZW1vdGUgc3RhdGlvbidzIE1haWRlbmhlYWQgZ3JpZCAqL1xuICBkeEdyaWQ6IHN0cmluZztcbiAgZmFzdE1vZGU6IGJvb2xlYW47XG4gIGZyZXF1ZW5jeVRvbGVyYW5jZTogbnVtYmVyO1xuICAvKiogV1NKVC1YIGNsaWVudCBuYW1lICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcmVjZWl2ZSBwcm90b2NvbCB0aGF0IFdTSlQtWCBpcyBkZWNvZGluZyAqL1xuICBtb2RlOiBzdHJpbmc7XG4gIC8qKiBUaGUgbG9jYWwgc3RhdGlvbidzIHNpZ25hbCByZXBvcnQgZm9yIHRoZSByZW1vdGUgc3RhdGlvbiAqL1xuICByZXBvcnQ6IHN0cmluZztcbiAgLyoqIFRoZSBsaXN0ZW5pbmcgZnJlcXVlbmN5IGluIGhlcnR6IGFib3ZlIHRoZSBkaWFsIGZyZXF1ZW5jeSAqL1xuICByeERlbHRhRnJlcTogbnVtYmVyO1xuICAvKiogSWYgbm9uLXplcm8sIFdTSlQtWCBpcyBpbiBhIHNwZWNpYWwgbW9kZSBsaWtlIEZveC9Ib3VuZCBvciBGaWVsZCBEYXkgKi9cbiAgc3BlY2lhbE1vZGU6IG51bWJlcjtcbiAgc3VibW9kZTogc3RyaW5nO1xuICAvKiogV2hldGhlciBXU0pULVggaXMgdHJhbnNtaXR0aW5nICovXG4gIHRyYW5zbWl0dGluZzogYm9vbGVhbjtcbiAgLyoqIFRoZSB0cmFuc21pdCBmcmVxdWVuY3kgaW4gaGVydHogYWJvdmUgdGhlIGRpYWwgZnJlcXVlbmN5ICovXG4gIHR4RGVsdGFGcmVxOiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIFdTSlQtWCBpcyBhbGxvd2VkIHRvIHRyYW5zbWl0IGR1cmluZyB0aGUgbmV4dCB3aW5kb3cgKi9cbiAgdHhFbmFibGVkOiBib29sZWFuO1xuICB0eE1vZGU6IHN0cmluZztcbiAgdHhSeFBlcmlvZDogbnVtYmVyO1xuICB0eFdhdGNoZG9nOiBib29sZWFuO1xuICAvKiogVGhlIG1lc3NhZ2UgYmVpbmcgdHJhbnNtaXR0ZWQgKi9cbiAgdHhNZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGRlY29kZSBtZXNzYWdlIGlzIHNlbnQgd2hlbiAgYSBuZXcgZGVjb2RlIGlzIGNvbXBsZXRlZCwgaW5cbiAqIHRoaXMgY2FzZSB0aGUgJ05ldycgZmllbGQgaXMgdHJ1ZS4gSXQgaXMgYWxzbyB1c2VkIGluIHJlc3BvbnNlXG4gKiB0byAgYSBcIlJlcGxheVwiICBtZXNzYWdlIHdoZXJlICBlYWNoICBvbGQgZGVjb2RlICBpbiB0aGUgIFwiQmFuZFxuICogYWN0aXZpdHlcIiB3aW5kb3csIHRoYXQgIGhhcyBub3QgYmVlbiBlcmFzZWQsIGlzICBzZW50IGluIG9yZGVyXG4gKiBhcyBhIG9uZSBvZiB0aGVzZSBtZXNzYWdlcyAgd2l0aCB0aGUgJ05ldycgZmllbGQgc2V0IHRvIGZhbHNlLlxuICpcbiAqIFNlZVxuICogW1dTSlQtWCBzb3VyY2VdKGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avd3NqdC93c2p0eC9jaS93c2p0eC0yLjUuMi90cmVlL05ldHdvcmsvTmV0d29ya01lc3NhZ2UuaHBwI2wyMDgpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdzanR4RGVjb2RlIHtcbiAgLyoqIFRoZSBkZWNvZGUncyBmcmVxdWVuY3kgaW4gaGVydHogYWJvdmUgdGhlIGRpYWwgZnJlcXVlbmN5ICovXG4gIGRlbHRhRnJlcXVlbmN5OiBudW1iZXI7XG4gIC8qKiBUaGUgcGVyY2VpdmVkIGNsb2NrIGRpZmZlcmVudGlhbCBiZXR3ZWVuIHRoZSBsb2NhbCBzdGF0aW9uIGFuZCByZW1vdGUgc3RhdGlvbiwgaW4gc2Vjb25kcy4gKi9cbiAgZGVsdGFUaW1lOiBudW1iZXI7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgbG93Q29uZmlkZW5jZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBtZXNzYWdlIHBheWxvYWQgY29udGFpbmVkIGluIHRoZSBkZWNvZGUgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogVGhlIHByb3RvY29sIG9mIHRoZSBkZWNvZGVkIG1lc3NhZ2UgKi9cbiAgbW9kZTogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgZGVjb2RlIGlzIG5ldyBvciByZXBsYXllZCAqL1xuICBuZXc6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBkZWNvZGUgY2FtZSBmcm9tIHBsYXliYWNrIG9mIGEgcmVjb3JkaW5nICovXG4gIG9mZkFpcjogYm9vbGVhbjtcbiAgLyoqIExvY2FsIHN0YXRpb24ncyBwZXJjZWl2ZWQgc2lnbmFsIHRvIG5vaXNlIHJhdGlvICovXG4gIHNucjogbnVtYmVyO1xuICAvKiogQ2xvY2sgdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgbWlkbmlnaHQgKi9cbiAgdGltZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoaXMgbWVzc2FnZSBpcyAgc2VuZCB3aGVuIGFsbCBwcmlvciBcIkRlY29kZVwiICBtZXNzYWdlcyBpbiB0aGVcbiAqIFwiQmFuZCBBY3Rpdml0eVwiICB3aW5kb3cgaGF2ZSBiZWVuIGRpc2NhcmRlZCAgYW5kIHRoZXJlZm9yZSBhcmVcbiAqIG5vIGxvbmcgYXZhaWxhYmxlIGZvciBhY3Rpb25pbmcgIHdpdGggYSBcIlJlcGx5XCIgbWVzc2FnZS5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsMjM0KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eENsZWFyIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogV2hpY2ggd2luZG93IHRvIGNsZWFyIChzZW5kIG9ubHkpLiBTZW5kIDAgdG8gY2xlYXIgQmFuZCBBY3Rpdml0eSwgMSB0byBjbGVhciBSeCBGcmVxdWVuY3ksICovXG4gIC8qKiBvciAyIHRvIGNsZWFyIGJvdGguICovXG4gIHdpbmRvdzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEluIG9yZGVyIGZvciBhIHNlcnZlciAgdG8gcHJvdmlkZSBhIHVzZWZ1bCBjb29wZXJhdGl2ZSBzZXJ2aWNlXG4gKiB0byBXU0pULVggaXQgIGlzIHBvc3NpYmxlIGZvciBpdCB0byBpbml0aWF0ZSAgYSBRU08gYnkgc2VuZGluZ1xuICogdGhpcyBtZXNzYWdlIHRvIGEgY2xpZW50LiBXU0pULVggZmlsdGVycyB0aGlzIG1lc3NhZ2UgYW5kIG9ubHlcbiAqIGFjdHMgdXBvbiBpdCAgaWYgdGhlIG1lc3NhZ2UgZXhhY3RseSBkZXNjcmliZXMgIGEgcHJpb3IgZGVjb2RlXG4gKiBhbmQgdGhhdCBkZWNvZGUgIGlzIGEgQ1Egb3IgUVJaIG1lc3NhZ2UuICAgVGhlIGFjdGlvbiB0YWtlbiBpc1xuICogZXhhY3RseSBlcXVpdmFsZW50IHRvIHRoZSB1c2VyICBkb3VibGUgY2xpY2tpbmcgdGhlIG1lc3NhZ2UgaW5cbiAqIHRoZSBcIkJhbmQgYWN0aXZpdHlcIiB3aW5kb3cuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDI1NSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhSZXBseSB7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIENsb2NrIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIG1pZG5pZ2h0ICovXG4gIHRpbWU6IG51bWJlcjtcbiAgLyoqIExvY2FsIHN0YXRpb24ncyBwZXJjZWl2ZWQgc2lnbmFsIHRvIG5vaXNlIHJhdGlvICovXG4gIHNucjogbnVtYmVyO1xuICAvKiogVGhlIHBlcmNlaXZlZCBjbG9jayBkaWZmZXJlbnRpYWwgYmV0d2VlbiB0aGUgbG9jYWwgc3RhdGlvbiBhbmQgcmVtb3RlIHN0YXRpb24sIGluIHNlY29uZHMuICovXG4gIGRlbHRhVGltZTogbnVtYmVyO1xuICAvKiogVGhlIGRlY29kZSdzIGZyZXF1ZW5jeSBpbiBoZXJ0eiBhYm92ZSB0aGUgZGlhbCBmcmVxdWVuY3kgKi9cbiAgZGVsdGFGcmVxdWVuY3k6IG51bWJlcjtcbiAgLyoqIFRoZSBwcm90b2NvbCBvZiB0aGUgZGVjb2RlZCBtZXNzYWdlICovXG4gIG1vZGU6IHN0cmluZztcbiAgLyoqIFRoZSBtZXNzYWdlIHBheWxvYWQgY29udGFpbmVkIGluIHRoZSBkZWNvZGUgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuICBsb3dDb25maWRlbmNlOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlICBNb2RpZmllcnMgICBmaWVsZCAgYWxsb3dzICB0aGUgIGVxdWl2YWxlbnQgICBvZiAga2V5Ym9hcmRcbiAgICogbW9kaWZpZXJzIHRvIGJlIHNlbnQgXCJhcyBpZlwiIHRob3NlIG1vZGlmaWVyIGtleXMgd2hlcmUgcHJlc3NlZFxuICAgKiB3aGlsZSAgZG91YmxlLWNsaWNraW5nICB0aGUgIHNwZWNpZmllZCAgZGVjb2RlZCAgbWVzc2FnZS4gU2VlXG4gICAqIHRoZSBXU0pULVggc291cmNlIGxpbmsgYWJvdmUuICovXG4gIG1vZGlmaWVyczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBRU08gbG9nZ2VkIG1lc3NhZ2UgaXMgc2VudCB3aGVuIHRoZSBXU0pULVggdXNlciBhY2NlcHRzIHRoZSBcIkxvZyAgUVNPXCIgZGlhbG9nIGJ5IGNsaWNraW5nXG4gKiB0aGUgXCJPS1wiIGJ1dHRvbi5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsMjk1KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eFFzb0xvZ2dlZCB7XG4gIGNvbW1lbnRzOiBzdHJpbmc7XG4gIGRhdGVUaW1lT2ZmOiBEYXRlO1xuICBkYXRlVGltZU9uOiBEYXRlO1xuICAvKiogcmVtb3RlIHN0YXRpb24ncyBjYWxsc2lnbiAqL1xuICBkeENhbGw6IHN0cmluZztcbiAgLyoqIHJlbW90ZSBzdGF0aW9uJ3MgTWFpZGVuaGVhZCBncmlkICovXG4gIGR4R3JpZDogc3RyaW5nO1xuICAvKiogY29udGVzdCBleGNoYW5nZSByZWNlaXZlZCAqL1xuICBleGNoYW5nZVJlY2VpdmVkOiBzdHJpbmc7XG4gIC8qKiBjb250ZXN0IGV4Y2hhbmdlIHNlbnQgKi9cbiAgZXhjaGFuZ2VTZW50OiBzdHJpbmc7XG4gIG1vZGU6IHN0cmluZztcbiAgLyoqIGxvY2FsIHN0YXRpb24ncyBjYWxsc2lnbiAqL1xuICBteUNhbGw6IHN0cmluZztcbiAgLyoqIGxvY2FsIHN0YXRpb24ncyBNYWlkZW5oZWFkIGdyaWQgKi9cbiAgbXlHcmlkOiBzdHJpbmc7XG4gIC8qKiByZW1vdGUgc3RhdGlvbidzIG9wZXJhdG9yJ3MgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiByZW1vdGUgc3RhdGlvbnMgb3BlcmF0b3IncyBjYWxsc2lnbiAoaWYgZGlmZmVyZW50IGZyb20gc3RhdGlvbikgKi9cbiAgb3BlcmF0b3JDYWxsOiBzdHJpbmc7XG4gIC8qKiBzaWduYWwgcmVwb3J0IHJlY2VpdmVkICovXG4gIHJlcG9ydFJlY2VpdmVkOiBzdHJpbmc7XG4gIC8qKiBzaWduYWwgcmVwb3J0IHNlbnQgKi9cbiAgcmVwb3J0U2VudDogc3RyaW5nO1xuICAvKiogZnJlcXVlbmN5IGluIGhlcnR6ICovXG4gIHR4RnJlcXVlbmN5OiBudW1iZXI7XG4gIC8qKiBwb3dlciBpbiB3YXR0cyAqL1xuICB0eFBvd2VyOiBzdHJpbmc7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFByb3BhZ2F0aW9uIG1vZGUgdXNpbmcgQURJRiBlbnVtZXJhdGlvbnMgKi9cbiAgcHJvcGFnYXRpb25Nb2RlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xvc2UgaXMgIHNlbnQgYnkgIGEgY2xpZW50IGltbWVkaWF0ZWx5ICBwcmlvciB0byAgaXQgc2h1dHRpbmdcbiAqIGRvd24gZ3JhY2VmdWxseS5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsMzIwKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eENsb3NlIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZW4gYSBzZXJ2ZXIgc3RhcnRzIGl0IG1heSAgYmUgdXNlZnVsIGZvciBpdCB0byBkZXRlcm1pbmUgdGhlXG4gKiBzdGF0ZSAgb2YgcHJlZXhpc3RpbmcgIGNsaWVudHMuIFNlbmRpbmcgIHRoaXMgbWVzc2FnZSAgdG8gZWFjaFxuICogY2xpZW50IGFzIGl0IGlzIGRpc2NvdmVyZWQgIHdpbGwgY2F1c2UgdGhhdCBjbGllbnQgKFdTSlQtWCkgdG9cbiAqIHNlbmQgYSBcIkRlY29kZVwiIG1lc3NhZ2UgZm9yIGVhY2ggZGVjb2RlIGN1cnJlbnRseSBpbiBpdHMgXCJCYW5kXG4gKiBhY3Rpdml0eVwiICB3aW5kb3cuIEVhY2ggIFwiRGVjb2RlXCIgbWVzc2FnZSAgc2VudCB3aWxsICBoYXZlIHRoZVxuICogXCJOZXdcIiBmbGFnIHNldCB0byBmYWxzZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbVxuICogbmV3IGRlY29kZXMuIEFmdGVyICBhbGwgdGhlIG9sZCBkZWNvZGVzIGhhdmUgIGJlZW4gYnJvYWRjYXN0IGFcbiAqIFwiU3RhdHVzXCIgbWVzc2FnZSAgaXMgYWxzbyBicm9hZGNhc3QuICBJZiB0aGUgc2VydmVyICB3aXNoZXMgdG9cbiAqIGRldGVybWluZSAgdGhlICBzdGF0dXMgIG9mICBhIG5ld2x5ICBkaXNjb3ZlcmVkICBjbGllbnQ7ICB0aGlzXG4gKiBtZXNzYWdlIHNob3VsZCBiZSB1c2VkLlxuICpcbiAqIFNlZVxuICogW1dTSlQtWCBzb3VyY2VdKGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avd3NqdC93c2p0eC9jaS93c2p0eC0yLjUuMi90cmVlL05ldHdvcmsvTmV0d29ya01lc3NhZ2UuaHBwI2wzMjgpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdzanR4UmVwbGF5IHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXJ2ZXIgbWF5IHN0b3AgYSBjbGllbnQgZnJvbSB0cmFuc21pdHRpbmcgbWVzc2FnZXMgZWl0aGVyXG4gKiBpbW1lZGlhdGVseSBvciBhdCAgdGhlIGVuZCBvZiB0aGUgIGN1cnJlbnQgdHJhbnNtaXNzaW9uIHBlcmlvZFxuICogdXNpbmcgdGhpcyBtZXNzYWdlLlxuICpcbiAqIFNlZVxuICogW1dTSlQtWCBzb3VyY2VdKGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avd3NqdC93c2p0eC9jaS93c2p0eC0yLjUuMi90cmVlL05ldHdvcmsvTmV0d29ya01lc3NhZ2UuaHBwI2wzNDMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdzanR4SGFsdFR4IHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogSWYgYGZhbHNlYCwgc3RvcCB0aGUgb25nb2luZyB0cmFuc21pc3Npb24gaW1tZWRpYXRlbHkuIElmIGB0cnVlYCwgdGhpcyBkb2Vzbid0IGhhbHQgdGhlXG4gICAqIGN1cnJlbnQgdHJhbnNtaXNzaW9uLCBpdCBqdXN0IGRpc2FibGVzIFdTSlQtWCBmcm9tIHRyYW5zbWl0dGluZyBhZnRlciB0aGUgY3VycmVudCByb3VuZC4gKi9cbiAgYXV0b1R4T25seTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGlzIG1lc3NhZ2UgIGFsbG93cyB0aGUgc2VydmVyICB0byBzZXQgdGhlIGN1cnJlbnQgIGZyZWUgdGV4dFxuICogbWVzc2FnZSBjb250ZW50LiBTZW5kaW5nIHRoaXMgIG1lc3NhZ2Ugd2l0aCBhIG5vbi1lbXB0eSBcIlRleHRcIlxuICogZmllbGQgaXMgZXF1aXZhbGVudCB0byB0eXBpbmcgIGEgbmV3IG1lc3NhZ2UgKG9sZCBjb250ZW50cyBhcmVcbiAqIGRpc2NhcmRlZCkgaW4gdG8gIHRoZSBXU0pULVggZnJlZSB0ZXh0IG1lc3NhZ2UgIGZpZWxkIG9yIFwiVHg1XCJcbiAqIGZpZWxkIChib3RoICBhcmUgdXBkYXRlZCkgYW5kIGlmICB0aGUgXCJTZW5kXCIgZmxhZyBpcyAgc2V0IHRoZW5cbiAqIGNsaWNraW5nIHRoZSBcIk5vd1wiIHJhZGlvIGJ1dHRvbiBmb3IgdGhlIFwiVHg1XCIgZmllbGQgaWYgdGFiIG9uZVxuICogaXMgY3VycmVudCBvciBjbGlja2luZyB0aGUgXCJGcmVlICBtc2dcIiByYWRpbyBidXR0b24gaWYgdGFiIHR3b1xuICogaXMgY3VycmVudC5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsMzUyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eEZyZWVUZXh0IHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogQ3VzdG9tIHRleHQgdG8gc2VuZC4gTWF5IGJlIHRydW5jYXRlZCBpZiB0b28gbG9uZyAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRvIGFsc28gY2xpY2sgXCJOb3dcIiB0byBiZWdpbiB0cmFuc21pdHRpbmcgd2hlbiBhcHByb3ByaWF0ZSAqL1xuICBzZW5kOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkZWNvZGUgbWVzc2FnZSBpcyBzZW50IHdoZW4gIGEgbmV3IGRlY29kZSBpcyBjb21wbGV0ZWQsIGluXG4gKiB0aGlzIGNhc2UgdGhlICdOZXcnIGZpZWxkIGlzIHRydWUuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDM4MykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhXc3ByRGVjb2RlIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgZGVjb2RlIGlzIG5ldyBvciByZXBsYXllZCAqL1xuICBuZXc6IGJvb2xlYW47XG4gIC8qKiBDbG9jayB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBtaWRuaWdodCAqL1xuICB0aW1lOiBudW1iZXI7XG4gIC8qKiBMb2NhbCBzdGF0aW9uJ3MgcGVyY2VpdmVkIHNpZ25hbCB0byBub2lzZSByYXRpbyAqL1xuICBzbnI6IG51bWJlcjtcbiAgLyoqIFRoZSBwZXJjZWl2ZWQgY2xvY2sgZGlmZmVyZW50aWFsIGJldHdlZW4gdGhlIGxvY2FsIHN0YXRpb24gYW5kIHJlbW90ZSBzdGF0aW9uLCBpbiBzZWNvbmRzLiAqL1xuICBkZWx0YVRpbWU6IG51bWJlcjtcbiAgZnJlcXVlbmN5OiBudW1iZXI7XG4gIGRyaWZ0OiBudW1iZXI7XG4gIC8qKiByZW1vdGUgc3RhdGlvbidzIGNhbGxzaWduICovXG4gIGNhbGxzaWduOiBzdHJpbmc7XG4gIC8qKiByZW1vdGUgc3RhdGlvbidzIE1haWRlbmhlYWQgZ3JpZCAqL1xuICBncmlkOiBzdHJpbmc7XG4gIC8qKiBwb3dlciBpbiBkQm0gKi9cbiAgcG93ZXI6IG51bWJlcjtcbiAgLyoqIHdoZXRoZXIgdGhlIGRlY29kZSBjYW1lIGZyb20gcGxheWJhY2sgb2YgYSByZWNvcmRpbmcgKi9cbiAgb2ZmQWlyOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoaXMgIG1lc3NhZ2UgYWxsb3dzICB0aGUgc2VydmVyICB0byBzZXQgIHRoZSBjdXJyZW50ICBjdXJyZW50XG4gKiBnZW9ncmFwaGljYWwgbG9jYXRpb24gIG9mIG9wZXJhdGlvbi4gVGhlIHN1cHBsaWVkICBsb2NhdGlvbiBpc1xuICogbm90IHBlcnNpc3RlbnQgYnV0ICBpcyB1c2VkIGFzIGEgIHNlc3Npb24gbGlmZXRpbWUgcmVwbGFjZW1lbnRcbiAqIGxvY3Rpb24gdGhhdCBvdmVycmlkZXMgdGhlIE1haWRlbmhlYWQgIGdyaWQgbG9jYXRlciBzZXQgaW4gdGhlXG4gKiBhcHBsaWNhdGlvbiAgc2V0dGluZ3MuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDQwNikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhMb2NhdGlvbiB7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIE1haWRlbmhlYWQgZ3JpZCB0byBzZXQgYXMgdGhlIGxvY2FsIHN0YXRpb24ncyBwb3NpdGlvbiAqL1xuICBsb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSAgbG9nZ2VkIEFESUYgIG1lc3NhZ2UgaXMgIHNlbnQgdG8gIHRoZSBzZXJ2ZXIocykgIHdoZW4gdGhlXG4gKiBXU0pULVggdXNlciBhY2NlcHRzIHRoZSBcIkxvZyAgUVNPXCIgZGlhbG9nIGJ5IGNsaWNraW5nIHRoZSBcIk9LXCJcbiAqIGJ1dHRvbi5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsNDIzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eExvZ2dlZEFkaWYge1xuICAvKiogV1NKVC1YIGNsaWVudCBuYW1lICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBBRElGIGVuY29kZWQgUVNPIGRhdGEgKi9cbiAgYWRpZjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXJ2ZXIgIG1heSBzZW5kICB0aGlzIG1lc3NhZ2UgYXQgIGFueSB0aW1lLiAgIFRoZSBtZXNzYWdlXG4gKiBzcGVjaWZpZXMgIHRoZSBiYWNrZ3JvdW5kICBhbmQgZm9yZWdyb3VuZCAgY29sb3IgdGhhdCAgd2lsbCBiZVxuICogdXNlZCAgdG8gIGhpZ2hsaWdodCAgdGhlICBzcGVjaWZpZWQgY2FsbHNpZ24gIGluICB0aGUgIGRlY29kZWRcbiAqIG1lc3NhZ2VzICBwcmludGVkICBpbiB0aGUgIEJhbmQgIEFjdGl2aXR5ICBwYW5lbC5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsNDQ0KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eEhpZ2hsaWdodENhbGxzaWduIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogV2hpY2ggY2FsbHNpZ24gdG8gaGlnaGxpZ2h0ICovXG4gIGNhbGxzaWduOiBzdHJpbmc7XG4gIC8qKiBCYWNrZ3JvdW5kIGNvbG9yIChmb3JtYXQ/KSAqL1xuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgLyoqIEZvcmVncm91bmQgY29sb3IgKGZvcm1hdD8pICovXG4gIGZvcmVncm91bmRDb2xvcjogc3RyaW5nO1xuICAvKiogVGhlIFwiSGlnaGxpZ2h0IGxhc3RcIiAgZmllbGQgYWxsb3dzIHRoZSBzZW5kZXIgIHRvIHJlcXVlc3QgdGhhdFxuICAgKiBhbGwgaW5zdGFuY2VzIG9mICBcIkNhbGxzaWduXCIgaW4gdGhlIGxhc3QgIHBlcmlvZCBvbmx5LCBpbnN0ZWFkXG4gICAqIG9mIGFsbCBpbnN0YW5jZXMgaW4gYWxsIHBlcmlvZHMsIGJlIGhpZ2hsaWdodGVkLiAqL1xuICBoaWdobGlnaHRMYXN0OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0byByZXNldCB0aGUgaGlnaGxpZ2h0aW5nIHRvIGRlZmF1bHQgKG92ZXJyaWRlcyBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIGNvbG9ycykgKi9cbiAgcmVzZXQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNlcnZlciAgbWF5IHNlbmQgIHRoaXMgbWVzc2FnZSBhdCAgYW55IHRpbWUuICAgVGhlIG1lc3NhZ2VcbiAqIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgIGNvbmZpZ3VyYXRpb24gdG8gc3dpdGNoIHRvLiBUaGUgbmV3XG4gKiBjb25maWd1cmF0aW9uIG11c3QgZXhpc3QuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDQ0NSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhTd2l0Y2hDb25maWd1cmF0aW9uIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogTmV3IGNvbmZpZ3VyYXRpb24gc2V0IHRvIHVzZSAobXVzdCBhbHJlYWR5IGV4aXN0KSAqL1xuICBjb25maWd1cmF0aW9uTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXJ2ZXIgIG1heSBzZW5kICB0aGlzIG1lc3NhZ2UgYXQgIGFueSB0aW1lLiAgIFRoZSBtZXNzYWdlXG4gKiBzcGVjaWZpZXMgIHZhcmlvdXMgIGNvbmZpZ3VyYXRpb24gIG9wdGlvbnMuICBGb3IgIHV0ZjggIHN0cmluZ1xuICogZmllbGRzIGFuIGVtcHR5IHZhbHVlIGltcGxpZXMgbm8gY2hhbmdlLCBmb3IgdGhlIHF1aW50MzIgUnggREZcbiAqIGFuZCAgRnJlcXVlbmN5ICBUb2xlcmFuY2UgIGZpZWxkcyB0aGUgIG1heGltdW0gIHF1aW50MzIgIHZhbHVlXG4gKiBpbXBsaWVzICBubyBjaGFuZ2UuICAgSW52YWxpZCBvciAgdW5yZWNvZ25pemVkIHZhbHVlcyAgd2lsbCBiZVxuICogc2lsZW50bHkgaWdub3JlZC5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsNDc5KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eENvbmZpZ3VyZSB7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFdoaWNoIHByb3RvY29sIHRvIGRlY29kZSBhbmQgc2VuZCAqL1xuICBtb2RlOiBzdHJpbmc7XG4gIGZyZXF1ZW5jeVRvbGVyYW5jZTogbnVtYmVyO1xuICAvKiogV2hpY2ggc3ViLXByb3RvY29sIHRvIGRlY29kZSBhbmQgc2VuZCAqL1xuICBzdWJtb2RlOiBzdHJpbmc7XG4gIGZhc3RNb2RlOiBib29sZWFuO1xuICAvKiogV2hpY2ggcHJvdG9jb2wgdG8gZGVjb2RlIGFuZCBzZW5kICovXG4gIHRyUGVyaW9kOiBudW1iZXI7XG4gIC8qKiBSZWNlaXZlIGRlbHRhIChhYm92ZSBkaWFsKSBmcmVxdWVuY3kgaW4gaGVydHooPykgKi9cbiAgcnhERjogbnVtYmVyXG4gIC8qKiBUaGUgcmVtb3RlIHN0YXRpb24ncyBjYWxsc2lnbiAqL1xuICBkeENhbGw6IHN0cmluZztcbiAgLyoqIFRoZSByZW1vdGUgc3RhdGlvbidzIE1haWRlbmhlYWQgZ3JpZCAqL1xuICBkeEdyaWQ6IHN0cmluZztcbiAgLyoqIFJlZ2VuZXJhdGUgdGhlIHN0YW5kYXJkIG1lc3NhZ2VzICovXG4gIGdlbmVyYXRlTWVzc2FnZXM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFtbGliUmlnU3RhdGUge1xuICAvKiogVHJhbnNjZWl2ZXIgbW9kZWwgbmFtZSAqL1xuICBtb2RlbDogc3RyaW5nO1xuICAvKiogRGlhbCBmcmVxdWVuY3kgb2YgdGhlIFwiY3VycmVudFwiIFZGTyBpbiBIeiAqL1xuICBmcmVxdWVuY3k6IG51bWJlcjtcbiAgLyoqIE1vZGUgbmFtZSBvZiB0aGUgXCJjdXJyZW50XCIgVkZPICovXG4gIG1vZGU6IHN0cmluZztcbiAgLyoqIFdpZHRoIG9mIHRoZSBjdXJyZW50IHBhc3NiYW5kIGZpbHRlciBpbiBIeiAqL1xuICBwYXNzYmFuZFdpZHRoSHo6IG51bWJlcjtcbn1cbiJdfQ==
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gta2VsLWFnZW50L3NyYy9saWIvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGhlYXJ0YmVhdCAgbWVzc2FnZSBzaGFsbCBiZSAgc2VudCBvbiBhIHBlcmlvZGljICBiYXNpcyBldmVyeVxuICogICAgMTUgICBzZWNvbmRzLiAgVGhpc1xuICogICAgbWVzc2FnZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHNlcnZlcnMgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZVxuICogICAgb2YgYSAgY2xpZW50IGFuZCBhbHNvICB0aGUgdW5leHBlY3RlZCBkaXNhcHBlYXJhbmNlIG9mICBhIGNsaWVudFxuICogICAgYW5kICBieSBjbGllbnRzICB0byBsZWFybiAgdGhlIHNjaGVtYSAgbmVnb3RpYXRlZCBieSAgdGhlIHNlcnZlclxuICogICAgYWZ0ZXIgaXQgcmVjZWl2ZXMgIHRoZSBpbml0aWFsIGhlYXJ0YmVhdCBtZXNzYWdlICBmcm9tIGEgY2xpZW50LlxuICpcbiAqIFNlZVxuICogW1dTSlQtWCBzb3VyY2VdKGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avd3NqdC93c2p0eC9jaS93c2p0eC0yLjUuMi90cmVlL05ldHdvcmsvTmV0d29ya01lc3NhZ2UuaHBwI2wxMTApLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdzanR4SGVhcnRiZWF0IHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogV1NKVC1YIGNsaWVudCdzIHN1cHBvcnRlZCBzY2hlbWEgdmVyc2lvbiAqL1xuICBtYXhTY2hlbWFWZXJzaW9uOiBudW1iZXI7XG4gIC8qKiBXU0pULVggY2xpZW50J3MgY29tbWl0IGhhc2ggKi9cbiAgcmV2aXNpb246IHN0cmluZztcbiAgLyoqIFdTSlQtWCBjbGllbnQncyBzZW1hbnRpYyB2ZXJzaW9uICovXG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBXU0pULVggIHNlbmRzIHRoaXMgIHN0YXR1cyBtZXNzYWdlICB3aGVuIHZhcmlvdXMgIGludGVybmFsIHN0YXRlXG4gKiBjaGFuZ2VzIHRvIGFsbG93IHRoZSBzZXJ2ZXIgdG8gIHRyYWNrIHRoZSByZWxldmFudCBzdGF0ZSBvZiBlYWNoXG4gKiBjbGllbnQgd2l0aG91dCB0aGUgbmVlZCBmb3IgIHBvbGxpbmcgY29tbWFuZHMuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDE0MSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhTdGF0dXMge1xuICBjb25maWdOYW1lOiBzdHJpbmc7XG4gIC8qKiBMb2NhbCBzdGF0aW9uJ3MgY2FsbHNpZ24gKi9cbiAgZGVDYWxsOiBzdHJpbmc7XG4gIC8qKiBMb2NhbCBzdGF0aW9uJ3MgTWFpZGVuaGVhZCBncmlkICovXG4gIGRlR3JpZDogc3RyaW5nO1xuICAvKiogV2hldGhlciBXU0pULVggaXMgY3VycmVudGx5IGRlY29kaW5nICovXG4gIGRlY29kaW5nOiBib29sZWFuO1xuICAvKiogVGhlIGNvbm5lY3RlZCB0cmFuc2NlaXZlcidzIGRpYWwgZnJlcXVlbmN5IGluIGhlcnR6ICovXG4gIGRpYWxGcmVxdWVuY3k6IG51bWJlcjtcbiAgLyoqIFJlbW90ZSBzdGF0aW9uJ3MgY2FsbHNpZ24gKi9cbiAgZHhDYWxsOiBzdHJpbmc7XG4gIC8qKiBSZW1vdGUgc3RhdGlvbidzIE1haWRlbmhlYWQgZ3JpZCAqL1xuICBkeEdyaWQ6IHN0cmluZztcbiAgZmFzdE1vZGU6IGJvb2xlYW47XG4gIGZyZXF1ZW5jeVRvbGVyYW5jZTogbnVtYmVyO1xuICAvKiogV1NKVC1YIGNsaWVudCBuYW1lICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcmVjZWl2ZSBwcm90b2NvbCB0aGF0IFdTSlQtWCBpcyBkZWNvZGluZyAqL1xuICBtb2RlOiBzdHJpbmc7XG4gIC8qKiBUaGUgbG9jYWwgc3RhdGlvbidzIHNpZ25hbCByZXBvcnQgZm9yIHRoZSByZW1vdGUgc3RhdGlvbiAqL1xuICByZXBvcnQ6IHN0cmluZztcbiAgLyoqIFRoZSBsaXN0ZW5pbmcgZnJlcXVlbmN5IGluIGhlcnR6IGFib3ZlIHRoZSBkaWFsIGZyZXF1ZW5jeSAqL1xuICByeERlbHRhRnJlcTogbnVtYmVyO1xuICAvKiogSWYgbm9uLXplcm8sIFdTSlQtWCBpcyBpbiBhIHNwZWNpYWwgbW9kZSBsaWtlIEZveC9Ib3VuZCBvciBGaWVsZCBEYXkgKi9cbiAgc3BlY2lhbE1vZGU6IG51bWJlcjtcbiAgc3VibW9kZTogc3RyaW5nO1xuICAvKiogV2hldGhlciBXU0pULVggaXMgdHJhbnNtaXR0aW5nICovXG4gIHRyYW5zbWl0dGluZzogYm9vbGVhbjtcbiAgLyoqIFRoZSB0cmFuc21pdCBmcmVxdWVuY3kgaW4gaGVydHogYWJvdmUgdGhlIGRpYWwgZnJlcXVlbmN5ICovXG4gIHR4RGVsdGFGcmVxOiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIFdTSlQtWCBpcyBhbGxvd2VkIHRvIHRyYW5zbWl0IGR1cmluZyB0aGUgbmV4dCB3aW5kb3cgKi9cbiAgdHhFbmFibGVkOiBib29sZWFuO1xuICB0eE1vZGU6IHN0cmluZztcbiAgdHhSeFBlcmlvZDogbnVtYmVyO1xuICB0eFdhdGNoZG9nOiBib29sZWFuO1xuICAvKiogVGhlIG1lc3NhZ2UgYmVpbmcgdHJhbnNtaXR0ZWQgKi9cbiAgdHhNZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGRlY29kZSBtZXNzYWdlIGlzIHNlbnQgd2hlbiAgYSBuZXcgZGVjb2RlIGlzIGNvbXBsZXRlZCwgaW5cbiAqIHRoaXMgY2FzZSB0aGUgJ05ldycgZmllbGQgaXMgdHJ1ZS4gSXQgaXMgYWxzbyB1c2VkIGluIHJlc3BvbnNlXG4gKiB0byAgYSBcIlJlcGxheVwiICBtZXNzYWdlIHdoZXJlICBlYWNoICBvbGQgZGVjb2RlICBpbiB0aGUgIFwiQmFuZFxuICogYWN0aXZpdHlcIiB3aW5kb3csIHRoYXQgIGhhcyBub3QgYmVlbiBlcmFzZWQsIGlzICBzZW50IGluIG9yZGVyXG4gKiBhcyBhIG9uZSBvZiB0aGVzZSBtZXNzYWdlcyAgd2l0aCB0aGUgJ05ldycgZmllbGQgc2V0IHRvIGZhbHNlLlxuICpcbiAqIFNlZVxuICogW1dTSlQtWCBzb3VyY2VdKGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avd3NqdC93c2p0eC9jaS93c2p0eC0yLjUuMi90cmVlL05ldHdvcmsvTmV0d29ya01lc3NhZ2UuaHBwI2wyMDgpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdzanR4RGVjb2RlIHtcbiAgLyoqIFRoZSBkZWNvZGUncyBmcmVxdWVuY3kgaW4gaGVydHogYWJvdmUgdGhlIGRpYWwgZnJlcXVlbmN5ICovXG4gIGRlbHRhRnJlcXVlbmN5OiBudW1iZXI7XG4gIC8qKiBUaGUgcGVyY2VpdmVkIGNsb2NrIGRpZmZlcmVudGlhbCBiZXR3ZWVuIHRoZSBsb2NhbCBzdGF0aW9uIGFuZCByZW1vdGUgc3RhdGlvbiwgaW4gc2Vjb25kcy4gKi9cbiAgZGVsdGFUaW1lOiBudW1iZXI7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgbG93Q29uZmlkZW5jZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBtZXNzYWdlIHBheWxvYWQgY29udGFpbmVkIGluIHRoZSBkZWNvZGUgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogVGhlIHByb3RvY29sIG9mIHRoZSBkZWNvZGVkIG1lc3NhZ2UgKi9cbiAgbW9kZTogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgZGVjb2RlIGlzIG5ldyBvciByZXBsYXllZCAqL1xuICBuZXc6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBkZWNvZGUgY2FtZSBmcm9tIHBsYXliYWNrIG9mIGEgcmVjb3JkaW5nICovXG4gIG9mZkFpcjogYm9vbGVhbjtcbiAgLyoqIExvY2FsIHN0YXRpb24ncyBwZXJjZWl2ZWQgc2lnbmFsIHRvIG5vaXNlIHJhdGlvICovXG4gIHNucjogbnVtYmVyO1xuICAvKiogQ2xvY2sgdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgbWlkbmlnaHQgKi9cbiAgdGltZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoaXMgbWVzc2FnZSBpcyAgc2VuZCB3aGVuIGFsbCBwcmlvciBcIkRlY29kZVwiICBtZXNzYWdlcyBpbiB0aGVcbiAqIFwiQmFuZCBBY3Rpdml0eVwiICB3aW5kb3cgaGF2ZSBiZWVuIGRpc2NhcmRlZCAgYW5kIHRoZXJlZm9yZSBhcmVcbiAqIG5vIGxvbmcgYXZhaWxhYmxlIGZvciBhY3Rpb25pbmcgIHdpdGggYSBcIlJlcGx5XCIgbWVzc2FnZS5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsMjM0KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eENsZWFyIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogV2hpY2ggd2luZG93IHRvIGNsZWFyIChzZW5kIG9ubHkpLiBTZW5kIDAgdG8gY2xlYXIgQmFuZCBBY3Rpdml0eSwgMSB0byBjbGVhciBSeCBGcmVxdWVuY3ksICovXG4gIC8qKiBvciAyIHRvIGNsZWFyIGJvdGguICovXG4gIHdpbmRvdzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEluIG9yZGVyIGZvciBhIHNlcnZlciAgdG8gcHJvdmlkZSBhIHVzZWZ1bCBjb29wZXJhdGl2ZSBzZXJ2aWNlXG4gKiB0byBXU0pULVggaXQgIGlzIHBvc3NpYmxlIGZvciBpdCB0byBpbml0aWF0ZSAgYSBRU08gYnkgc2VuZGluZ1xuICogdGhpcyBtZXNzYWdlIHRvIGEgY2xpZW50LiBXU0pULVggZmlsdGVycyB0aGlzIG1lc3NhZ2UgYW5kIG9ubHlcbiAqIGFjdHMgdXBvbiBpdCAgaWYgdGhlIG1lc3NhZ2UgZXhhY3RseSBkZXNjcmliZXMgIGEgcHJpb3IgZGVjb2RlXG4gKiBhbmQgdGhhdCBkZWNvZGUgIGlzIGEgQ1Egb3IgUVJaIG1lc3NhZ2UuICAgVGhlIGFjdGlvbiB0YWtlbiBpc1xuICogZXhhY3RseSBlcXVpdmFsZW50IHRvIHRoZSB1c2VyICBkb3VibGUgY2xpY2tpbmcgdGhlIG1lc3NhZ2UgaW5cbiAqIHRoZSBcIkJhbmQgYWN0aXZpdHlcIiB3aW5kb3cuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDI1NSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhSZXBseSB7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIENsb2NrIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIG1pZG5pZ2h0ICovXG4gIHRpbWU6IG51bWJlcjtcbiAgLyoqIExvY2FsIHN0YXRpb24ncyBwZXJjZWl2ZWQgc2lnbmFsIHRvIG5vaXNlIHJhdGlvICovXG4gIHNucjogbnVtYmVyO1xuICAvKiogVGhlIHBlcmNlaXZlZCBjbG9jayBkaWZmZXJlbnRpYWwgYmV0d2VlbiB0aGUgbG9jYWwgc3RhdGlvbiBhbmQgcmVtb3RlIHN0YXRpb24sIGluIHNlY29uZHMuICovXG4gIGRlbHRhVGltZTogbnVtYmVyO1xuICAvKiogVGhlIGRlY29kZSdzIGZyZXF1ZW5jeSBpbiBoZXJ0eiBhYm92ZSB0aGUgZGlhbCBmcmVxdWVuY3kgKi9cbiAgZGVsdGFGcmVxdWVuY3k6IG51bWJlcjtcbiAgLyoqIFRoZSBwcm90b2NvbCBvZiB0aGUgZGVjb2RlZCBtZXNzYWdlICovXG4gIG1vZGU6IHN0cmluZztcbiAgLyoqIFRoZSBtZXNzYWdlIHBheWxvYWQgY29udGFpbmVkIGluIHRoZSBkZWNvZGUgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuICBsb3dDb25maWRlbmNlOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlICBNb2RpZmllcnMgICBmaWVsZCAgYWxsb3dzICB0aGUgIGVxdWl2YWxlbnQgICBvZiAga2V5Ym9hcmRcbiAgICogbW9kaWZpZXJzIHRvIGJlIHNlbnQgXCJhcyBpZlwiIHRob3NlIG1vZGlmaWVyIGtleXMgd2hlcmUgcHJlc3NlZFxuICAgKiB3aGlsZSAgZG91YmxlLWNsaWNraW5nICB0aGUgIHNwZWNpZmllZCAgZGVjb2RlZCAgbWVzc2FnZS4gU2VlXG4gICAqIHRoZSBXU0pULVggc291cmNlIGxpbmsgYWJvdmUuICovXG4gIG1vZGlmaWVyczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBRU08gbG9nZ2VkIG1lc3NhZ2UgaXMgc2VudCB3aGVuIHRoZSBXU0pULVggdXNlciBhY2NlcHRzIHRoZSBcIkxvZyAgUVNPXCIgZGlhbG9nIGJ5IGNsaWNraW5nXG4gKiB0aGUgXCJPS1wiIGJ1dHRvbi5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsMjk1KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eFFzb0xvZ2dlZCB7XG4gIGNvbW1lbnRzOiBzdHJpbmc7XG4gIGRhdGVUaW1lT2ZmOiBEYXRlO1xuICBkYXRlVGltZU9uOiBEYXRlO1xuICAvKiogcmVtb3RlIHN0YXRpb24ncyBjYWxsc2lnbiAqL1xuICBkeENhbGw6IHN0cmluZztcbiAgLyoqIHJlbW90ZSBzdGF0aW9uJ3MgTWFpZGVuaGVhZCBncmlkICovXG4gIGR4R3JpZDogc3RyaW5nO1xuICAvKiogY29udGVzdCBleGNoYW5nZSByZWNlaXZlZCAqL1xuICBleGNoYW5nZVJlY2VpdmVkOiBzdHJpbmc7XG4gIC8qKiBjb250ZXN0IGV4Y2hhbmdlIHNlbnQgKi9cbiAgZXhjaGFuZ2VTZW50OiBzdHJpbmc7XG4gIG1vZGU6IHN0cmluZztcbiAgLyoqIGxvY2FsIHN0YXRpb24ncyBjYWxsc2lnbiAqL1xuICBteUNhbGw6IHN0cmluZztcbiAgLyoqIGxvY2FsIHN0YXRpb24ncyBNYWlkZW5oZWFkIGdyaWQgKi9cbiAgbXlHcmlkOiBzdHJpbmc7XG4gIC8qKiByZW1vdGUgc3RhdGlvbidzIG9wZXJhdG9yJ3MgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiByZW1vdGUgc3RhdGlvbnMgb3BlcmF0b3IncyBjYWxsc2lnbiAoaWYgZGlmZmVyZW50IGZyb20gc3RhdGlvbikgKi9cbiAgb3BlcmF0b3JDYWxsOiBzdHJpbmc7XG4gIC8qKiBzaWduYWwgcmVwb3J0IHJlY2VpdmVkICovXG4gIHJlcG9ydFJlY2VpdmVkOiBzdHJpbmc7XG4gIC8qKiBzaWduYWwgcmVwb3J0IHNlbnQgKi9cbiAgcmVwb3J0U2VudDogc3RyaW5nO1xuICAvKiogZnJlcXVlbmN5IGluIGhlcnR6ICovXG4gIHR4RnJlcXVlbmN5OiBudW1iZXI7XG4gIC8qKiBwb3dlciBpbiB3YXR0cyAqL1xuICB0eFBvd2VyOiBzdHJpbmc7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFByb3BhZ2F0aW9uIG1vZGUgdXNpbmcgQURJRiBlbnVtZXJhdGlvbnMgKi9cbiAgcHJvcGFnYXRpb25Nb2RlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xvc2UgaXMgIHNlbnQgYnkgIGEgY2xpZW50IGltbWVkaWF0ZWx5ICBwcmlvciB0byAgaXQgc2h1dHRpbmdcbiAqIGRvd24gZ3JhY2VmdWxseS5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsMzIwKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eENsb3NlIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZW4gYSBzZXJ2ZXIgc3RhcnRzIGl0IG1heSAgYmUgdXNlZnVsIGZvciBpdCB0byBkZXRlcm1pbmUgdGhlXG4gKiBzdGF0ZSAgb2YgcHJlZXhpc3RpbmcgIGNsaWVudHMuIFNlbmRpbmcgIHRoaXMgbWVzc2FnZSAgdG8gZWFjaFxuICogY2xpZW50IGFzIGl0IGlzIGRpc2NvdmVyZWQgIHdpbGwgY2F1c2UgdGhhdCBjbGllbnQgKFdTSlQtWCkgdG9cbiAqIHNlbmQgYSBcIkRlY29kZVwiIG1lc3NhZ2UgZm9yIGVhY2ggZGVjb2RlIGN1cnJlbnRseSBpbiBpdHMgXCJCYW5kXG4gKiBhY3Rpdml0eVwiICB3aW5kb3cuIEVhY2ggIFwiRGVjb2RlXCIgbWVzc2FnZSAgc2VudCB3aWxsICBoYXZlIHRoZVxuICogXCJOZXdcIiBmbGFnIHNldCB0byBmYWxzZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbVxuICogbmV3IGRlY29kZXMuIEFmdGVyICBhbGwgdGhlIG9sZCBkZWNvZGVzIGhhdmUgIGJlZW4gYnJvYWRjYXN0IGFcbiAqIFwiU3RhdHVzXCIgbWVzc2FnZSAgaXMgYWxzbyBicm9hZGNhc3QuICBJZiB0aGUgc2VydmVyICB3aXNoZXMgdG9cbiAqIGRldGVybWluZSAgdGhlICBzdGF0dXMgIG9mICBhIG5ld2x5ICBkaXNjb3ZlcmVkICBjbGllbnQ7ICB0aGlzXG4gKiBtZXNzYWdlIHNob3VsZCBiZSB1c2VkLlxuICpcbiAqIFNlZVxuICogW1dTSlQtWCBzb3VyY2VdKGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avd3NqdC93c2p0eC9jaS93c2p0eC0yLjUuMi90cmVlL05ldHdvcmsvTmV0d29ya01lc3NhZ2UuaHBwI2wzMjgpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdzanR4UmVwbGF5IHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXJ2ZXIgbWF5IHN0b3AgYSBjbGllbnQgZnJvbSB0cmFuc21pdHRpbmcgbWVzc2FnZXMgZWl0aGVyXG4gKiBpbW1lZGlhdGVseSBvciBhdCAgdGhlIGVuZCBvZiB0aGUgIGN1cnJlbnQgdHJhbnNtaXNzaW9uIHBlcmlvZFxuICogdXNpbmcgdGhpcyBtZXNzYWdlLlxuICpcbiAqIFNlZVxuICogW1dTSlQtWCBzb3VyY2VdKGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avd3NqdC93c2p0eC9jaS93c2p0eC0yLjUuMi90cmVlL05ldHdvcmsvTmV0d29ya01lc3NhZ2UuaHBwI2wzNDMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdzanR4SGFsdFR4IHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogSWYgYGZhbHNlYCwgc3RvcCB0aGUgb25nb2luZyB0cmFuc21pc3Npb24gaW1tZWRpYXRlbHkuIElmIGB0cnVlYCwgdGhpcyBkb2Vzbid0IGhhbHQgdGhlXG4gICAqIGN1cnJlbnQgdHJhbnNtaXNzaW9uLCBpdCBqdXN0IGRpc2FibGVzIFdTSlQtWCBmcm9tIHRyYW5zbWl0dGluZyBhZnRlciB0aGUgY3VycmVudCByb3VuZC4gKi9cbiAgYXV0b1R4T25seTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGlzIG1lc3NhZ2UgIGFsbG93cyB0aGUgc2VydmVyICB0byBzZXQgdGhlIGN1cnJlbnQgIGZyZWUgdGV4dFxuICogbWVzc2FnZSBjb250ZW50LiBTZW5kaW5nIHRoaXMgIG1lc3NhZ2Ugd2l0aCBhIG5vbi1lbXB0eSBcIlRleHRcIlxuICogZmllbGQgaXMgZXF1aXZhbGVudCB0byB0eXBpbmcgIGEgbmV3IG1lc3NhZ2UgKG9sZCBjb250ZW50cyBhcmVcbiAqIGRpc2NhcmRlZCkgaW4gdG8gIHRoZSBXU0pULVggZnJlZSB0ZXh0IG1lc3NhZ2UgIGZpZWxkIG9yIFwiVHg1XCJcbiAqIGZpZWxkIChib3RoICBhcmUgdXBkYXRlZCkgYW5kIGlmICB0aGUgXCJTZW5kXCIgZmxhZyBpcyAgc2V0IHRoZW5cbiAqIGNsaWNraW5nIHRoZSBcIk5vd1wiIHJhZGlvIGJ1dHRvbiBmb3IgdGhlIFwiVHg1XCIgZmllbGQgaWYgdGFiIG9uZVxuICogaXMgY3VycmVudCBvciBjbGlja2luZyB0aGUgXCJGcmVlICBtc2dcIiByYWRpbyBidXR0b24gaWYgdGFiIHR3b1xuICogaXMgY3VycmVudC5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsMzUyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eEZyZWVUZXh0IHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogQ3VzdG9tIHRleHQgdG8gc2VuZC4gTWF5IGJlIHRydW5jYXRlZCBpZiB0b28gbG9uZyAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRvIGFsc28gY2xpY2sgXCJOb3dcIiB0byBiZWdpbiB0cmFuc21pdHRpbmcgd2hlbiBhcHByb3ByaWF0ZSAqL1xuICBzZW5kOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkZWNvZGUgbWVzc2FnZSBpcyBzZW50IHdoZW4gIGEgbmV3IGRlY29kZSBpcyBjb21wbGV0ZWQsIGluXG4gKiB0aGlzIGNhc2UgdGhlICdOZXcnIGZpZWxkIGlzIHRydWUuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDM4MykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhXc3ByRGVjb2RlIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgZGVjb2RlIGlzIG5ldyBvciByZXBsYXllZCAqL1xuICBuZXc6IGJvb2xlYW47XG4gIC8qKiBDbG9jayB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBtaWRuaWdodCAqL1xuICB0aW1lOiBudW1iZXI7XG4gIC8qKiBMb2NhbCBzdGF0aW9uJ3MgcGVyY2VpdmVkIHNpZ25hbCB0byBub2lzZSByYXRpbyAqL1xuICBzbnI6IG51bWJlcjtcbiAgLyoqIFRoZSBwZXJjZWl2ZWQgY2xvY2sgZGlmZmVyZW50aWFsIGJldHdlZW4gdGhlIGxvY2FsIHN0YXRpb24gYW5kIHJlbW90ZSBzdGF0aW9uLCBpbiBzZWNvbmRzLiAqL1xuICBkZWx0YVRpbWU6IG51bWJlcjtcbiAgZnJlcXVlbmN5OiBudW1iZXI7XG4gIGRyaWZ0OiBudW1iZXI7XG4gIC8qKiByZW1vdGUgc3RhdGlvbidzIGNhbGxzaWduICovXG4gIGNhbGxzaWduOiBzdHJpbmc7XG4gIC8qKiByZW1vdGUgc3RhdGlvbidzIE1haWRlbmhlYWQgZ3JpZCAqL1xuICBncmlkOiBzdHJpbmc7XG4gIC8qKiBwb3dlciBpbiBkQm0gKi9cbiAgcG93ZXI6IG51bWJlcjtcbiAgLyoqIHdoZXRoZXIgdGhlIGRlY29kZSBjYW1lIGZyb20gcGxheWJhY2sgb2YgYSByZWNvcmRpbmcgKi9cbiAgb2ZmQWlyOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoaXMgIG1lc3NhZ2UgYWxsb3dzICB0aGUgc2VydmVyICB0byBzZXQgIHRoZSBjdXJyZW50ICBjdXJyZW50XG4gKiBnZW9ncmFwaGljYWwgbG9jYXRpb24gIG9mIG9wZXJhdGlvbi4gVGhlIHN1cHBsaWVkICBsb2NhdGlvbiBpc1xuICogbm90IHBlcnNpc3RlbnQgYnV0ICBpcyB1c2VkIGFzIGEgIHNlc3Npb24gbGlmZXRpbWUgcmVwbGFjZW1lbnRcbiAqIGxvY3Rpb24gdGhhdCBvdmVycmlkZXMgdGhlIE1haWRlbmhlYWQgIGdyaWQgbG9jYXRlciBzZXQgaW4gdGhlXG4gKiBhcHBsaWNhdGlvbiAgc2V0dGluZ3MuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDQwNikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhMb2NhdGlvbiB7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIE1haWRlbmhlYWQgZ3JpZCB0byBzZXQgYXMgdGhlIGxvY2FsIHN0YXRpb24ncyBwb3NpdGlvbiAqL1xuICBsb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSAgbG9nZ2VkIEFESUYgIG1lc3NhZ2UgaXMgIHNlbnQgdG8gIHRoZSBzZXJ2ZXIocykgIHdoZW4gdGhlXG4gKiBXU0pULVggdXNlciBhY2NlcHRzIHRoZSBcIkxvZyAgUVNPXCIgZGlhbG9nIGJ5IGNsaWNraW5nIHRoZSBcIk9LXCJcbiAqIGJ1dHRvbi5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsNDIzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eExvZ2dlZEFkaWYge1xuICAvKiogV1NKVC1YIGNsaWVudCBuYW1lICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBBRElGIGVuY29kZWQgUVNPIGRhdGEgKi9cbiAgYWRpZjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXJ2ZXIgIG1heSBzZW5kICB0aGlzIG1lc3NhZ2UgYXQgIGFueSB0aW1lLiAgIFRoZSBtZXNzYWdlXG4gKiBzcGVjaWZpZXMgIHRoZSBiYWNrZ3JvdW5kICBhbmQgZm9yZWdyb3VuZCAgY29sb3IgdGhhdCAgd2lsbCBiZVxuICogdXNlZCAgdG8gIGhpZ2hsaWdodCAgdGhlICBzcGVjaWZpZWQgY2FsbHNpZ24gIGluICB0aGUgIGRlY29kZWRcbiAqIG1lc3NhZ2VzICBwcmludGVkICBpbiB0aGUgIEJhbmQgIEFjdGl2aXR5ICBwYW5lbC5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsNDQ0KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eEhpZ2hsaWdodENhbGxzaWduIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogV2hpY2ggY2FsbHNpZ24gdG8gaGlnaGxpZ2h0ICovXG4gIGNhbGxzaWduOiBzdHJpbmc7XG4gIC8qKiBCYWNrZ3JvdW5kIGNvbG9yLiBBbGwgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCA0IGZvcm1hdHMgc2hvdWxkIGJlIHZhbGlkLlxuICAgKiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00LyAqL1xuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgLyoqIEZvcmVncm91bmQgY29sb3IuIEFsbCBDU1MgQ29sb3IgTW9kdWxlIExldmVsIDQgZm9ybWF0cyBzaG91bGQgYmUgdmFsaWQuXG4gICAqIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvICovXG4gIGZvcmVncm91bmRDb2xvcjogc3RyaW5nO1xuICAvKiogVGhlIFwiSGlnaGxpZ2h0IGxhc3RcIiAgZmllbGQgYWxsb3dzIHRoZSBzZW5kZXIgIHRvIHJlcXVlc3QgdGhhdFxuICAgKiBhbGwgaW5zdGFuY2VzIG9mICBcIkNhbGxzaWduXCIgaW4gdGhlIGxhc3QgIHBlcmlvZCBvbmx5LCBpbnN0ZWFkXG4gICAqIG9mIGFsbCBpbnN0YW5jZXMgaW4gYWxsIHBlcmlvZHMsIGJlIGhpZ2hsaWdodGVkLiAqL1xuICBoaWdobGlnaHRMYXN0OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0byByZXNldCB0aGUgaGlnaGxpZ2h0aW5nIHRvIGRlZmF1bHQgKG92ZXJyaWRlcyBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIGNvbG9ycykgKi9cbiAgcmVzZXQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNlcnZlciAgbWF5IHNlbmQgIHRoaXMgbWVzc2FnZSBhdCAgYW55IHRpbWUuICAgVGhlIG1lc3NhZ2VcbiAqIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgIGNvbmZpZ3VyYXRpb24gdG8gc3dpdGNoIHRvLiBUaGUgbmV3XG4gKiBjb25maWd1cmF0aW9uIG11c3QgZXhpc3QuXG4gKlxuICogU2VlXG4gKiBbV1NKVC1YIHNvdXJjZV0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC93c2p0L3dzanR4L2NpL3dzanR4LTIuNS4yL3RyZWUvTmV0d29yay9OZXR3b3JrTWVzc2FnZS5ocHAjbDQ0NSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3NqdHhTd2l0Y2hDb25maWd1cmF0aW9uIHtcbiAgLyoqIFdTSlQtWCBjbGllbnQgbmFtZSAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogTmV3IGNvbmZpZ3VyYXRpb24gc2V0IHRvIHVzZSAobXVzdCBhbHJlYWR5IGV4aXN0KSAqL1xuICBjb25maWd1cmF0aW9uTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzZXJ2ZXIgIG1heSBzZW5kICB0aGlzIG1lc3NhZ2UgYXQgIGFueSB0aW1lLiAgIFRoZSBtZXNzYWdlXG4gKiBzcGVjaWZpZXMgIHZhcmlvdXMgIGNvbmZpZ3VyYXRpb24gIG9wdGlvbnMuICBGb3IgIHV0ZjggIHN0cmluZ1xuICogZmllbGRzIGFuIGVtcHR5IHZhbHVlIGltcGxpZXMgbm8gY2hhbmdlLCBmb3IgdGhlIHF1aW50MzIgUnggREZcbiAqIGFuZCAgRnJlcXVlbmN5ICBUb2xlcmFuY2UgIGZpZWxkcyB0aGUgIG1heGltdW0gIHF1aW50MzIgIHZhbHVlXG4gKiBpbXBsaWVzICBubyBjaGFuZ2UuICAgSW52YWxpZCBvciAgdW5yZWNvZ25pemVkIHZhbHVlcyAgd2lsbCBiZVxuICogc2lsZW50bHkgaWdub3JlZC5cbiAqXG4gKiBTZWVcbiAqIFtXU0pULVggc291cmNlXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3dzanQvd3NqdHgvY2kvd3NqdHgtMi41LjIvdHJlZS9OZXR3b3JrL05ldHdvcmtNZXNzYWdlLmhwcCNsNDc5KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXc2p0eENvbmZpZ3VyZSB7XG4gIC8qKiBXU0pULVggY2xpZW50IG5hbWUgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFdoaWNoIHByb3RvY29sIHRvIGRlY29kZSBhbmQgc2VuZCAqL1xuICBtb2RlOiBzdHJpbmc7XG4gIGZyZXF1ZW5jeVRvbGVyYW5jZTogbnVtYmVyO1xuICAvKiogV2hpY2ggc3ViLXByb3RvY29sIHRvIGRlY29kZSBhbmQgc2VuZCAqL1xuICBzdWJtb2RlOiBzdHJpbmc7XG4gIGZhc3RNb2RlOiBib29sZWFuO1xuICAvKiogV2hpY2ggcHJvdG9jb2wgdG8gZGVjb2RlIGFuZCBzZW5kICovXG4gIHRyUGVyaW9kOiBudW1iZXI7XG4gIC8qKiBSZWNlaXZlIGRlbHRhIChhYm92ZSBkaWFsKSBmcmVxdWVuY3kgaW4gaGVydHooPykgKi9cbiAgcnhERjogbnVtYmVyXG4gIC8qKiBUaGUgcmVtb3RlIHN0YXRpb24ncyBjYWxsc2lnbiAqL1xuICBkeENhbGw6IHN0cmluZztcbiAgLyoqIFRoZSByZW1vdGUgc3RhdGlvbidzIE1haWRlbmhlYWQgZ3JpZCAqL1xuICBkeEdyaWQ6IHN0cmluZztcbiAgLyoqIFJlZ2VuZXJhdGUgdGhlIHN0YW5kYXJkIG1lc3NhZ2VzICovXG4gIGdlbmVyYXRlTWVzc2FnZXM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFtbGliUmlnU3RhdGUge1xuICAvKiogVHJhbnNjZWl2ZXIgbW9kZWwgbmFtZSAqL1xuICBtb2RlbDogc3RyaW5nO1xuICAvKiogRGlhbCBmcmVxdWVuY3kgb2YgdGhlIFwiY3VycmVudFwiIFZGTyBpbiBIeiAqL1xuICBmcmVxdWVuY3k6IG51bWJlcjtcbiAgLyoqIE1vZGUgbmFtZSBvZiB0aGUgXCJjdXJyZW50XCIgVkZPICovXG4gIG1vZGU6IHN0cmluZztcbiAgLyoqIFdpZHRoIG9mIHRoZSBjdXJyZW50IHBhc3NiYW5kIGZpbHRlciBpbiBIeiAqL1xuICBwYXNzYmFuZFdpZHRoSHo6IG51bWJlcjtcbn1cbiJdfQ==
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -3,4 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export * from './lib/agent.service';
|
|
5
5
|
export * from './lib/messages';
|
|
6
|
-
|
|
6
|
+
// export * from './lib/ngx-kel-agent.component';
|
|
7
|
+
// export * from './lib/ngx-kel-agent.module';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsaURBQWlEO0FBQ2pELDhDQUE4QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LWtlbC1hZ2VudFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2FnZW50LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzc2FnZXMnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5tb2R1bGUnO1xuIl19
|
|
@@ -256,6 +256,18 @@ class AgentService {
|
|
|
256
256
|
};
|
|
257
257
|
(_a = this.agentWebSocketSubject) === null || _a === void 0 ? void 0 : _a.next(wsMsg);
|
|
258
258
|
}
|
|
259
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
260
|
+
sendWsjtxHighlightCallsign(highlightMsg) {
|
|
261
|
+
var _a;
|
|
262
|
+
highlightMsg.id = this.wsjtxId;
|
|
263
|
+
const wsMsg = {
|
|
264
|
+
wsjtx: {
|
|
265
|
+
type: 'HighlightCallsignMessage',
|
|
266
|
+
payload: highlightMsg,
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
(_a = this.agentWebSocketSubject) === null || _a === void 0 ? void 0 : _a.next(wsMsg);
|
|
270
|
+
}
|
|
259
271
|
/** Given a decode message, format a string the same way as displayed in the WSJT-X Band
|
|
260
272
|
* Activity/Rx Frequency windows. */
|
|
261
273
|
static formatDecode(msg) {
|
|
@@ -284,6 +296,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
|
|
|
284
296
|
/*
|
|
285
297
|
* Public API Surface of ngx-kel-agent
|
|
286
298
|
*/
|
|
299
|
+
// export * from './lib/ngx-kel-agent.component';
|
|
300
|
+
// export * from './lib/ngx-kel-agent.module';
|
|
287
301
|
|
|
288
302
|
/**
|
|
289
303
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-kel-agent.mjs","sources":["../../../projects/ngx-kel-agent/src/lib/agent.service.ts","../../../projects/ngx-kel-agent/src/public-api.ts","../../../projects/ngx-kel-agent/src/ngx-kel-agent.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {BehaviorSubject, ReplaySubject, Subject, Subscription,} from \"rxjs\";\nimport {debounceTime, delay, retryWhen, tap} from \"rxjs/operators\";\nimport {webSocket, WebSocketSubject} from \"rxjs/webSocket\";\nimport {\n HamlibRigState,\n WsjtxClear,\n WsjtxClose,\n WsjtxDecode,\n WsjtxHaltTx,\n WsjtxHeartbeat,\n WsjtxLoggedAdif,\n WsjtxQsoLogged,\n WsjtxReplay,\n WsjtxReply,\n WsjtxStatus,\n WsjtxWsprDecode\n} from \"./messages\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AgentService {\n /** Whether we're connected to the agent. */\n public readonly connectedState$ = new BehaviorSubject<boolean>(false);\n\n /* WSJT-X */\n /** Whether we're getting any messages from WSJT-X. */\n public readonly wsjtxState$ = new BehaviorSubject<boolean>(false);\n /** Subject for listening to WSJT-X \"Heartbeat\" messages. */\n public readonly wsjtxHeartbeat$ = new ReplaySubject<WsjtxHeartbeat | null>(1);\n /** Subject for listening to WSJT-X \"Status\" messages. */\n public readonly wsjtxStatus$ = new ReplaySubject<WsjtxStatus | null>(1);\n /** Subject for listening to WSJT-X \"Decode\" messages. */\n public readonly wsjtxDecode$ = new Subject<WsjtxDecode>();\n /** Subject for listening to WSJT-X \"Clear\" messages. */\n public readonly wsjtxClear$ = new Subject<WsjtxClear>();\n /** Subject for listening to WSJT-X \"QsoLogged\" messages. */\n public readonly wsjtxQsoLogged$ = new Subject<WsjtxQsoLogged>();\n /** Subject for listening to WSJT-X \"Close\" messages. */\n public readonly wsjtxClose$ = new Subject<WsjtxClose>();\n /** Subject for listening to WSJT-X \"WsprDecode\" messages. */\n public readonly wsjtxWsprDecode$ = new Subject<WsjtxWsprDecode>();\n /** Subject for listening to WSJT-X \"LoggedAdif\" messages. */\n public readonly wsjtxLoggedAdif$ = new Subject<WsjtxLoggedAdif>();\n\n /* Hamlib */\n /** Whether we're getting any messages from Hamlib. */\n public readonly hamlibState$ = new BehaviorSubject<boolean>(false);\n /** Subject for listening to Hamlib \"RigState\" messages. */\n public readonly hamlibRigState$ = new BehaviorSubject<HamlibRigState | null>(\n null\n );\n\n private readonly defaultAgentHost = 'localhost';\n private readonly defaultAgentPort = 8081;\n private readonly localStorageHostKey = 'agent-host';\n private readonly localStoragePortKey = 'agent-port';\n\n private agentHost: string = this.defaultAgentHost;\n private agentPort: number = this.defaultAgentPort;\n private agentWebSocketSubject: WebSocketSubject<object> | null = null;\n private agentWebsocketSubscription: Subscription | null = null;\n private wsjtxId: string = 'WSJT-X';\n\n constructor() {\n }\n\n public init(): void {\n this.agentHost = this.getHost();\n this.agentPort = this.getPort();\n this.setupWsjtxBehaviors();\n this.setupHamlibBehaviors();\n this.connect();\n }\n\n private setupWsjtxBehaviors(): void {\n // if we haven't heard from WSJT-X in 15 seconds, consider it \"down\"\n this.wsjtxState$\n .pipe(debounceTime(15000))\n .subscribe(() => this.wsjtxState$.next(false));\n // When WSJT-X announces it's closing, set it to \"down\" immediately\n this.wsjtxClose$.subscribe(() => {\n this.wsjtxState$.next(false);\n });\n // When WSJT-X goes down, clear its persistent message subjects\n this.wsjtxState$.subscribe((isUp) => {\n if (!isUp) {\n this.wsjtxHeartbeat$.next(null);\n this.wsjtxStatus$.next(null);\n }\n });\n }\n\n private setupHamlibBehaviors(): void {\n // if we haven't heard from Hamlib in 15 seconds, consider it down\n this.hamlibState$.pipe(debounceTime(15000)).subscribe(() => {\n this.hamlibState$.next(false);\n });\n // When Hamlib goes down, clear its persistent message subjects\n this.hamlibState$.subscribe((isUp) => {\n if (!isUp) {\n this.hamlibRigState$.next(null);\n }\n });\n }\n\n /** Connect (or reconnect) the websocket to the kel-agent server. */\n public connect(): void {\n if (this.agentWebsocketSubscription) {\n this.agentWebsocketSubscription.unsubscribe();\n }\n this.agentHost = this.getHost();\n this.agentPort = this.getPort();\n const protocol = this.agentHost === 'localhost' ? 'ws://' : 'wss://';\n this.agentWebSocketSubject = webSocket<object>({\n url: protocol + this.agentHost + ':' + this.agentPort + '/websocket',\n });\n this.connectedState$.next(true);\n this.agentWebsocketSubscription = this.agentWebSocketSubject\n .pipe(\n retryWhen((errors) =>\n // retry the websocket connection after 10 seconds\n errors.pipe(\n tap(() => this.connectedState$.next(false)),\n delay(10000)\n )\n )\n )\n .subscribe({\n next: (msg) => {\n this.connectedState$.next(true);\n this.handleMessage(msg);\n },\n error: () => this.connectedState$.next(false),\n complete: () => this.connectedState$.next(false),\n });\n }\n\n private handleMessage(msg: any): void {\n if (msg.wsjtx != null && msg.wsjtx.type != null) {\n this.wsjtxState$.next(true);\n this.wsjtxId = msg.wsjtx.payload.id;\n switch (msg.wsjtx.type) {\n case 'HeartbeatMessage':\n this.wsjtxHeartbeat$.next(msg.wsjtx.payload as WsjtxHeartbeat);\n return;\n case 'StatusMessage':\n this.wsjtxStatus$.next(msg.wsjtx.payload as WsjtxStatus);\n return;\n case 'DecodeMessage':\n this.wsjtxDecode$.next(msg.wsjtx.payload as WsjtxDecode);\n return;\n case 'ClearMessage':\n this.wsjtxClear$.next(msg.wsjtx.payload as WsjtxClear);\n return;\n case 'QsoLoggedMessage':\n this.wsjtxQsoLogged$.next(msg.wsjtx.payload as WsjtxQsoLogged);\n return;\n case 'CloseMessage':\n this.wsjtxClose$.next(msg.wsjtx.payload as WsjtxClose);\n return;\n case 'WSPRDecodeMessage':\n this.wsjtxWsprDecode$.next(msg.wsjtx.payload as WsjtxWsprDecode);\n return;\n case 'LoggedAdifMessage':\n this.wsjtxLoggedAdif$.next(msg.wsjtx.payload as WsjtxLoggedAdif);\n return;\n }\n }\n if (msg.hamlib !== null) {\n this.hamlibState$.next(true);\n switch (msg.hamlib.type) {\n case 'RigState':\n this.hamlibRigState$.next(msg.hamlib.payload as HamlibRigState);\n return;\n }\n }\n }\n\n /** Get the currently configured kel-agent host. */\n public getHost(): string {\n return localStorage.getItem(this.localStorageHostKey) || this.defaultAgentHost;\n }\n\n /** Get the currently configured kel-agent port. */\n public getPort(): number {\n let portStr = localStorage.getItem(this.localStoragePortKey);\n if (portStr == null) {\n return this.defaultAgentPort;\n }\n let portNum = parseInt(portStr, 10);\n if (isNaN(portNum)) {\n return this.defaultAgentPort;\n }\n return portNum;\n }\n\n /** Set the kel-agent host. */\n public setHost(host: string): void {\n localStorage.setItem(this.localStorageHostKey, host);\n this.connect();\n }\n\n /** Set the kel-agent port. */\n public setPort(port: number): void {\n localStorage.setItem(this.localStoragePortKey, String(port));\n this.connect();\n }\n\n /** Send a command to WSJT-X to clear the Band Activity window. */\n public sendWsjtxClearBandActivity() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 0},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to clear the Rx Frequency window. */\n public sendWsjtxClearRxFreqWindow() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 1},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to clear the Band Activity and Rx Frequency windows. */\n public sendWsjtxClearAll() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 2},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to replay messages. Useful for a fresh client that wants to hear\n * previous WSJT-X decodes. */\n public sendWsjtxReplay() {\n const wsMsg = {\n wsjtx: {\n type: 'ReplayMessage',\n payload: <WsjtxReplay>{id: this.wsjtxId},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to halt any transmissions immediately. */\n public sendWsjtxHaltTxNow() {\n const wsMsg = {\n wsjtx: {\n type: 'HaltTxMessage',\n payload: <WsjtxHaltTx>{id: this.wsjtxId, autoTxOnly: false},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to stop auto-transmitting after finishing the current round. */\n public sendWsjtxHaltTxAfterCurrent() {\n const wsMsg = {\n wsjtx: {\n type: 'HaltTxMessage',\n payload: <WsjtxHaltTx>{id: this.wsjtxId, autoTxOnly: true},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */\n public sendWsjtxReply(decode: WsjtxDecode) {\n const wsMsg = {\n wsjtx: {\n type: 'ReplyMessage',\n payload: <WsjtxReply>{\n id: decode.id,\n time: decode.time,\n snr: decode.snr,\n deltaTime: decode.deltaTime,\n deltaFrequency: decode.deltaFrequency,\n mode: decode.mode,\n message: decode.message,\n lowConfidence: decode.lowConfidence,\n },\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Given a decode message, format a string the same way as displayed in the WSJT-X Band\n * Activity/Rx Frequency windows. */\n public static formatDecode(msg: WsjtxDecode): string {\n const secondsSinceMidnight = Math.floor(msg.time / 1000);\n const hours = Math.floor(secondsSinceMidnight / 3600);\n const secondsSinceHour = secondsSinceMidnight - hours * 3600;\n const minutes = Math.floor(secondsSinceHour / 60);\n const seconds = secondsSinceHour - minutes * 60;\n const timeStr = `${hours.toString().padStart(2, '0')}${minutes\n .toString()\n .padStart(2, '0')}${seconds.toString().padStart(2, '0')}`;\n\n return `${timeStr} ${msg.snr.toString().padStart(3)} ${msg.deltaTime\n .toFixed(1)\n .padStart(4)} ${msg.deltaFrequency.toString().padStart(4)} ~ ${\n msg.message\n }`;\n }\n}\n","/*\n * Public API Surface of ngx-kel-agent\n */\n\nexport * from './lib/agent.service';\nexport * from './lib/messages';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-kel-agent.mjs","sources":["../../../projects/ngx-kel-agent/src/lib/agent.service.ts","../../../projects/ngx-kel-agent/src/public-api.ts","../../../projects/ngx-kel-agent/src/ngx-kel-agent.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {BehaviorSubject, ReplaySubject, Subject, Subscription,} from \"rxjs\";\nimport {debounceTime, delay, retryWhen, tap} from \"rxjs/operators\";\nimport {webSocket, WebSocketSubject} from \"rxjs/webSocket\";\nimport {\n HamlibRigState,\n WsjtxClear,\n WsjtxClose,\n WsjtxDecode,\n WsjtxHaltTx,\n WsjtxHeartbeat,\n WsjtxHighlightCallsign,\n WsjtxLoggedAdif,\n WsjtxQsoLogged,\n WsjtxReplay,\n WsjtxReply,\n WsjtxStatus,\n WsjtxWsprDecode\n} from \"./messages\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AgentService {\n /** Whether we're connected to the agent. */\n public readonly connectedState$ = new BehaviorSubject<boolean>(false);\n\n /* WSJT-X */\n /** Whether we're getting any messages from WSJT-X. */\n public readonly wsjtxState$ = new BehaviorSubject<boolean>(false);\n /** Subject for listening to WSJT-X \"Heartbeat\" messages. */\n public readonly wsjtxHeartbeat$ = new ReplaySubject<WsjtxHeartbeat | null>(1);\n /** Subject for listening to WSJT-X \"Status\" messages. */\n public readonly wsjtxStatus$ = new ReplaySubject<WsjtxStatus | null>(1);\n /** Subject for listening to WSJT-X \"Decode\" messages. */\n public readonly wsjtxDecode$ = new Subject<WsjtxDecode>();\n /** Subject for listening to WSJT-X \"Clear\" messages. */\n public readonly wsjtxClear$ = new Subject<WsjtxClear>();\n /** Subject for listening to WSJT-X \"QsoLogged\" messages. */\n public readonly wsjtxQsoLogged$ = new Subject<WsjtxQsoLogged>();\n /** Subject for listening to WSJT-X \"Close\" messages. */\n public readonly wsjtxClose$ = new Subject<WsjtxClose>();\n /** Subject for listening to WSJT-X \"WsprDecode\" messages. */\n public readonly wsjtxWsprDecode$ = new Subject<WsjtxWsprDecode>();\n /** Subject for listening to WSJT-X \"LoggedAdif\" messages. */\n public readonly wsjtxLoggedAdif$ = new Subject<WsjtxLoggedAdif>();\n\n /* Hamlib */\n /** Whether we're getting any messages from Hamlib. */\n public readonly hamlibState$ = new BehaviorSubject<boolean>(false);\n /** Subject for listening to Hamlib \"RigState\" messages. */\n public readonly hamlibRigState$ = new BehaviorSubject<HamlibRigState | null>(\n null\n );\n\n private readonly defaultAgentHost = 'localhost';\n private readonly defaultAgentPort = 8081;\n private readonly localStorageHostKey = 'agent-host';\n private readonly localStoragePortKey = 'agent-port';\n\n private agentHost: string = this.defaultAgentHost;\n private agentPort: number = this.defaultAgentPort;\n private agentWebSocketSubject: WebSocketSubject<object> | null = null;\n private agentWebsocketSubscription: Subscription | null = null;\n private wsjtxId: string = 'WSJT-X';\n\n constructor() {\n }\n\n public init(): void {\n this.agentHost = this.getHost();\n this.agentPort = this.getPort();\n this.setupWsjtxBehaviors();\n this.setupHamlibBehaviors();\n this.connect();\n }\n\n private setupWsjtxBehaviors(): void {\n // if we haven't heard from WSJT-X in 15 seconds, consider it \"down\"\n this.wsjtxState$\n .pipe(debounceTime(15000))\n .subscribe(() => this.wsjtxState$.next(false));\n // When WSJT-X announces it's closing, set it to \"down\" immediately\n this.wsjtxClose$.subscribe(() => {\n this.wsjtxState$.next(false);\n });\n // When WSJT-X goes down, clear its persistent message subjects\n this.wsjtxState$.subscribe((isUp) => {\n if (!isUp) {\n this.wsjtxHeartbeat$.next(null);\n this.wsjtxStatus$.next(null);\n }\n });\n }\n\n private setupHamlibBehaviors(): void {\n // if we haven't heard from Hamlib in 15 seconds, consider it down\n this.hamlibState$.pipe(debounceTime(15000)).subscribe(() => {\n this.hamlibState$.next(false);\n });\n // When Hamlib goes down, clear its persistent message subjects\n this.hamlibState$.subscribe((isUp) => {\n if (!isUp) {\n this.hamlibRigState$.next(null);\n }\n });\n }\n\n /** Connect (or reconnect) the websocket to the kel-agent server. */\n public connect(): void {\n if (this.agentWebsocketSubscription) {\n this.agentWebsocketSubscription.unsubscribe();\n }\n this.agentHost = this.getHost();\n this.agentPort = this.getPort();\n const protocol = this.agentHost === 'localhost' ? 'ws://' : 'wss://';\n this.agentWebSocketSubject = webSocket<object>({\n url: protocol + this.agentHost + ':' + this.agentPort + '/websocket',\n });\n this.connectedState$.next(true);\n this.agentWebsocketSubscription = this.agentWebSocketSubject\n .pipe(\n retryWhen((errors) =>\n // retry the websocket connection after 10 seconds\n errors.pipe(\n tap(() => this.connectedState$.next(false)),\n delay(10000)\n )\n )\n )\n .subscribe({\n next: (msg) => {\n this.connectedState$.next(true);\n this.handleMessage(msg);\n },\n error: () => this.connectedState$.next(false),\n complete: () => this.connectedState$.next(false),\n });\n }\n\n private handleMessage(msg: any): void {\n if (msg.wsjtx != null && msg.wsjtx.type != null) {\n this.wsjtxState$.next(true);\n this.wsjtxId = msg.wsjtx.payload.id;\n switch (msg.wsjtx.type) {\n case 'HeartbeatMessage':\n this.wsjtxHeartbeat$.next(msg.wsjtx.payload as WsjtxHeartbeat);\n return;\n case 'StatusMessage':\n this.wsjtxStatus$.next(msg.wsjtx.payload as WsjtxStatus);\n return;\n case 'DecodeMessage':\n this.wsjtxDecode$.next(msg.wsjtx.payload as WsjtxDecode);\n return;\n case 'ClearMessage':\n this.wsjtxClear$.next(msg.wsjtx.payload as WsjtxClear);\n return;\n case 'QsoLoggedMessage':\n this.wsjtxQsoLogged$.next(msg.wsjtx.payload as WsjtxQsoLogged);\n return;\n case 'CloseMessage':\n this.wsjtxClose$.next(msg.wsjtx.payload as WsjtxClose);\n return;\n case 'WSPRDecodeMessage':\n this.wsjtxWsprDecode$.next(msg.wsjtx.payload as WsjtxWsprDecode);\n return;\n case 'LoggedAdifMessage':\n this.wsjtxLoggedAdif$.next(msg.wsjtx.payload as WsjtxLoggedAdif);\n return;\n }\n }\n if (msg.hamlib !== null) {\n this.hamlibState$.next(true);\n switch (msg.hamlib.type) {\n case 'RigState':\n this.hamlibRigState$.next(msg.hamlib.payload as HamlibRigState);\n return;\n }\n }\n }\n\n /** Get the currently configured kel-agent host. */\n public getHost(): string {\n return localStorage.getItem(this.localStorageHostKey) || this.defaultAgentHost;\n }\n\n /** Get the currently configured kel-agent port. */\n public getPort(): number {\n let portStr = localStorage.getItem(this.localStoragePortKey);\n if (portStr == null) {\n return this.defaultAgentPort;\n }\n let portNum = parseInt(portStr, 10);\n if (isNaN(portNum)) {\n return this.defaultAgentPort;\n }\n return portNum;\n }\n\n /** Set the kel-agent host. */\n public setHost(host: string): void {\n localStorage.setItem(this.localStorageHostKey, host);\n this.connect();\n }\n\n /** Set the kel-agent port. */\n public setPort(port: number): void {\n localStorage.setItem(this.localStoragePortKey, String(port));\n this.connect();\n }\n\n /** Send a command to WSJT-X to clear the Band Activity window. */\n public sendWsjtxClearBandActivity() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 0},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to clear the Rx Frequency window. */\n public sendWsjtxClearRxFreqWindow() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 1},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to clear the Band Activity and Rx Frequency windows. */\n public sendWsjtxClearAll() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 2},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to replay messages. Useful for a fresh client that wants to hear\n * previous WSJT-X decodes. */\n public sendWsjtxReplay() {\n const wsMsg = {\n wsjtx: {\n type: 'ReplayMessage',\n payload: <WsjtxReplay>{id: this.wsjtxId},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to halt any transmissions immediately. */\n public sendWsjtxHaltTxNow() {\n const wsMsg = {\n wsjtx: {\n type: 'HaltTxMessage',\n payload: <WsjtxHaltTx>{id: this.wsjtxId, autoTxOnly: false},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to stop auto-transmitting after finishing the current round. */\n public sendWsjtxHaltTxAfterCurrent() {\n const wsMsg = {\n wsjtx: {\n type: 'HaltTxMessage',\n payload: <WsjtxHaltTx>{id: this.wsjtxId, autoTxOnly: true},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */\n public sendWsjtxReply(decode: WsjtxDecode) {\n const wsMsg = {\n wsjtx: {\n type: 'ReplyMessage',\n payload: <WsjtxReply>{\n id: decode.id,\n time: decode.time,\n snr: decode.snr,\n deltaTime: decode.deltaTime,\n deltaFrequency: decode.deltaFrequency,\n mode: decode.mode,\n message: decode.message,\n lowConfidence: decode.lowConfidence,\n },\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */\n public sendWsjtxHighlightCallsign(highlightMsg: WsjtxHighlightCallsign) {\n highlightMsg.id = this.wsjtxId;\n const wsMsg = {\n wsjtx: {\n type: 'HighlightCallsignMessage',\n payload: highlightMsg,\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Given a decode message, format a string the same way as displayed in the WSJT-X Band\n * Activity/Rx Frequency windows. */\n public static formatDecode(msg: WsjtxDecode): string {\n const secondsSinceMidnight = Math.floor(msg.time / 1000);\n const hours = Math.floor(secondsSinceMidnight / 3600);\n const secondsSinceHour = secondsSinceMidnight - hours * 3600;\n const minutes = Math.floor(secondsSinceHour / 60);\n const seconds = secondsSinceHour - minutes * 60;\n const timeStr = `${hours.toString().padStart(2, '0')}${minutes\n .toString()\n .padStart(2, '0')}${seconds.toString().padStart(2, '0')}`;\n\n return `${timeStr} ${msg.snr.toString().padStart(3)} ${msg.deltaTime\n .toFixed(1)\n .padStart(4)} ${msg.deltaFrequency.toString().padStart(4)} ~ ${\n msg.message\n }`;\n }\n}\n","/*\n * Public API Surface of ngx-kel-agent\n */\n\nexport * from './lib/agent.service';\nexport * from './lib/messages';\n// export * from './lib/ngx-kel-agent.component';\n// export * from './lib/ngx-kel-agent.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -249,6 +249,17 @@ class AgentService {
|
|
|
249
249
|
};
|
|
250
250
|
this.agentWebSocketSubject?.next(wsMsg);
|
|
251
251
|
}
|
|
252
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
253
|
+
sendWsjtxHighlightCallsign(highlightMsg) {
|
|
254
|
+
highlightMsg.id = this.wsjtxId;
|
|
255
|
+
const wsMsg = {
|
|
256
|
+
wsjtx: {
|
|
257
|
+
type: 'HighlightCallsignMessage',
|
|
258
|
+
payload: highlightMsg,
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
this.agentWebSocketSubject?.next(wsMsg);
|
|
262
|
+
}
|
|
252
263
|
/** Given a decode message, format a string the same way as displayed in the WSJT-X Band
|
|
253
264
|
* Activity/Rx Frequency windows. */
|
|
254
265
|
static formatDecode(msg) {
|
|
@@ -277,6 +288,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
|
|
|
277
288
|
/*
|
|
278
289
|
* Public API Surface of ngx-kel-agent
|
|
279
290
|
*/
|
|
291
|
+
// export * from './lib/ngx-kel-agent.component';
|
|
292
|
+
// export * from './lib/ngx-kel-agent.module';
|
|
280
293
|
|
|
281
294
|
/**
|
|
282
295
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-kel-agent.mjs","sources":["../../../projects/ngx-kel-agent/src/lib/agent.service.ts","../../../projects/ngx-kel-agent/src/public-api.ts","../../../projects/ngx-kel-agent/src/ngx-kel-agent.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {BehaviorSubject, ReplaySubject, Subject, Subscription,} from \"rxjs\";\nimport {debounceTime, delay, retryWhen, tap} from \"rxjs/operators\";\nimport {webSocket, WebSocketSubject} from \"rxjs/webSocket\";\nimport {\n HamlibRigState,\n WsjtxClear,\n WsjtxClose,\n WsjtxDecode,\n WsjtxHaltTx,\n WsjtxHeartbeat,\n WsjtxLoggedAdif,\n WsjtxQsoLogged,\n WsjtxReplay,\n WsjtxReply,\n WsjtxStatus,\n WsjtxWsprDecode\n} from \"./messages\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AgentService {\n /** Whether we're connected to the agent. */\n public readonly connectedState$ = new BehaviorSubject<boolean>(false);\n\n /* WSJT-X */\n /** Whether we're getting any messages from WSJT-X. */\n public readonly wsjtxState$ = new BehaviorSubject<boolean>(false);\n /** Subject for listening to WSJT-X \"Heartbeat\" messages. */\n public readonly wsjtxHeartbeat$ = new ReplaySubject<WsjtxHeartbeat | null>(1);\n /** Subject for listening to WSJT-X \"Status\" messages. */\n public readonly wsjtxStatus$ = new ReplaySubject<WsjtxStatus | null>(1);\n /** Subject for listening to WSJT-X \"Decode\" messages. */\n public readonly wsjtxDecode$ = new Subject<WsjtxDecode>();\n /** Subject for listening to WSJT-X \"Clear\" messages. */\n public readonly wsjtxClear$ = new Subject<WsjtxClear>();\n /** Subject for listening to WSJT-X \"QsoLogged\" messages. */\n public readonly wsjtxQsoLogged$ = new Subject<WsjtxQsoLogged>();\n /** Subject for listening to WSJT-X \"Close\" messages. */\n public readonly wsjtxClose$ = new Subject<WsjtxClose>();\n /** Subject for listening to WSJT-X \"WsprDecode\" messages. */\n public readonly wsjtxWsprDecode$ = new Subject<WsjtxWsprDecode>();\n /** Subject for listening to WSJT-X \"LoggedAdif\" messages. */\n public readonly wsjtxLoggedAdif$ = new Subject<WsjtxLoggedAdif>();\n\n /* Hamlib */\n /** Whether we're getting any messages from Hamlib. */\n public readonly hamlibState$ = new BehaviorSubject<boolean>(false);\n /** Subject for listening to Hamlib \"RigState\" messages. */\n public readonly hamlibRigState$ = new BehaviorSubject<HamlibRigState | null>(\n null\n );\n\n private readonly defaultAgentHost = 'localhost';\n private readonly defaultAgentPort = 8081;\n private readonly localStorageHostKey = 'agent-host';\n private readonly localStoragePortKey = 'agent-port';\n\n private agentHost: string = this.defaultAgentHost;\n private agentPort: number = this.defaultAgentPort;\n private agentWebSocketSubject: WebSocketSubject<object> | null = null;\n private agentWebsocketSubscription: Subscription | null = null;\n private wsjtxId: string = 'WSJT-X';\n\n constructor() {\n }\n\n public init(): void {\n this.agentHost = this.getHost();\n this.agentPort = this.getPort();\n this.setupWsjtxBehaviors();\n this.setupHamlibBehaviors();\n this.connect();\n }\n\n private setupWsjtxBehaviors(): void {\n // if we haven't heard from WSJT-X in 15 seconds, consider it \"down\"\n this.wsjtxState$\n .pipe(debounceTime(15000))\n .subscribe(() => this.wsjtxState$.next(false));\n // When WSJT-X announces it's closing, set it to \"down\" immediately\n this.wsjtxClose$.subscribe(() => {\n this.wsjtxState$.next(false);\n });\n // When WSJT-X goes down, clear its persistent message subjects\n this.wsjtxState$.subscribe((isUp) => {\n if (!isUp) {\n this.wsjtxHeartbeat$.next(null);\n this.wsjtxStatus$.next(null);\n }\n });\n }\n\n private setupHamlibBehaviors(): void {\n // if we haven't heard from Hamlib in 15 seconds, consider it down\n this.hamlibState$.pipe(debounceTime(15000)).subscribe(() => {\n this.hamlibState$.next(false);\n });\n // When Hamlib goes down, clear its persistent message subjects\n this.hamlibState$.subscribe((isUp) => {\n if (!isUp) {\n this.hamlibRigState$.next(null);\n }\n });\n }\n\n /** Connect (or reconnect) the websocket to the kel-agent server. */\n public connect(): void {\n if (this.agentWebsocketSubscription) {\n this.agentWebsocketSubscription.unsubscribe();\n }\n this.agentHost = this.getHost();\n this.agentPort = this.getPort();\n const protocol = this.agentHost === 'localhost' ? 'ws://' : 'wss://';\n this.agentWebSocketSubject = webSocket<object>({\n url: protocol + this.agentHost + ':' + this.agentPort + '/websocket',\n });\n this.connectedState$.next(true);\n this.agentWebsocketSubscription = this.agentWebSocketSubject\n .pipe(\n retryWhen((errors) =>\n // retry the websocket connection after 10 seconds\n errors.pipe(\n tap(() => this.connectedState$.next(false)),\n delay(10000)\n )\n )\n )\n .subscribe({\n next: (msg) => {\n this.connectedState$.next(true);\n this.handleMessage(msg);\n },\n error: () => this.connectedState$.next(false),\n complete: () => this.connectedState$.next(false),\n });\n }\n\n private handleMessage(msg: any): void {\n if (msg.wsjtx != null && msg.wsjtx.type != null) {\n this.wsjtxState$.next(true);\n this.wsjtxId = msg.wsjtx.payload.id;\n switch (msg.wsjtx.type) {\n case 'HeartbeatMessage':\n this.wsjtxHeartbeat$.next(msg.wsjtx.payload as WsjtxHeartbeat);\n return;\n case 'StatusMessage':\n this.wsjtxStatus$.next(msg.wsjtx.payload as WsjtxStatus);\n return;\n case 'DecodeMessage':\n this.wsjtxDecode$.next(msg.wsjtx.payload as WsjtxDecode);\n return;\n case 'ClearMessage':\n this.wsjtxClear$.next(msg.wsjtx.payload as WsjtxClear);\n return;\n case 'QsoLoggedMessage':\n this.wsjtxQsoLogged$.next(msg.wsjtx.payload as WsjtxQsoLogged);\n return;\n case 'CloseMessage':\n this.wsjtxClose$.next(msg.wsjtx.payload as WsjtxClose);\n return;\n case 'WSPRDecodeMessage':\n this.wsjtxWsprDecode$.next(msg.wsjtx.payload as WsjtxWsprDecode);\n return;\n case 'LoggedAdifMessage':\n this.wsjtxLoggedAdif$.next(msg.wsjtx.payload as WsjtxLoggedAdif);\n return;\n }\n }\n if (msg.hamlib !== null) {\n this.hamlibState$.next(true);\n switch (msg.hamlib.type) {\n case 'RigState':\n this.hamlibRigState$.next(msg.hamlib.payload as HamlibRigState);\n return;\n }\n }\n }\n\n /** Get the currently configured kel-agent host. */\n public getHost(): string {\n return localStorage.getItem(this.localStorageHostKey) || this.defaultAgentHost;\n }\n\n /** Get the currently configured kel-agent port. */\n public getPort(): number {\n let portStr = localStorage.getItem(this.localStoragePortKey);\n if (portStr == null) {\n return this.defaultAgentPort;\n }\n let portNum = parseInt(portStr, 10);\n if (isNaN(portNum)) {\n return this.defaultAgentPort;\n }\n return portNum;\n }\n\n /** Set the kel-agent host. */\n public setHost(host: string): void {\n localStorage.setItem(this.localStorageHostKey, host);\n this.connect();\n }\n\n /** Set the kel-agent port. */\n public setPort(port: number): void {\n localStorage.setItem(this.localStoragePortKey, String(port));\n this.connect();\n }\n\n /** Send a command to WSJT-X to clear the Band Activity window. */\n public sendWsjtxClearBandActivity() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 0},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to clear the Rx Frequency window. */\n public sendWsjtxClearRxFreqWindow() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 1},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to clear the Band Activity and Rx Frequency windows. */\n public sendWsjtxClearAll() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 2},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to replay messages. Useful for a fresh client that wants to hear\n * previous WSJT-X decodes. */\n public sendWsjtxReplay() {\n const wsMsg = {\n wsjtx: {\n type: 'ReplayMessage',\n payload: <WsjtxReplay>{id: this.wsjtxId},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to halt any transmissions immediately. */\n public sendWsjtxHaltTxNow() {\n const wsMsg = {\n wsjtx: {\n type: 'HaltTxMessage',\n payload: <WsjtxHaltTx>{id: this.wsjtxId, autoTxOnly: false},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to stop auto-transmitting after finishing the current round. */\n public sendWsjtxHaltTxAfterCurrent() {\n const wsMsg = {\n wsjtx: {\n type: 'HaltTxMessage',\n payload: <WsjtxHaltTx>{id: this.wsjtxId, autoTxOnly: true},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */\n public sendWsjtxReply(decode: WsjtxDecode) {\n const wsMsg = {\n wsjtx: {\n type: 'ReplyMessage',\n payload: <WsjtxReply>{\n id: decode.id,\n time: decode.time,\n snr: decode.snr,\n deltaTime: decode.deltaTime,\n deltaFrequency: decode.deltaFrequency,\n mode: decode.mode,\n message: decode.message,\n lowConfidence: decode.lowConfidence,\n },\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Given a decode message, format a string the same way as displayed in the WSJT-X Band\n * Activity/Rx Frequency windows. */\n public static formatDecode(msg: WsjtxDecode): string {\n const secondsSinceMidnight = Math.floor(msg.time / 1000);\n const hours = Math.floor(secondsSinceMidnight / 3600);\n const secondsSinceHour = secondsSinceMidnight - hours * 3600;\n const minutes = Math.floor(secondsSinceHour / 60);\n const seconds = secondsSinceHour - minutes * 60;\n const timeStr = `${hours.toString().padStart(2, '0')}${minutes\n .toString()\n .padStart(2, '0')}${seconds.toString().padStart(2, '0')}`;\n\n return `${timeStr} ${msg.snr.toString().padStart(3)} ${msg.deltaTime\n .toFixed(1)\n .padStart(4)} ${msg.deltaFrequency.toString().padStart(4)} ~ ${\n msg.message\n }`;\n }\n}\n","/*\n * Public API Surface of ngx-kel-agent\n */\n\nexport * from './lib/agent.service';\nexport * from './lib/messages';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-kel-agent.mjs","sources":["../../../projects/ngx-kel-agent/src/lib/agent.service.ts","../../../projects/ngx-kel-agent/src/public-api.ts","../../../projects/ngx-kel-agent/src/ngx-kel-agent.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {BehaviorSubject, ReplaySubject, Subject, Subscription,} from \"rxjs\";\nimport {debounceTime, delay, retryWhen, tap} from \"rxjs/operators\";\nimport {webSocket, WebSocketSubject} from \"rxjs/webSocket\";\nimport {\n HamlibRigState,\n WsjtxClear,\n WsjtxClose,\n WsjtxDecode,\n WsjtxHaltTx,\n WsjtxHeartbeat,\n WsjtxHighlightCallsign,\n WsjtxLoggedAdif,\n WsjtxQsoLogged,\n WsjtxReplay,\n WsjtxReply,\n WsjtxStatus,\n WsjtxWsprDecode\n} from \"./messages\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AgentService {\n /** Whether we're connected to the agent. */\n public readonly connectedState$ = new BehaviorSubject<boolean>(false);\n\n /* WSJT-X */\n /** Whether we're getting any messages from WSJT-X. */\n public readonly wsjtxState$ = new BehaviorSubject<boolean>(false);\n /** Subject for listening to WSJT-X \"Heartbeat\" messages. */\n public readonly wsjtxHeartbeat$ = new ReplaySubject<WsjtxHeartbeat | null>(1);\n /** Subject for listening to WSJT-X \"Status\" messages. */\n public readonly wsjtxStatus$ = new ReplaySubject<WsjtxStatus | null>(1);\n /** Subject for listening to WSJT-X \"Decode\" messages. */\n public readonly wsjtxDecode$ = new Subject<WsjtxDecode>();\n /** Subject for listening to WSJT-X \"Clear\" messages. */\n public readonly wsjtxClear$ = new Subject<WsjtxClear>();\n /** Subject for listening to WSJT-X \"QsoLogged\" messages. */\n public readonly wsjtxQsoLogged$ = new Subject<WsjtxQsoLogged>();\n /** Subject for listening to WSJT-X \"Close\" messages. */\n public readonly wsjtxClose$ = new Subject<WsjtxClose>();\n /** Subject for listening to WSJT-X \"WsprDecode\" messages. */\n public readonly wsjtxWsprDecode$ = new Subject<WsjtxWsprDecode>();\n /** Subject for listening to WSJT-X \"LoggedAdif\" messages. */\n public readonly wsjtxLoggedAdif$ = new Subject<WsjtxLoggedAdif>();\n\n /* Hamlib */\n /** Whether we're getting any messages from Hamlib. */\n public readonly hamlibState$ = new BehaviorSubject<boolean>(false);\n /** Subject for listening to Hamlib \"RigState\" messages. */\n public readonly hamlibRigState$ = new BehaviorSubject<HamlibRigState | null>(\n null\n );\n\n private readonly defaultAgentHost = 'localhost';\n private readonly defaultAgentPort = 8081;\n private readonly localStorageHostKey = 'agent-host';\n private readonly localStoragePortKey = 'agent-port';\n\n private agentHost: string = this.defaultAgentHost;\n private agentPort: number = this.defaultAgentPort;\n private agentWebSocketSubject: WebSocketSubject<object> | null = null;\n private agentWebsocketSubscription: Subscription | null = null;\n private wsjtxId: string = 'WSJT-X';\n\n constructor() {\n }\n\n public init(): void {\n this.agentHost = this.getHost();\n this.agentPort = this.getPort();\n this.setupWsjtxBehaviors();\n this.setupHamlibBehaviors();\n this.connect();\n }\n\n private setupWsjtxBehaviors(): void {\n // if we haven't heard from WSJT-X in 15 seconds, consider it \"down\"\n this.wsjtxState$\n .pipe(debounceTime(15000))\n .subscribe(() => this.wsjtxState$.next(false));\n // When WSJT-X announces it's closing, set it to \"down\" immediately\n this.wsjtxClose$.subscribe(() => {\n this.wsjtxState$.next(false);\n });\n // When WSJT-X goes down, clear its persistent message subjects\n this.wsjtxState$.subscribe((isUp) => {\n if (!isUp) {\n this.wsjtxHeartbeat$.next(null);\n this.wsjtxStatus$.next(null);\n }\n });\n }\n\n private setupHamlibBehaviors(): void {\n // if we haven't heard from Hamlib in 15 seconds, consider it down\n this.hamlibState$.pipe(debounceTime(15000)).subscribe(() => {\n this.hamlibState$.next(false);\n });\n // When Hamlib goes down, clear its persistent message subjects\n this.hamlibState$.subscribe((isUp) => {\n if (!isUp) {\n this.hamlibRigState$.next(null);\n }\n });\n }\n\n /** Connect (or reconnect) the websocket to the kel-agent server. */\n public connect(): void {\n if (this.agentWebsocketSubscription) {\n this.agentWebsocketSubscription.unsubscribe();\n }\n this.agentHost = this.getHost();\n this.agentPort = this.getPort();\n const protocol = this.agentHost === 'localhost' ? 'ws://' : 'wss://';\n this.agentWebSocketSubject = webSocket<object>({\n url: protocol + this.agentHost + ':' + this.agentPort + '/websocket',\n });\n this.connectedState$.next(true);\n this.agentWebsocketSubscription = this.agentWebSocketSubject\n .pipe(\n retryWhen((errors) =>\n // retry the websocket connection after 10 seconds\n errors.pipe(\n tap(() => this.connectedState$.next(false)),\n delay(10000)\n )\n )\n )\n .subscribe({\n next: (msg) => {\n this.connectedState$.next(true);\n this.handleMessage(msg);\n },\n error: () => this.connectedState$.next(false),\n complete: () => this.connectedState$.next(false),\n });\n }\n\n private handleMessage(msg: any): void {\n if (msg.wsjtx != null && msg.wsjtx.type != null) {\n this.wsjtxState$.next(true);\n this.wsjtxId = msg.wsjtx.payload.id;\n switch (msg.wsjtx.type) {\n case 'HeartbeatMessage':\n this.wsjtxHeartbeat$.next(msg.wsjtx.payload as WsjtxHeartbeat);\n return;\n case 'StatusMessage':\n this.wsjtxStatus$.next(msg.wsjtx.payload as WsjtxStatus);\n return;\n case 'DecodeMessage':\n this.wsjtxDecode$.next(msg.wsjtx.payload as WsjtxDecode);\n return;\n case 'ClearMessage':\n this.wsjtxClear$.next(msg.wsjtx.payload as WsjtxClear);\n return;\n case 'QsoLoggedMessage':\n this.wsjtxQsoLogged$.next(msg.wsjtx.payload as WsjtxQsoLogged);\n return;\n case 'CloseMessage':\n this.wsjtxClose$.next(msg.wsjtx.payload as WsjtxClose);\n return;\n case 'WSPRDecodeMessage':\n this.wsjtxWsprDecode$.next(msg.wsjtx.payload as WsjtxWsprDecode);\n return;\n case 'LoggedAdifMessage':\n this.wsjtxLoggedAdif$.next(msg.wsjtx.payload as WsjtxLoggedAdif);\n return;\n }\n }\n if (msg.hamlib !== null) {\n this.hamlibState$.next(true);\n switch (msg.hamlib.type) {\n case 'RigState':\n this.hamlibRigState$.next(msg.hamlib.payload as HamlibRigState);\n return;\n }\n }\n }\n\n /** Get the currently configured kel-agent host. */\n public getHost(): string {\n return localStorage.getItem(this.localStorageHostKey) || this.defaultAgentHost;\n }\n\n /** Get the currently configured kel-agent port. */\n public getPort(): number {\n let portStr = localStorage.getItem(this.localStoragePortKey);\n if (portStr == null) {\n return this.defaultAgentPort;\n }\n let portNum = parseInt(portStr, 10);\n if (isNaN(portNum)) {\n return this.defaultAgentPort;\n }\n return portNum;\n }\n\n /** Set the kel-agent host. */\n public setHost(host: string): void {\n localStorage.setItem(this.localStorageHostKey, host);\n this.connect();\n }\n\n /** Set the kel-agent port. */\n public setPort(port: number): void {\n localStorage.setItem(this.localStoragePortKey, String(port));\n this.connect();\n }\n\n /** Send a command to WSJT-X to clear the Band Activity window. */\n public sendWsjtxClearBandActivity() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 0},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to clear the Rx Frequency window. */\n public sendWsjtxClearRxFreqWindow() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 1},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to clear the Band Activity and Rx Frequency windows. */\n public sendWsjtxClearAll() {\n const wsMsg = {\n wsjtx: {\n type: 'ClearMessage',\n payload: <WsjtxClear>{id: this.wsjtxId, window: 2},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to replay messages. Useful for a fresh client that wants to hear\n * previous WSJT-X decodes. */\n public sendWsjtxReplay() {\n const wsMsg = {\n wsjtx: {\n type: 'ReplayMessage',\n payload: <WsjtxReplay>{id: this.wsjtxId},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to halt any transmissions immediately. */\n public sendWsjtxHaltTxNow() {\n const wsMsg = {\n wsjtx: {\n type: 'HaltTxMessage',\n payload: <WsjtxHaltTx>{id: this.wsjtxId, autoTxOnly: false},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to stop auto-transmitting after finishing the current round. */\n public sendWsjtxHaltTxAfterCurrent() {\n const wsMsg = {\n wsjtx: {\n type: 'HaltTxMessage',\n payload: <WsjtxHaltTx>{id: this.wsjtxId, autoTxOnly: true},\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */\n public sendWsjtxReply(decode: WsjtxDecode) {\n const wsMsg = {\n wsjtx: {\n type: 'ReplyMessage',\n payload: <WsjtxReply>{\n id: decode.id,\n time: decode.time,\n snr: decode.snr,\n deltaTime: decode.deltaTime,\n deltaFrequency: decode.deltaFrequency,\n mode: decode.mode,\n message: decode.message,\n lowConfidence: decode.lowConfidence,\n },\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */\n public sendWsjtxHighlightCallsign(highlightMsg: WsjtxHighlightCallsign) {\n highlightMsg.id = this.wsjtxId;\n const wsMsg = {\n wsjtx: {\n type: 'HighlightCallsignMessage',\n payload: highlightMsg,\n },\n };\n this.agentWebSocketSubject?.next(wsMsg);\n }\n\n /** Given a decode message, format a string the same way as displayed in the WSJT-X Band\n * Activity/Rx Frequency windows. */\n public static formatDecode(msg: WsjtxDecode): string {\n const secondsSinceMidnight = Math.floor(msg.time / 1000);\n const hours = Math.floor(secondsSinceMidnight / 3600);\n const secondsSinceHour = secondsSinceMidnight - hours * 3600;\n const minutes = Math.floor(secondsSinceHour / 60);\n const seconds = secondsSinceHour - minutes * 60;\n const timeStr = `${hours.toString().padStart(2, '0')}${minutes\n .toString()\n .padStart(2, '0')}${seconds.toString().padStart(2, '0')}`;\n\n return `${timeStr} ${msg.snr.toString().padStart(3)} ${msg.deltaTime\n .toFixed(1)\n .padStart(4)} ${msg.deltaFrequency.toString().padStart(4)} ~ ${\n msg.message\n }`;\n }\n}\n","/*\n * Public API Surface of ngx-kel-agent\n */\n\nexport * from './lib/agent.service';\nexport * from './lib/messages';\n// export * from './lib/ngx-kel-agent.component';\n// export * from './lib/ngx-kel-agent.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/lib/agent.service.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BehaviorSubject, ReplaySubject, Subject } from "rxjs";
|
|
2
|
-
import { HamlibRigState, WsjtxClear, WsjtxClose, WsjtxDecode, WsjtxHeartbeat, WsjtxLoggedAdif, WsjtxQsoLogged, WsjtxStatus, WsjtxWsprDecode } from "./messages";
|
|
2
|
+
import { HamlibRigState, WsjtxClear, WsjtxClose, WsjtxDecode, WsjtxHeartbeat, WsjtxHighlightCallsign, WsjtxLoggedAdif, WsjtxQsoLogged, WsjtxStatus, WsjtxWsprDecode } from "./messages";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class AgentService {
|
|
5
5
|
/** Whether we're connected to the agent. */
|
|
@@ -65,6 +65,8 @@ export declare class AgentService {
|
|
|
65
65
|
sendWsjtxHaltTxAfterCurrent(): void;
|
|
66
66
|
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
67
67
|
sendWsjtxReply(decode: WsjtxDecode): void;
|
|
68
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
69
|
+
sendWsjtxHighlightCallsign(highlightMsg: WsjtxHighlightCallsign): void;
|
|
68
70
|
/** Given a decode message, format a string the same way as displayed in the WSJT-X Band
|
|
69
71
|
* Activity/Rx Frequency windows. */
|
|
70
72
|
static formatDecode(msg: WsjtxDecode): string;
|
package/lib/messages.d.ts
CHANGED
|
@@ -327,9 +327,11 @@ export interface WsjtxHighlightCallsign {
|
|
|
327
327
|
id: string;
|
|
328
328
|
/** Which callsign to highlight */
|
|
329
329
|
callsign: string;
|
|
330
|
-
/** Background color
|
|
330
|
+
/** Background color. All CSS Color Module Level 4 formats should be valid.
|
|
331
|
+
* See https://www.w3.org/TR/css-color-4/ */
|
|
331
332
|
backgroundColor: string;
|
|
332
|
-
/** Foreground color
|
|
333
|
+
/** Foreground color. All CSS Color Module Level 4 formats should be valid.
|
|
334
|
+
* See https://www.w3.org/TR/css-color-4/ */
|
|
333
335
|
foregroundColor: string;
|
|
334
336
|
/** The "Highlight last" field allows the sender to request that
|
|
335
337
|
* all instances of "Callsign" in the last period only, instead
|