@catchpower/device-config-interaction 0.0.13
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 +25 -0
- package/esm2022/catchpower-device-config-interaction.mjs +5 -0
- package/esm2022/lib/command.service.mjs +66 -0
- package/esm2022/lib/crc-check.service.mjs +105 -0
- package/esm2022/lib/dataset-processing.service.mjs +524 -0
- package/esm2022/lib/device-config-dataset.service.mjs +187 -0
- package/esm2022/lib/device-config-interaction.module.mjs +16 -0
- package/esm2022/lib/device-config-interaction.service.mjs +58 -0
- package/esm2022/lib/device-live-dataset.service.mjs +67 -0
- package/esm2022/lib/interfaces/devices-list.mjs +2 -0
- package/esm2022/public-api.mjs +12 -0
- package/fesm2022/catchpower-device-config-interaction.mjs +1018 -0
- package/fesm2022/catchpower-device-config-interaction.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/command.service.d.ts +25 -0
- package/lib/crc-check.service.d.ts +17 -0
- package/lib/dataset-processing.service.d.ts +60 -0
- package/lib/device-config-dataset.service.d.ts +20 -0
- package/lib/device-config-interaction.module.d.ts +6 -0
- package/lib/device-config-interaction.service.d.ts +8 -0
- package/lib/device-live-dataset.service.d.ts +15 -0
- package/lib/interfaces/devices-list.d.ts +183 -0
- package/package.json +25 -0
- package/public-api.d.ts +8 -0
package/README.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# CpDevicesList
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project device-config-interaction` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project device-config-interaction`.
|
|
8
|
+
|
|
9
|
+
> Note: Don't forget to add `--project device-config-interaction` or else it will be added to the default project in your `angular.json` file.
|
|
10
|
+
|
|
11
|
+
## Build
|
|
12
|
+
|
|
13
|
+
Run `ng build device-config-interaction` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
14
|
+
|
|
15
|
+
## Publishing
|
|
16
|
+
|
|
17
|
+
After building your library with `ng build device-config-interaction`, go to the dist folder `cd dist/device-config-interaction` and run `npm publish`.
|
|
18
|
+
|
|
19
|
+
## Running unit tests
|
|
20
|
+
|
|
21
|
+
Run `ng test device-config-interaction` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
22
|
+
|
|
23
|
+
## Further help
|
|
24
|
+
|
|
25
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0Y2hwb3dlci1kZXZpY2UtY29uZmlnLWludGVyYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvZGV2aWNlLWNvbmZpZy1pbnRlcmFjdGlvbi9zcmMvY2F0Y2hwb3dlci1kZXZpY2UtY29uZmlnLWludGVyYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./dataset-processing.service";
|
|
4
|
+
import * as i2 from "./crc-check.service";
|
|
5
|
+
export class CommandService {
|
|
6
|
+
constructor(dps, crcService) {
|
|
7
|
+
this.dps = dps;
|
|
8
|
+
this.crcService = crcService;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* For Bluetooth command send
|
|
12
|
+
* @param currentDevice
|
|
13
|
+
* @param command
|
|
14
|
+
* @param rawDataObj
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
async createCommandData(currentDevice, command, rawDataObj) {
|
|
18
|
+
let opCode = 0;
|
|
19
|
+
const comandBuffer = new ArrayBuffer(currentDevice.write.bufferSize);
|
|
20
|
+
currentDevice.commands.forEach((commandObj) => {
|
|
21
|
+
//console.log('Command Name', commandObj.name);
|
|
22
|
+
if (command == commandObj.name) {
|
|
23
|
+
opCode = parseInt(commandObj.opCode);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
//console.log('########### $$$$$$$$$$$$ Op Code ', opCode);
|
|
27
|
+
if (rawDataObj !== undefined) {
|
|
28
|
+
//console.log('create Command Data, Raw Data Object is present.');
|
|
29
|
+
const dataView = new DataView(comandBuffer);
|
|
30
|
+
rawDataObj.forEach((raw) => {
|
|
31
|
+
this.dps.writeValueToBuffer(raw.buffer, raw.value, dataView);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
let commandData = {
|
|
35
|
+
opCode: opCode,
|
|
36
|
+
service: currentDevice.write.service,
|
|
37
|
+
characteristic: currentDevice.write.characteristic,
|
|
38
|
+
byteData: new Uint8Array(comandBuffer),
|
|
39
|
+
};
|
|
40
|
+
commandData.byteData[0] = commandData.opCode;
|
|
41
|
+
commandData = await this.crcService.writeCrcToCommand(commandData);
|
|
42
|
+
return commandData;
|
|
43
|
+
}
|
|
44
|
+
async createCommandDataForApi(currentDevice, command, rawDataObj) {
|
|
45
|
+
let raw = undefined;
|
|
46
|
+
if (rawDataObj !== undefined) {
|
|
47
|
+
raw = rawDataObj;
|
|
48
|
+
}
|
|
49
|
+
const commandBt = this.createCommandData(currentDevice, command, raw);
|
|
50
|
+
const send = {
|
|
51
|
+
serialNumber: currentDevice.serial.toString(),
|
|
52
|
+
data: this.dps.uint8ArrayToArray((await commandBt).byteData),
|
|
53
|
+
};
|
|
54
|
+
//console.log(JSON.stringify(send));
|
|
55
|
+
return send;
|
|
56
|
+
}
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CommandService, deps: [{ token: i1.DatasetProcessingService }, { token: i2.CrcCheckService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
58
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CommandService, providedIn: 'root' }); }
|
|
59
|
+
}
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CommandService, decorators: [{
|
|
61
|
+
type: Injectable,
|
|
62
|
+
args: [{
|
|
63
|
+
providedIn: 'root',
|
|
64
|
+
}]
|
|
65
|
+
}], ctorParameters: function () { return [{ type: i1.DatasetProcessingService }, { type: i2.CrcCheckService }]; } });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZGV2aWNlLWNvbmZpZy1pbnRlcmFjdGlvbi9zcmMvbGliL2NvbW1hbmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUTNDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ1UsR0FBNkIsRUFDN0IsVUFBMkI7UUFEM0IsUUFBRyxHQUFILEdBQUcsQ0FBMEI7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7SUFDbEMsQ0FBQztJQUVKOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FDckIsYUFBc0IsRUFDdEIsT0FBZSxFQUNmLFVBQTBCO1FBRTFCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0sWUFBWSxHQUFHLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUM1QywrQ0FBK0M7WUFDL0MsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRTtnQkFDOUIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDdEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILG9FQUFvRTtRQUNwRSxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDNUIsa0VBQWtFO1lBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksV0FBVyxHQUFHO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTztZQUNwQyxjQUFjLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxjQUFjO1lBQ2xELFFBQVEsRUFBRSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUM7U0FDdkMsQ0FBQztRQUNGLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUU3QyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5FLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCLENBQzNCLGFBQXNCLEVBQ3RCLE9BQWUsRUFDZixVQUEwQjtRQUUxQixJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUM7UUFDcEIsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzVCLEdBQUcsR0FBRyxVQUFVLENBQUM7U0FDbEI7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RSxNQUFNLElBQUksR0FBRztZQUNYLFlBQVksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDO1NBQzdELENBQUM7UUFDRixvQ0FBb0M7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOytHQWxFVSxjQUFjO21IQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDb21tYW5kRGF0YUFwaSwgSURldmljZSwgSVJhd0RhdGFPYmogfSBmcm9tICcuLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IERhdGFzZXRQcm9jZXNzaW5nU2VydmljZSB9IGZyb20gJy4vZGF0YXNldC1wcm9jZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3JjQ2hlY2tTZXJ2aWNlIH0gZnJvbSAnLi9jcmMtY2hlY2suc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb21tYW5kU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZHBzOiBEYXRhc2V0UHJvY2Vzc2luZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjcmNTZXJ2aWNlOiBDcmNDaGVja1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiAgRm9yIEJsdWV0b290aCBjb21tYW5kIHNlbmRcbiAgICogQHBhcmFtIGN1cnJlbnREZXZpY2VcbiAgICogQHBhcmFtIGNvbW1hbmRcbiAgICogQHBhcmFtIHJhd0RhdGFPYmpcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUNvbW1hbmREYXRhKFxuICAgIGN1cnJlbnREZXZpY2U6IElEZXZpY2UsXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIHJhd0RhdGFPYmo/OiBJUmF3RGF0YU9ialtdXG4gICkge1xuICAgIGxldCBvcENvZGUgPSAwO1xuICAgIGNvbnN0IGNvbWFuZEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihjdXJyZW50RGV2aWNlLndyaXRlLmJ1ZmZlclNpemUpO1xuXG4gICAgY3VycmVudERldmljZS5jb21tYW5kcy5mb3JFYWNoKChjb21tYW5kT2JqKSA9PiB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdDb21tYW5kIE5hbWUnLCBjb21tYW5kT2JqLm5hbWUpO1xuICAgICAgaWYgKGNvbW1hbmQgPT0gY29tbWFuZE9iai5uYW1lKSB7XG4gICAgICAgIG9wQ29kZSA9IHBhcnNlSW50KGNvbW1hbmRPYmoub3BDb2RlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vY29uc29sZS5sb2coJyMjIyMjIyMjIyMjICAgICAgJCQkJCQkJCQkJCQkICAgICBPcCBDb2RlICcsIG9wQ29kZSk7XG4gICAgaWYgKHJhd0RhdGFPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy9jb25zb2xlLmxvZygnY3JlYXRlIENvbW1hbmQgRGF0YSwgUmF3IERhdGEgT2JqZWN0IGlzIHByZXNlbnQuJyk7XG4gICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhjb21hbmRCdWZmZXIpO1xuICAgICAgcmF3RGF0YU9iai5mb3JFYWNoKChyYXcpID0+IHtcbiAgICAgICAgdGhpcy5kcHMud3JpdGVWYWx1ZVRvQnVmZmVyKHJhdy5idWZmZXIsIHJhdy52YWx1ZSwgZGF0YVZpZXcpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGNvbW1hbmREYXRhID0ge1xuICAgICAgb3BDb2RlOiBvcENvZGUsXG4gICAgICBzZXJ2aWNlOiBjdXJyZW50RGV2aWNlLndyaXRlLnNlcnZpY2UsXG4gICAgICBjaGFyYWN0ZXJpc3RpYzogY3VycmVudERldmljZS53cml0ZS5jaGFyYWN0ZXJpc3RpYyxcbiAgICAgIGJ5dGVEYXRhOiBuZXcgVWludDhBcnJheShjb21hbmRCdWZmZXIpLFxuICAgIH07XG4gICAgY29tbWFuZERhdGEuYnl0ZURhdGFbMF0gPSBjb21tYW5kRGF0YS5vcENvZGU7XG5cbiAgICBjb21tYW5kRGF0YSA9IGF3YWl0IHRoaXMuY3JjU2VydmljZS53cml0ZUNyY1RvQ29tbWFuZChjb21tYW5kRGF0YSk7XG5cbiAgICByZXR1cm4gY29tbWFuZERhdGE7XG4gIH1cblxuICBhc3luYyBjcmVhdGVDb21tYW5kRGF0YUZvckFwaShcbiAgICBjdXJyZW50RGV2aWNlOiBJRGV2aWNlLFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICByYXdEYXRhT2JqPzogSVJhd0RhdGFPYmpbXVxuICApOiBQcm9taXNlPElDb21tYW5kRGF0YUFwaT4ge1xuICAgIGxldCByYXcgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHJhd0RhdGFPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmF3ID0gcmF3RGF0YU9iajtcbiAgICB9XG4gICAgY29uc3QgY29tbWFuZEJ0ID0gdGhpcy5jcmVhdGVDb21tYW5kRGF0YShjdXJyZW50RGV2aWNlLCBjb21tYW5kLCByYXcpO1xuICAgIGNvbnN0IHNlbmQgPSB7XG4gICAgICBzZXJpYWxOdW1iZXI6IGN1cnJlbnREZXZpY2Uuc2VyaWFsLnRvU3RyaW5nKCksXG4gICAgICBkYXRhOiB0aGlzLmRwcy51aW50OEFycmF5VG9BcnJheSgoYXdhaXQgY29tbWFuZEJ0KS5ieXRlRGF0YSksXG4gICAgfTtcbiAgICAvL2NvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHNlbmQpKTtcbiAgICByZXR1cm4gc2VuZDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CrcCheckService {
|
|
4
|
+
constructor() {
|
|
5
|
+
// checksum arrays
|
|
6
|
+
this.auchCRCHi = [
|
|
7
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41,
|
|
8
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, 0x40,
|
|
9
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41,
|
|
10
|
+
0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41,
|
|
11
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41,
|
|
12
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, 0x40,
|
|
13
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, 0x40,
|
|
14
|
+
0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, 0x40,
|
|
15
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41,
|
|
16
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, 0x40,
|
|
17
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41,
|
|
18
|
+
0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41,
|
|
19
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41,
|
|
20
|
+
0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41,
|
|
21
|
+
0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41,
|
|
22
|
+
0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41,
|
|
23
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41,
|
|
24
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, 0x40,
|
|
25
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41,
|
|
26
|
+
0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41,
|
|
27
|
+
0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41,
|
|
28
|
+
0x00, 0xc1, 0x81, 0x40,
|
|
29
|
+
];
|
|
30
|
+
this.auchCRCLo = [
|
|
31
|
+
0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, 0xc2, 0xc6, 0x06, 0x07, 0xc7,
|
|
32
|
+
0x05, 0xc5, 0xc4, 0x04, 0xcc, 0x0c, 0x0d, 0xcd, 0x0f, 0xcf, 0xce, 0x0e,
|
|
33
|
+
0x0a, 0xca, 0xcb, 0x0b, 0xc9, 0x09, 0x08, 0xc8, 0xd8, 0x18, 0x19, 0xd9,
|
|
34
|
+
0x1b, 0xdb, 0xda, 0x1a, 0x1e, 0xde, 0xdf, 0x1f, 0xdd, 0x1d, 0x1c, 0xdc,
|
|
35
|
+
0x14, 0xd4, 0xd5, 0x15, 0xd7, 0x17, 0x16, 0xd6, 0xd2, 0x12, 0x13, 0xd3,
|
|
36
|
+
0x11, 0xd1, 0xd0, 0x10, 0xf0, 0x30, 0x31, 0xf1, 0x33, 0xf3, 0xf2, 0x32,
|
|
37
|
+
0x36, 0xf6, 0xf7, 0x37, 0xf5, 0x35, 0x34, 0xf4, 0x3c, 0xfc, 0xfd, 0x3d,
|
|
38
|
+
0xff, 0x3f, 0x3e, 0xfe, 0xfa, 0x3a, 0x3b, 0xfb, 0x39, 0xf9, 0xf8, 0x38,
|
|
39
|
+
0x28, 0xe8, 0xe9, 0x29, 0xeb, 0x2b, 0x2a, 0xea, 0xee, 0x2e, 0x2f, 0xef,
|
|
40
|
+
0x2d, 0xed, 0xec, 0x2c, 0xe4, 0x24, 0x25, 0xe5, 0x27, 0xe7, 0xe6, 0x26,
|
|
41
|
+
0x22, 0xe2, 0xe3, 0x23, 0xe1, 0x21, 0x20, 0xe0, 0xa0, 0x60, 0x61, 0xa1,
|
|
42
|
+
0x63, 0xa3, 0xa2, 0x62, 0x66, 0xa6, 0xa7, 0x67, 0xa5, 0x65, 0x64, 0xa4,
|
|
43
|
+
0x6c, 0xac, 0xad, 0x6d, 0xaf, 0x6f, 0x6e, 0xae, 0xaa, 0x6a, 0x6b, 0xab,
|
|
44
|
+
0x69, 0xa9, 0xa8, 0x68, 0x78, 0xb8, 0xb9, 0x79, 0xbb, 0x7b, 0x7a, 0xba,
|
|
45
|
+
0xbe, 0x7e, 0x7f, 0xbf, 0x7d, 0xbd, 0xbc, 0x7c, 0xb4, 0x74, 0x75, 0xb5,
|
|
46
|
+
0x77, 0xb7, 0xb6, 0x76, 0x72, 0xb2, 0xb3, 0x73, 0xb1, 0x71, 0x70, 0xb0,
|
|
47
|
+
0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97,
|
|
48
|
+
0x55, 0x95, 0x94, 0x54, 0x9c, 0x5c, 0x5d, 0x9d, 0x5f, 0x9f, 0x9e, 0x5e,
|
|
49
|
+
0x5a, 0x9a, 0x9b, 0x5b, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89,
|
|
50
|
+
0x4b, 0x8b, 0x8a, 0x4a, 0x4e, 0x8e, 0x8f, 0x4f, 0x8d, 0x4d, 0x4c, 0x8c,
|
|
51
|
+
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,
|
|
52
|
+
0x41, 0x81, 0x80, 0x40,
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
//constructor() {}
|
|
56
|
+
_buildCRC(puchMsg, usDataLen, startIndex = 0) {
|
|
57
|
+
console.log('Start of CRC check generation.');
|
|
58
|
+
let uchCRCHi = 0xff; /* high byte of CRC initialized */
|
|
59
|
+
let uchCRCLo = 0xff; /* low byte of CRC initialized */
|
|
60
|
+
let uIndex; /* will index into CRC lookup table */
|
|
61
|
+
let bufferIndex = startIndex;
|
|
62
|
+
while (usDataLen--) {
|
|
63
|
+
uIndex = uchCRCLo ^ puchMsg[bufferIndex]; /* calculate the CRC */
|
|
64
|
+
bufferIndex++;
|
|
65
|
+
uchCRCLo = uchCRCHi ^ this.auchCRCHi[uIndex];
|
|
66
|
+
uchCRCHi = this.auchCRCLo[uIndex];
|
|
67
|
+
}
|
|
68
|
+
return [uchCRCHi, uchCRCLo];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
*
|
|
72
|
+
* @param sentValuePair
|
|
73
|
+
* @param receivedValuePair
|
|
74
|
+
* @returns
|
|
75
|
+
*/
|
|
76
|
+
saveCheck(sentValuePair, receivedValuePair) {
|
|
77
|
+
console.log('CRC save check sent ', sentValuePair, ' recieved ', receivedValuePair);
|
|
78
|
+
if (sentValuePair[0] === receivedValuePair[0] &&
|
|
79
|
+
sentValuePair[1] === receivedValuePair[1]) {
|
|
80
|
+
console.log('CRC compare check TRUE');
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
console.log('CRC compare check FALSE');
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async writeCrcToCommand(commandData) {
|
|
89
|
+
console.log('WRITE CRC TO COMMAND TRIGGERED ');
|
|
90
|
+
const checkSum = this._buildCRC(commandData.byteData, commandData.byteData.length - 2);
|
|
91
|
+
console.log('###### ####### CRC16 values ', checkSum);
|
|
92
|
+
commandData.byteData[253] = checkSum[0];
|
|
93
|
+
commandData.byteData[254] = checkSum[1];
|
|
94
|
+
return commandData;
|
|
95
|
+
}
|
|
96
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CrcCheckService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
97
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CrcCheckService, providedIn: 'root' }); }
|
|
98
|
+
}
|
|
99
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CrcCheckService, decorators: [{
|
|
100
|
+
type: Injectable,
|
|
101
|
+
args: [{
|
|
102
|
+
providedIn: 'root',
|
|
103
|
+
}]
|
|
104
|
+
}] });
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JjLWNoZWNrLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXZpY2UtY29uZmlnLWludGVyYWN0aW9uL3NyYy9saWIvY3JjLWNoZWNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLGVBQWU7SUFINUI7UUFJRSxrQkFBa0I7UUFDbEIsY0FBUyxHQUFHO1lBQ1YsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtTQUN2QixDQUFDO1FBQ0YsY0FBUyxHQUFHO1lBQ1YsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQ3RFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUN0RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDdEUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtTQUN2QixDQUFDO0tBb0VIO0lBbEVDLGtCQUFrQjtJQUVsQixTQUFTLENBQ1AsT0FBbUIsRUFDbkIsU0FBaUIsRUFDakIsVUFBVSxHQUFHLENBQUM7UUFFZCxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsa0NBQWtDO1FBQ3ZELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLGlDQUFpQztRQUN0RCxJQUFJLE1BQU0sQ0FBQyxDQUFDLHNDQUFzQztRQUNsRCxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFFN0IsT0FBTyxTQUFTLEVBQUUsRUFBRTtZQUNsQixNQUFNLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtZQUVqRSxXQUFXLEVBQUUsQ0FBQztZQUNkLFFBQVEsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQztRQUVELE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUNQLGFBQStCLEVBQy9CLGlCQUFtQztRQUVuQyxPQUFPLENBQUMsR0FBRyxDQUNULHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsWUFBWSxFQUNaLGlCQUFpQixDQUNsQixDQUFDO1FBQ0YsSUFDRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFDekM7WUFDQSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNO1lBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQXlCO1FBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUM3QixXQUFXLENBQUMsUUFBUSxFQUNwQixXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ2hDLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXpELFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhDLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7K0dBcEhVLGVBQWU7bUhBQWYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUNvbW1hbmREYXRhIH0gZnJvbSAnLi4vcHVibGljLWFwaSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDcmNDaGVja1NlcnZpY2Uge1xuICAvLyBjaGVja3N1bSBhcnJheXNcbiAgYXVjaENSQ0hpID0gW1xuICAgIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsXG4gICAgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCxcbiAgICAweDAwLCAweGMxLCAweDgxLCAweDQwLCAweDAxLCAweGMwLCAweDgwLCAweDQxLCAweDAxLCAweGMwLCAweDgwLCAweDQxLFxuICAgIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsXG4gICAgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSxcbiAgICAweDAwLCAweGMxLCAweDgxLCAweDQwLCAweDAxLCAweGMwLCAweDgwLCAweDQxLCAweDAwLCAweGMxLCAweDgxLCAweDQwLFxuICAgIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsXG4gICAgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCxcbiAgICAweDAwLCAweGMxLCAweDgxLCAweDQwLCAweDAxLCAweGMwLCAweDgwLCAweDQxLCAweDAxLCAweGMwLCAweDgwLCAweDQxLFxuICAgIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsXG4gICAgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSxcbiAgICAweDAwLCAweGMxLCAweDgxLCAweDQwLCAweDAwLCAweGMxLCAweDgxLCAweDQwLCAweDAxLCAweGMwLCAweDgwLCAweDQxLFxuICAgIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsXG4gICAgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCwgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSxcbiAgICAweDAxLCAweGMwLCAweDgwLCAweDQxLCAweDAwLCAweGMxLCAweDgxLCAweDQwLCAweDAxLCAweGMwLCAweDgwLCAweDQxLFxuICAgIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsXG4gICAgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSxcbiAgICAweDAwLCAweGMxLCAweDgxLCAweDQwLCAweDAxLCAweGMwLCAweDgwLCAweDQxLCAweDAwLCAweGMxLCAweDgxLCAweDQwLFxuICAgIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsIDB4MDEsIDB4YzAsIDB4ODAsIDB4NDEsXG4gICAgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCwgMHgwMCwgMHhjMSwgMHg4MSwgMHg0MCwgMHgwMSwgMHhjMCwgMHg4MCwgMHg0MSxcbiAgICAweDAwLCAweGMxLCAweDgxLCAweDQwLCAweDAxLCAweGMwLCAweDgwLCAweDQxLCAweDAxLCAweGMwLCAweDgwLCAweDQxLFxuICAgIDB4MDAsIDB4YzEsIDB4ODEsIDB4NDAsXG4gIF07XG4gIGF1Y2hDUkNMbyA9IFtcbiAgICAweDAwLCAweGMwLCAweGMxLCAweDAxLCAweGMzLCAweDAzLCAweDAyLCAweGMyLCAweGM2LCAweDA2LCAweDA3LCAweGM3LFxuICAgIDB4MDUsIDB4YzUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4MGMsIDB4MGQsIDB4Y2QsIDB4MGYsIDB4Y2YsIDB4Y2UsIDB4MGUsXG4gICAgMHgwYSwgMHhjYSwgMHhjYiwgMHgwYiwgMHhjOSwgMHgwOSwgMHgwOCwgMHhjOCwgMHhkOCwgMHgxOCwgMHgxOSwgMHhkOSxcbiAgICAweDFiLCAweGRiLCAweGRhLCAweDFhLCAweDFlLCAweGRlLCAweGRmLCAweDFmLCAweGRkLCAweDFkLCAweDFjLCAweGRjLFxuICAgIDB4MTQsIDB4ZDQsIDB4ZDUsIDB4MTUsIDB4ZDcsIDB4MTcsIDB4MTYsIDB4ZDYsIDB4ZDIsIDB4MTIsIDB4MTMsIDB4ZDMsXG4gICAgMHgxMSwgMHhkMSwgMHhkMCwgMHgxMCwgMHhmMCwgMHgzMCwgMHgzMSwgMHhmMSwgMHgzMywgMHhmMywgMHhmMiwgMHgzMixcbiAgICAweDM2LCAweGY2LCAweGY3LCAweDM3LCAweGY1LCAweDM1LCAweDM0LCAweGY0LCAweDNjLCAweGZjLCAweGZkLCAweDNkLFxuICAgIDB4ZmYsIDB4M2YsIDB4M2UsIDB4ZmUsIDB4ZmEsIDB4M2EsIDB4M2IsIDB4ZmIsIDB4MzksIDB4ZjksIDB4ZjgsIDB4MzgsXG4gICAgMHgyOCwgMHhlOCwgMHhlOSwgMHgyOSwgMHhlYiwgMHgyYiwgMHgyYSwgMHhlYSwgMHhlZSwgMHgyZSwgMHgyZiwgMHhlZixcbiAgICAweDJkLCAweGVkLCAweGVjLCAweDJjLCAweGU0LCAweDI0LCAweDI1LCAweGU1LCAweDI3LCAweGU3LCAweGU2LCAweDI2LFxuICAgIDB4MjIsIDB4ZTIsIDB4ZTMsIDB4MjMsIDB4ZTEsIDB4MjEsIDB4MjAsIDB4ZTAsIDB4YTAsIDB4NjAsIDB4NjEsIDB4YTEsXG4gICAgMHg2MywgMHhhMywgMHhhMiwgMHg2MiwgMHg2NiwgMHhhNiwgMHhhNywgMHg2NywgMHhhNSwgMHg2NSwgMHg2NCwgMHhhNCxcbiAgICAweDZjLCAweGFjLCAweGFkLCAweDZkLCAweGFmLCAweDZmLCAweDZlLCAweGFlLCAweGFhLCAweDZhLCAweDZiLCAweGFiLFxuICAgIDB4NjksIDB4YTksIDB4YTgsIDB4NjgsIDB4NzgsIDB4YjgsIDB4YjksIDB4NzksIDB4YmIsIDB4N2IsIDB4N2EsIDB4YmEsXG4gICAgMHhiZSwgMHg3ZSwgMHg3ZiwgMHhiZiwgMHg3ZCwgMHhiZCwgMHhiYywgMHg3YywgMHhiNCwgMHg3NCwgMHg3NSwgMHhiNSxcbiAgICAweDc3LCAweGI3LCAweGI2LCAweDc2LCAweDcyLCAweGIyLCAweGIzLCAweDczLCAweGIxLCAweDcxLCAweDcwLCAweGIwLFxuICAgIDB4NTAsIDB4OTAsIDB4OTEsIDB4NTEsIDB4OTMsIDB4NTMsIDB4NTIsIDB4OTIsIDB4OTYsIDB4NTYsIDB4NTcsIDB4OTcsXG4gICAgMHg1NSwgMHg5NSwgMHg5NCwgMHg1NCwgMHg5YywgMHg1YywgMHg1ZCwgMHg5ZCwgMHg1ZiwgMHg5ZiwgMHg5ZSwgMHg1ZSxcbiAgICAweDVhLCAweDlhLCAweDliLCAweDViLCAweDk5LCAweDU5LCAweDU4LCAweDk4LCAweDg4LCAweDQ4LCAweDQ5LCAweDg5LFxuICAgIDB4NGIsIDB4OGIsIDB4OGEsIDB4NGEsIDB4NGUsIDB4OGUsIDB4OGYsIDB4NGYsIDB4OGQsIDB4NGQsIDB4NGMsIDB4OGMsXG4gICAgMHg0NCwgMHg4NCwgMHg4NSwgMHg0NSwgMHg4NywgMHg0NywgMHg0NiwgMHg4NiwgMHg4MiwgMHg0MiwgMHg0MywgMHg4MyxcbiAgICAweDQxLCAweDgxLCAweDgwLCAweDQwLFxuICBdO1xuXG4gIC8vY29uc3RydWN0b3IoKSB7fVxuXG4gIF9idWlsZENSQyhcbiAgICBwdWNoTXNnOiBVaW50OEFycmF5LFxuICAgIHVzRGF0YUxlbjogbnVtYmVyLFxuICAgIHN0YXJ0SW5kZXggPSAwXG4gICk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIGNvbnNvbGUubG9nKCdTdGFydCBvZiBDUkMgY2hlY2sgZ2VuZXJhdGlvbi4nKTtcbiAgICBsZXQgdWNoQ1JDSGkgPSAweGZmOyAvKiBoaWdoIGJ5dGUgb2YgQ1JDIGluaXRpYWxpemVkICovXG4gICAgbGV0IHVjaENSQ0xvID0gMHhmZjsgLyogbG93IGJ5dGUgb2YgQ1JDIGluaXRpYWxpemVkICovXG4gICAgbGV0IHVJbmRleDsgLyogd2lsbCBpbmRleCBpbnRvIENSQyBsb29rdXAgdGFibGUgKi9cbiAgICBsZXQgYnVmZmVySW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHVzRGF0YUxlbi0tKSB7XG4gICAgICB1SW5kZXggPSB1Y2hDUkNMbyBeIHB1Y2hNc2dbYnVmZmVySW5kZXhdOyAvKiBjYWxjdWxhdGUgdGhlIENSQyAqL1xuXG4gICAgICBidWZmZXJJbmRleCsrO1xuICAgICAgdWNoQ1JDTG8gPSB1Y2hDUkNIaSBeIHRoaXMuYXVjaENSQ0hpW3VJbmRleF07XG4gICAgICB1Y2hDUkNIaSA9IHRoaXMuYXVjaENSQ0xvW3VJbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIFt1Y2hDUkNIaSwgdWNoQ1JDTG9dO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBzZW50VmFsdWVQYWlyXG4gICAqIEBwYXJhbSByZWNlaXZlZFZhbHVlUGFpclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc2F2ZUNoZWNrKFxuICAgIHNlbnRWYWx1ZVBhaXI6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgcmVjZWl2ZWRWYWx1ZVBhaXI6IFtudW1iZXIsIG51bWJlcl1cbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnQ1JDIHNhdmUgY2hlY2sgc2VudCAnLFxuICAgICAgc2VudFZhbHVlUGFpcixcbiAgICAgICcgcmVjaWV2ZWQgJyxcbiAgICAgIHJlY2VpdmVkVmFsdWVQYWlyXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICBzZW50VmFsdWVQYWlyWzBdID09PSByZWNlaXZlZFZhbHVlUGFpclswXSAmJlxuICAgICAgc2VudFZhbHVlUGFpclsxXSA9PT0gcmVjZWl2ZWRWYWx1ZVBhaXJbMV1cbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdDUkMgY29tcGFyZSBjaGVjayBUUlVFJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ0NSQyBjb21wYXJlIGNoZWNrIEZBTFNFJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVDcmNUb0NvbW1hbmQoY29tbWFuZERhdGE6IElDb21tYW5kRGF0YSkge1xuICAgIGNvbnNvbGUubG9nKCdXUklURSBDUkMgVE8gQ09NTUFORCBUUklHR0VSRUQgJyk7XG4gICAgY29uc3QgY2hlY2tTdW0gPSB0aGlzLl9idWlsZENSQyhcbiAgICAgIGNvbW1hbmREYXRhLmJ5dGVEYXRhLFxuICAgICAgY29tbWFuZERhdGEuYnl0ZURhdGEubGVuZ3RoIC0gMlxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZygnIyMjIyMjICMjIyMjIyMgICAgQ1JDMTYgdmFsdWVzICcsIGNoZWNrU3VtKTtcblxuICAgIGNvbW1hbmREYXRhLmJ5dGVEYXRhWzI1M10gPSBjaGVja1N1bVswXTtcbiAgICBjb21tYW5kRGF0YS5ieXRlRGF0YVsyNTRdID0gY2hlY2tTdW1bMV07XG5cbiAgICByZXR1cm4gY29tbWFuZERhdGE7XG4gIH1cbn1cbiJdfQ==
|