@rosen-bridge/abstract-scanner 1.0.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/scanner/abstract/generalScanner.d.ts +20 -5
- package/dist/scanner/abstract/generalScanner.d.ts.map +1 -1
- package/dist/scanner/abstract/generalScanner.js +55 -24
- package/dist/scanner/interfaces.d.ts +1 -0
- package/dist/scanner/interfaces.d.ts.map +1 -1
- package/dist/scanner/interfaces.js +1 -1
- package/dist/scanner/network/networkConnectorManager.d.ts +2 -1
- package/dist/scanner/network/networkConnectorManager.d.ts.map +1 -1
- package/dist/scanner/network/networkConnectorManager.js +4 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @rosen-bridge/abstract-scanner
|
|
2
2
|
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- Update `GeneralScanner` and `NetworkConnectorManager` to reflect major update of `@rosen-bridge/scanner-interfaces` (Add a `height` argument to `AbstractNetworkConnector.getBlockTxs`)
|
|
8
|
+
|
|
9
|
+
### Minor Changes
|
|
10
|
+
|
|
11
|
+
- Add fast-forward feature to `GeneralScanner` and `heightGap` parameter into scanners config
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Update dependencies
|
|
16
|
+
- @rosen-bridge/abstract-extractor@3.2.0
|
|
17
|
+
- @rosen-bridge/scanner-interfaces@1.0.0
|
|
18
|
+
|
|
3
19
|
## 1.0.4
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
|
@@ -9,10 +9,11 @@ declare abstract class GeneralScanner<TransactionType> extends AbstractScanner<T
|
|
|
9
9
|
private network;
|
|
10
10
|
private blockRetrieveGap;
|
|
11
11
|
private suffix?;
|
|
12
|
+
private heightGap;
|
|
12
13
|
private readonly initialHeight;
|
|
13
14
|
protected blockChainLastHeight: number | undefined;
|
|
14
15
|
name: () => string;
|
|
15
|
-
constructor(scannerName: string, dataSource: DataSource, initialHeight: number, network: AbstractNetworkConnector<TransactionType>, blockRetrieveGap?: number, logger?: AbstractLogger, suffix?: string | undefined);
|
|
16
|
+
constructor(scannerName: string, dataSource: DataSource, initialHeight: number, network: AbstractNetworkConnector<TransactionType>, blockRetrieveGap?: number, logger?: AbstractLogger, suffix?: string | undefined, heightGap?: number);
|
|
16
17
|
/**
|
|
17
18
|
* Get the first block to process
|
|
18
19
|
* @returns The first block at the configured initial height
|
|
@@ -24,7 +25,8 @@ declare abstract class GeneralScanner<TransactionType> extends AbstractScanner<T
|
|
|
24
25
|
*/
|
|
25
26
|
protected isForkHappen: () => Promise<boolean>;
|
|
26
27
|
/**
|
|
27
|
-
* This method introduces delay between consecutive block processing
|
|
28
|
+
* This method introduces delay between consecutive block processing
|
|
29
|
+
* operations
|
|
28
30
|
*/
|
|
29
31
|
protected delayBetweenBlocksProcessing: (startTime: number) => Promise<void>;
|
|
30
32
|
/**
|
|
@@ -33,7 +35,8 @@ declare abstract class GeneralScanner<TransactionType> extends AbstractScanner<T
|
|
|
33
35
|
*/
|
|
34
36
|
protected processBlock: (block: Block) => Promise<false | BlockEntity>;
|
|
35
37
|
/**
|
|
36
|
-
* process forward in scanner. get blocks and store information from
|
|
38
|
+
* process forward in scanner. get blocks and store information from
|
|
39
|
+
* transactions.
|
|
37
40
|
* @param lastSavedBlock: last saved block entity in database
|
|
38
41
|
*/
|
|
39
42
|
protected stepForward: (lastSavedBlock: BlockEntity) => Promise<void>;
|
|
@@ -54,8 +57,20 @@ declare abstract class GeneralScanner<TransactionType> extends AbstractScanner<T
|
|
|
54
57
|
*/
|
|
55
58
|
getBlockChainLastHeight: () => number | undefined;
|
|
56
59
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
60
|
+
* Checks if any registered extractor detects an event
|
|
61
|
+
* within the given block height range.
|
|
62
|
+
*
|
|
63
|
+
* @param {number} fromHeight - The starting block height to check.
|
|
64
|
+
* @param {number} toHeight - The ending block height to check.
|
|
65
|
+
* @returns {Promise<boolean>} True if at least one event is found,
|
|
66
|
+
* false otherwise.
|
|
67
|
+
*/
|
|
68
|
+
protected checkExtractorsForEvents: (fromHeight: number, toHeight: number) => Promise<boolean>;
|
|
69
|
+
/**
|
|
70
|
+
* worker function that synchronizes the database with the blockchain.
|
|
71
|
+
* It handles scanner initialization, fork resolution,
|
|
72
|
+
* step-by-step block processing,
|
|
73
|
+
* and fast-forwarding when no events are detected.
|
|
59
74
|
*/
|
|
60
75
|
update: () => Promise<void>;
|
|
61
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generalScanner.d.ts","sourceRoot":"","sources":["../../../lib/scanner/abstract/generalScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,uBAAe,cAAc,CAC3B,eAAe,CACf,SAAQ,eAAe,CAAC,eAAe,CAAC;IAOtC,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAElB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,gBAAgB;IAExB,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"generalScanner.d.ts","sourceRoot":"","sources":["../../../lib/scanner/abstract/generalScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,uBAAe,cAAc,CAC3B,eAAe,CACf,SAAQ,eAAe,CAAC,eAAe,CAAC;IAOtC,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAElB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,gBAAgB;IAExB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,SAAS;IAbnB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,SAAS,CAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAa;IAE/D,IAAI,eAAmE;gBAG7D,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EAC9B,aAAa,EAAE,MAAM,EACb,OAAO,EAAE,wBAAwB,CAAC,eAAe,CAAC,EAClD,gBAAgB,SAAI,EAC5B,MAAM,CAAC,EAAE,cAAc,EACf,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,SAAS,SAAI;IAgBvB;;;OAGG;IACH,SAAS,CAAC,aAAa,QAAO,OAAO,CAAC,KAAK,CAAC,CAE1C;IAEF;;;OAGG;IACH,SAAS,CAAC,YAAY,QAAa,OAAO,CAAC,OAAO,CAAC,CAUjD;IAEF;;;OAGG;IACH,SAAS,CAAC,4BAA4B,GAAU,WAAW,MAAM,mBAK/D;IAEF;;;OAGG;IACH,SAAS,CAAC,YAAY,GAAU,OAAO,KAAK,kCA0B1C;IAEF;;;;OAIG;IACH,SAAS,CAAC,WAAW,GAAU,gBAAgB,WAAW,mBAyCxD;IAEF;;;OAGG;IACH,SAAS,CAAC,YAAY,sBAepB;IAEF;;;;OAIG;IACH,SAAS,CAAC,UAAU,6BAYlB;IAEF;;;OAGG;IACI,uBAAuB,QAAO,MAAM,GAAG,SAAS,CAC3B;IAE5B;;;;;;;;OAQG;IACH,SAAS,CAAC,wBAAwB,GAChC,YAAY,MAAM,EAClB,UAAU,MAAM,KACf,OAAO,CAAC,OAAO,CAAC,CASjB;IAEF;;;;;OAKG;IACH,MAAM,sBAwBJ;CACH;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -7,16 +7,18 @@ class GeneralScanner extends AbstractScanner {
|
|
|
7
7
|
network;
|
|
8
8
|
blockRetrieveGap;
|
|
9
9
|
suffix;
|
|
10
|
+
heightGap;
|
|
10
11
|
initialHeight;
|
|
11
12
|
blockChainLastHeight = undefined;
|
|
12
13
|
name = () => this.scannerName + (this.suffix ? `-${this.suffix}` : '');
|
|
13
|
-
constructor(scannerName, dataSource, initialHeight, network, blockRetrieveGap = 0, logger, suffix) {
|
|
14
|
+
constructor(scannerName, dataSource, initialHeight, network, blockRetrieveGap = 0, logger, suffix, heightGap = 1) {
|
|
14
15
|
super(logger);
|
|
15
16
|
this.scannerName = scannerName;
|
|
16
17
|
this.dataSource = dataSource;
|
|
17
18
|
this.network = network;
|
|
18
19
|
this.blockRetrieveGap = blockRetrieveGap;
|
|
19
20
|
this.suffix = suffix;
|
|
21
|
+
this.heightGap = heightGap;
|
|
20
22
|
/**
|
|
21
23
|
* In order to keep the scanners functionalities consistent, we add config
|
|
22
24
|
* `initialHeight` by one so that it matches how other scanners work.
|
|
@@ -47,7 +49,8 @@ class GeneralScanner extends AbstractScanner {
|
|
|
47
49
|
}
|
|
48
50
|
};
|
|
49
51
|
/**
|
|
50
|
-
* This method introduces delay between consecutive block processing
|
|
52
|
+
* This method introduces delay between consecutive block processing
|
|
53
|
+
* operations
|
|
51
54
|
*/
|
|
52
55
|
delayBetweenBlocksProcessing = async (startTime) => {
|
|
53
56
|
const spentTime = new Date().getTime() - startTime;
|
|
@@ -60,10 +63,11 @@ class GeneralScanner extends AbstractScanner {
|
|
|
60
63
|
processBlock = async (block) => {
|
|
61
64
|
const startTime = new Date().getTime();
|
|
62
65
|
this.logger.debug(`Processing block at height [${block.height}] in scanner ${this.name()}`);
|
|
63
|
-
const txs = await this.network.getBlockTxs(block.hash);
|
|
66
|
+
const txs = await this.network.getBlockTxs(block.hash, block.height);
|
|
64
67
|
if (block.txCount) {
|
|
65
68
|
if (txs.length != block.txCount) {
|
|
66
|
-
this.logger.debug(`Aborting block process with hash [${block.hash}] expected to have
|
|
69
|
+
this.logger.debug(`Aborting block process with hash [${block.hash}] expected to have
|
|
70
|
+
${block.txCount} transactions but had ${txs.length}`);
|
|
67
71
|
return false;
|
|
68
72
|
}
|
|
69
73
|
this.logger.debug(`processing ${block.txCount} transactions of block with hash [${block.hash}]`);
|
|
@@ -75,7 +79,8 @@ class GeneralScanner extends AbstractScanner {
|
|
|
75
79
|
return result;
|
|
76
80
|
};
|
|
77
81
|
/**
|
|
78
|
-
* process forward in scanner. get blocks and store information from
|
|
82
|
+
* process forward in scanner. get blocks and store information from
|
|
83
|
+
* transactions.
|
|
79
84
|
* @param lastSavedBlock: last saved block entity in database
|
|
80
85
|
*/
|
|
81
86
|
stepForward = async (lastSavedBlock) => {
|
|
@@ -84,22 +89,29 @@ class GeneralScanner extends AbstractScanner {
|
|
|
84
89
|
if (!firstBlock || firstBlock.height >= currentHeight) {
|
|
85
90
|
return;
|
|
86
91
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
92
|
+
let stopHeight = lastSavedBlock.height;
|
|
93
|
+
let step = this.heightGap;
|
|
94
|
+
for (let height = lastSavedBlock.height; height < currentHeight; height += step) {
|
|
95
|
+
if (step > 1 &&
|
|
96
|
+
(await this.checkExtractorsForEvents(height, height + this.heightGap))) {
|
|
97
|
+
step = 1;
|
|
98
|
+
stopHeight = height + this.heightGap;
|
|
99
|
+
}
|
|
100
|
+
const block = await this.network.getBlockAtHeight(height + step);
|
|
101
|
+
if (block.parentHash != lastSavedBlock.hash && step === 1) {
|
|
102
|
+
this.logger.debug(`Invalid block at height ${lastSavedBlock.height + 1}. Block info
|
|
103
|
+
is [${JsonBI.stringify(block)} and the expected parent hash is [${lastSavedBlock.hash}]`);
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
const savedBlock = await this.processBlock(block);
|
|
107
|
+
if (typeof savedBlock === 'boolean') {
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
lastSavedBlock = savedBlock;
|
|
112
|
+
}
|
|
113
|
+
if (height + step == stopHeight) {
|
|
114
|
+
step = this.heightGap;
|
|
103
115
|
}
|
|
104
116
|
}
|
|
105
117
|
};
|
|
@@ -143,8 +155,27 @@ class GeneralScanner extends AbstractScanner {
|
|
|
143
155
|
*/
|
|
144
156
|
getBlockChainLastHeight = () => this.blockChainLastHeight;
|
|
145
157
|
/**
|
|
146
|
-
*
|
|
147
|
-
*
|
|
158
|
+
* Checks if any registered extractor detects an event
|
|
159
|
+
* within the given block height range.
|
|
160
|
+
*
|
|
161
|
+
* @param {number} fromHeight - The starting block height to check.
|
|
162
|
+
* @param {number} toHeight - The ending block height to check.
|
|
163
|
+
* @returns {Promise<boolean>} True if at least one event is found,
|
|
164
|
+
* false otherwise.
|
|
165
|
+
*/
|
|
166
|
+
checkExtractorsForEvents = async (fromHeight, toHeight) => {
|
|
167
|
+
for (const extractor of this.extractors) {
|
|
168
|
+
const hasEvent = await extractor.hasEventInHeightRange(fromHeight, toHeight);
|
|
169
|
+
if (hasEvent)
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
};
|
|
174
|
+
/**
|
|
175
|
+
* worker function that synchronizes the database with the blockchain.
|
|
176
|
+
* It handles scanner initialization, fork resolution,
|
|
177
|
+
* step-by-step block processing,
|
|
178
|
+
* and fast-forwarding when no events are detected.
|
|
148
179
|
*/
|
|
149
180
|
update = async () => {
|
|
150
181
|
try {
|
|
@@ -174,4 +205,4 @@ class GeneralScanner extends AbstractScanner {
|
|
|
174
205
|
};
|
|
175
206
|
}
|
|
176
207
|
export { GeneralScanner };
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbFNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2Nhbm5lci9hYnN0cmFjdC9nZW5lcmFsU2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU0sTUFBTSwyQkFBMkIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsTUFBZSxjQUViLFNBQVEsZUFBZ0M7SUFPOUI7SUFDQTtJQUVBO0lBQ0E7SUFFQTtJQVpPLGFBQWEsQ0FBUztJQUM3QixvQkFBb0IsR0FBdUIsU0FBUyxDQUFDO0lBRS9ELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXZFLFlBQ1UsV0FBbUIsRUFDbkIsVUFBc0IsRUFDOUIsYUFBcUIsRUFDYixPQUFrRCxFQUNsRCxtQkFBbUIsQ0FBQyxFQUM1QixNQUF1QixFQUNmLE1BQWU7UUFFdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBUk4sZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUV0QixZQUFPLEdBQVAsT0FBTyxDQUEyQztRQUNsRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQUk7UUFFcEIsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUd2Qjs7O1dBR0c7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FDN0IsSUFBSSxDQUFDLFVB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dCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgSnNvbkJJIGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yLFxuICBCbG9jayxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBCbG9ja0VudGl0eSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL2Jsb2NrRW50aXR5JztcbmltcG9ydCB7IEJsb2NrRGJBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb24nO1xuaW1wb3J0IHsgQWJzdHJhY3RTY2FubmVyIH0gZnJvbSAnLi9zY2FubmVyJztcblxuYWJzdHJhY3QgY2xhc3MgR2VuZXJhbFNjYW5uZXI8XG4gIFRyYW5zYWN0aW9uVHlwZSxcbj4gZXh0ZW5kcyBBYnN0cmFjdFNjYW5uZXI8VHJhbnNhY3Rpb25UeXBlPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbEhlaWdodDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgYmxvY2tDaGFpbkxhc3RIZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBuYW1lID0gKCkgPT4gdGhpcy5zY2FubmVyTmFtZSArICh0aGlzLnN1ZmZpeCA/IGAtJHt0aGlzLnN1ZmZpeH1gIDogJycpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2Nhbm5lck5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsXG4gICAgaW5pdGlhbEhlaWdodDogbnVtYmVyLFxuICAgIHByaXZhdGUgbmV0d29yazogQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPFRyYW5zYWN0aW9uVHlwZT4sXG4gICAgcHJpdmF0ZSBibG9ja1JldHJpZXZlR2FwID0gMCxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgICBwcml2YXRlIHN1ZmZpeD86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIobG9nZ2VyKTtcbiAgICAvKipcbiAgICAgKiBJbiBvcmRlciB0byBrZWVwIHRoZSBzY2FubmVycyBmdW5jdGlvbmFsaXRpZXMgY29uc2lzdGVudCwgd2UgYWRkIGNvbmZpZ1xuICAgICAqIGBpbml0aWFsSGVpZ2h0YCBieSBvbmUgc28gdGhhdCBpdCBtYXRjaGVzIGhvdyBvdGhlciBzY2FubmVycyB3b3JrLlxuICAgICAqL1xuICAgIHRoaXMuaW5pdGlhbEhlaWdodCA9IGluaXRpYWxIZWlnaHQgKyAxO1xuICAgIHRoaXMuc3VmZml4ID0gc3VmZml4O1xuICAgIHRoaXMuYWN0aW9uID0gbmV3IEJsb2NrRGJBY3Rpb24oXG4gICAgICB0aGlzLmRhdGFTb3VyY2UsXG4gICAgICB0aGlzLm5hbWUoKSxcbiAgICAgIHRoaXMubG9nZ2VyLmNoaWxkKCdCbG9ja0RiQWN0aW9uJyksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpcnN0IGJsb2NrIHRvIHByb2Nlc3NcbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGJsb2NrIGF0IHRoZSBjb25maWd1cmVkIGluaXRpYWwgaGVpZ2h0XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RCbG9jayA9ICgpOiBQcm9taXNlPEJsb2NrPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubmV0d29yay5nZXRCbG9ja0F0SGVpZ2h0KHRoaXMuaW5pdGlhbEhlaWdodCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGZvcmsgaXMgaGFwcGVuIGluIHRoZSBibG9ja2NoYWluIG9yIG5vdFxuICAgKiBAcmV0dXJuIFByb21pc2U8Qm9vbGVhbj5cbiAgICovXG4gIHByb3RlY3RlZCBpc0ZvcmtIYXBwZW4gPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgbGFzdFNhdmVkQmxvY2sgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRMYXN0U2F2ZWRCbG9jaygpO1xuICAgIGlmIChsYXN0U2F2ZWRCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsYXN0U2F2ZWRCbG9ja0Zyb21OZXR3b3JrID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEJsb2NrQXRIZWlnaHQoXG4gICAgICAgIGxhc3RTYXZlZEJsb2NrLmhlaWdodCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbGFzdFNhdmVkQmxvY2tGcm9tTmV0d29yay5oYXNoICE9PSBsYXN0U2F2ZWRCbG9jay5oYXNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpbnRyb2R1Y2VzIGRlbGF5IGJldHdlZW4gY29uc2VjdXRpdmUgYmxvY2sgcHJvY2Vzc2luZyBvcGVyYXRpb25zXG4gICAqL1xuICBwcm90ZWN0ZWQgZGVsYXlCZXR3ZWVuQmxvY2tzUHJvY2Vzc2luZyA9IGFzeW5jIChzdGFydFRpbWU6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHNwZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnRUaW1lO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKG51bGwpLCB0aGlzLmJsb2NrUmV0cmlldmVHYXAgLSBzcGVudFRpbWUpLFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHByb2Nlc3MgYSBibG9jayBhbmQgZXhlY3V0ZSBhbGwgZXh0cmFjdG9yIG9uIGl0LlxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICovXG4gIHByb3RlY3RlZCBwcm9jZXNzQmxvY2sgPSBhc3luYyAoYmxvY2s6IEJsb2NrKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICBgUHJvY2Vzc2luZyBibG9jayBhdCBoZWlnaHQgWyR7YmxvY2suaGVpZ2h0fV0gaW4gc2Nhbm5lciAke3RoaXMubmFtZSgpfWAsXG4gICAgKTtcbiAgICBjb25zdCB0eHMgPSBhd2FpdCB0aGlzLm5ldHdvcmsuZ2V0QmxvY2tUeHMoYmxvY2suaGFzaCk7XG4gICAgaWYgKGJsb2NrLnR4Q291bnQpIHtcbiAgICAgIGlmICh0eHMubGVuZ3RoICE9IGJsb2NrLnR4Q291bnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEFib3J0aW5nIGJsb2NrIHByb2Nlc3Mgd2l0aCBoYXNoIFske2Jsb2NrLmhhc2h9XSBleHBlY3RlZCB0byBoYXZlICR7YmxvY2sudHhDb3VudH0gdHJhbnNhY3Rpb25zIGJ1dCBoYWQgJHt0eHMubGVuZ3RofWAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgcHJvY2Vzc2luZyAke2Jsb2NrLnR4Q291bnR9IHRyYW5zYWN0aW9ucyBvZiBibG9jayB3aXRoIGhhc2ggWyR7YmxvY2suaGFzaH1dYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzQmxvY2tUcmFuc2FjdGlvbnMoYmxvY2ssIHR4cyk7XG5cbiAgICAvLyBTcGVuZGluZyB0aW1lIGJldHdlZW4gYmxvY2sgZmV0Y2hlcyBpZiB0aGUgc2V0dGluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYmxvY2tSZXRyaWV2ZUdhcClcbiAgICAgIGF3YWl0IHRoaXMuZGVsYXlCZXR3ZWVuQmxvY2tzUHJvY2Vzc2luZyhzdGFydFRpbWUpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogcHJvY2VzcyBmb3J3YXJkIGluIHNjYW5uZXIuIGdldCBibG9ja3MgYW5kIHN0b3JlIGluZm9ybWF0aW9uIGZyb20gdHJhbnNhY3Rpb25zLlxuICAgKiBAcGFyYW0gbGFzdFNhdmVkQmxvY2s6IGxhc3Qgc2F2ZWQgYmxvY2sgZW50aXR5IGluIGRhdGFiYXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RlcEZvcndhcmQgPSBhc3luYyAobGFzdFNhdmVkQmxvY2s6IEJsb2NrRW50aXR5KSA9PiB7XG4gICAgY29uc3QgY3VycmVudEhlaWdodCA9IGF3YWl0IHRoaXMubmV0d29yay5nZXRDdXJyZW50SGVpZ2h0KCk7XG4gICAgY29uc3QgZmlyc3RCbG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldEZpcnN0U2F2ZWRCbG9jaygpO1xuICAgIGlmICghZmlyc3RCbG9jayB8fCBmaXJzdEJsb2NrLmhlaWdodCA+PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoXG4gICAgICBsZXQgaGVpZ2h0ID0gbGFzdFNhdmVkQmxvY2suaGVpZ2h0ICsgMTtcbiAgICAgIGhlaWdodCA8PSBjdXJyZW50SGVpZ2h0O1xuICAgICAgaGVpZ2h0KytcbiAgICApIHtcbiAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEJsb2NrQXRIZWlnaHQoaGVpZ2h0KTtcbiAgICAgIGlmIChsYXN0U2F2ZWRCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChibG9jay5wYXJlbnRIYXNoID09PSBsYXN0U2F2ZWRCbG9jay5oYXNoKSB7XG4gICAgICAgICAgY29uc3Qgc2F2ZWRCbG9jayA9IGF3YWl0IHRoaXMucHJvY2Vzc0Jsb2NrKGJsb2NrKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHNhdmVkQmxvY2sgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3RTYXZlZEJsb2NrID0gc2F2ZWRCbG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgSW52YWxpZCBibG9jayBhdCBoZWlnaHQgJHtoZWlnaHR9LiBCbG9jayBpbmZvIGlzIFske0pzb25CSS5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIGJsb2NrLFxuICAgICAgICAgICAgKX0gYW5kIHRoZSBleHBlY3RlZCBwYXJlbnQgaGFzaCBpcyBbJHtsYXN0U2F2ZWRCbG9jay5oYXNofV1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0ZXAgYmFja3dhcmQgaW4gYmxvY2tjaGFpbiBhbmQgZmluZCBmb3JrIHBvaW50LlxuICAgKiBhbmQgcmVtb3ZlIGFsbCBmb3JrZWQgYmxvY2tzIGZyb20gZGF0YWJhc2VcbiAgICovXG4gIHByb3RlY3RlZCBzdGVwQmFja3dhcmQgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0TGFzdFNhdmVkQmxvY2soKTtcbiAgICB3aGlsZSAoYmxvY2spIHtcbiAgICAgIGNvbnN0IGJsb2NrRnJvbU5ldHdvcmsgPSBhd2FpdCB0aGlzLm5ldHdvcmsuZ2V0QmxvY2tBdEhlaWdodChcbiAgICAgICAgYmxvY2suaGVpZ2h0LFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgYmxvY2tGcm9tTmV0d29yay5oYXNoID09PSBibG9jay5oYXNoICYmXG4gICAgICAgIGJsb2NrLnBhcmVudEhhc2ggPT09IGJsb2NrRnJvbU5ldHdvcmsucGFyZW50SGFzaFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZm9ya0Jsb2NrKGJsb2NrLmhlaWdodCk7XG4gICAgICBibG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldExhc3RTYXZlZEJsb2NrKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBleHRyYWN0b3JzIHdpdGggdGhlIGZpcnN0IGJsb2NrXG4gICAqIFByb2Nlc3MgYW5kIHN0b3JlIHRoZSBmaXJzdCBibG9jayBpbiBkYXRhYmFzZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRpYWxpemUgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYmxvY2sgPSBhd2FpdCB0aGlzLmdldEZpcnN0QmxvY2soKTtcbiAgICBhd2FpdCB0aGlzLnZlcmlmeUV4dHJhY3RvcnNJbml0aWFsaXphdGlvbih7XG4gICAgICBoZWlnaHQ6IGJsb2NrLmhlaWdodCAtIDEsXG4gICAgICBoYXNoOiBibG9jay5wYXJlbnRIYXNoLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMucHJvY2Vzc0Jsb2NrKGJsb2NrKTtcbiAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRGaXJzdFNhdmVkQmxvY2soKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBzdG9yZSBibG9jayBpbiBkYXRhYmFzZScpO1xuICAgIH1cbiAgICByZXR1cm4gZW50aXR5O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxhdGVzdCBoZWlnaHQgb2YgdGhlIGJsb2NrY2hhaW5cbiAgICogQHJldHVybnMgeyBudW1iZXIgfCB1bmRlZmluZWQgfVxuICAgKi9cbiAgcHVibGljIGdldEJsb2NrQ2hhaW5MYXN0SGVpZ2h0ID0gKCk6IG51bWJlciB8IHVuZGVmaW5lZCA9PlxuICAgIHRoaXMuYmxvY2tDaGFpbkxhc3RIZWlnaHQ7XG5cbiAgLyoqXG4gICAqIHdvcmtlciBmdW5jdGlvbiB0aGF0IHJ1bnMgZm9yIHN5bmNpbmcgdGhlIGRhdGFiYXNlIHdpdGggdGhlIENhcmRhbm8gYmxvY2tjaGFpbiBhbmQgY2hlY2tzIGlmIHdlIGhhdmUgYW55IGZvcmtcbiAgICogc2NlbmFyaW8gaW4gdGhlIGJsb2NrY2hhaW4gYW5kIGludmFsaWRhdGUgdGhlIGRhdGFiYXNlIHRpbGwgdGhlIGRhdGFiYXNlIHN5bmNlZCBhZ2Fpbi5cbiAgICovXG4gIHVwZGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGF0ZXN0SGVpZ2h0ID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEN1cnJlbnRIZWlnaHQoKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuYmxvY2tDaGFpbkxhc3RIZWlnaHQgfHxcbiAgICAgICAgdGhpcy5ibG9ja0NoYWluTGFzdEhlaWdodCA8IGxhdGVzdEhlaWdodFxuICAgICAgKVxuICAgICAgICB0aGlzLmJsb2NrQ2hhaW5MYXN0SGVpZ2h0ID0gbGF0ZXN0SGVpZ2h0O1xuXG4gICAgICBsZXQgbGFzdFNhdmVkQmxvY2sgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRMYXN0U2F2ZWRCbG9jaygpO1xuICAgICAgaWYgKCFsYXN0U2F2ZWRCbG9jaykge1xuICAgICAgICBsYXN0U2F2ZWRCbG9jayA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgfSBlbHNlIGF3YWl0IHRoaXMudmVyaWZ5RXh0cmFjdG9yc0luaXRpYWxpemF0aW9uKGxhc3RTYXZlZEJsb2NrKTtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuaXNGb3JrSGFwcGVuKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RlcEZvcndhcmQobGFzdFNhdmVkQmxvY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdGVwQmFja3dhcmQoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwZGF0ZSBwcm9jZXNzLiAke2V9YCk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYGVycm9yIHN0YWNrOiAke2Uuc3RhY2t9YCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgeyBHZW5lcmFsU2Nhbm5lciB9O1xuIl19
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbFNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2Nhbm5lci9hYnN0cmFjdC9nZW5lcmFsU2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU0sTUFBTSwyQkFBMkIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsTUFBZSxjQUViLFNBQVEsZUFBZ0M7SUFPOUI7SUFDQTtJQUVBO0lBQ0E7SUFFQTtJQUNBO0lBYk8sYUFBYSxDQUFTO0lBQzdCLG9CQUFvQixHQUF1QixTQUFTLENBQUM7SUFFL0QsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFdkUsWUFDVSxXQUFtQixFQUNuQixVQUFzQixFQUM5QixhQUFxQixFQUNiLE9BQWtELEVBQ2xELG1CQUFtQixDQUFDLEVBQzVCLE1BQXVCLEVBQ2YsTUFBZSxFQUNmLFlBQVksQ0FBQztRQUVyQixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFUTixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXRCLFlBQU8sR0FBUCxPQUFPLENBQTJDO1FBQ2xELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBSTtRQUVwQixXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQ2YsY0FBUyxHQUFULFNBQVMsQ0FBSTtRQUdyQjs7O1dBR0c7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFB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LElBQUksY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDcEIsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNDLENBQUM7O2dCQUFNLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDSDtBQUVELE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgSnNvbkJJIGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yLFxuICBCbG9jayxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBCbG9ja0VudGl0eSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL2Jsb2NrRW50aXR5JztcbmltcG9ydCB7IEJsb2NrRGJBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb24nO1xuaW1wb3J0IHsgQWJzdHJhY3RTY2FubmVyIH0gZnJvbSAnLi9zY2FubmVyJztcblxuYWJzdHJhY3QgY2xhc3MgR2VuZXJhbFNjYW5uZXI8XG4gIFRyYW5zYWN0aW9uVHlwZSxcbj4gZXh0ZW5kcyBBYnN0cmFjdFNjYW5uZXI8VHJhbnNhY3Rpb25UeXBlPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbEhlaWdodDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgYmxvY2tDaGFpbkxhc3RIZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBuYW1lID0gKCkgPT4gdGhpcy5zY2FubmVyTmFtZSArICh0aGlzLnN1ZmZpeCA/IGAtJHt0aGlzLnN1ZmZpeH1gIDogJycpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2Nhbm5lck5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsXG4gICAgaW5pdGlhbEhlaWdodDogbnVtYmVyLFxuICAgIHByaXZhdGUgbmV0d29yazogQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPFRyYW5zYWN0aW9uVHlwZT4sXG4gICAgcHJpdmF0ZSBibG9ja1JldHJpZXZlR2FwID0gMCxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgICBwcml2YXRlIHN1ZmZpeD86IHN0cmluZyxcbiAgICBwcml2YXRlIGhlaWdodEdhcCA9IDEsXG4gICkge1xuICAgIHN1cGVyKGxvZ2dlcik7XG4gICAgLyoqXG4gICAgICogSW4gb3JkZXIgdG8ga2VlcCB0aGUgc2Nhbm5lcnMgZnVuY3Rpb25hbGl0aWVzIGNvbnNpc3RlbnQsIHdlIGFkZCBjb25maWdcbiAgICAgKiBgaW5pdGlhbEhlaWdodGAgYnkgb25lIHNvIHRoYXQgaXQgbWF0Y2hlcyBob3cgb3RoZXIgc2Nhbm5lcnMgd29yay5cbiAgICAgKi9cbiAgICB0aGlzLmluaXRpYWxIZWlnaHQgPSBpbml0aWFsSGVpZ2h0ICsgMTtcbiAgICB0aGlzLnN1ZmZpeCA9IHN1ZmZpeDtcbiAgICB0aGlzLmFjdGlvbiA9IG5ldyBCbG9ja0RiQWN0aW9uKFxuICAgICAgdGhpcy5kYXRhU291cmNlLFxuICAgICAgdGhpcy5uYW1lKCksXG4gICAgICB0aGlzLmxvZ2dlci5jaGlsZCgnQmxvY2tEYkFjdGlvbicpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaXJzdCBibG9jayB0byBwcm9jZXNzXG4gICAqIEByZXR1cm5zIFRoZSBmaXJzdCBibG9jayBhdCB0aGUgY29uZmlndXJlZCBpbml0aWFsIGhlaWdodFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEZpcnN0QmxvY2sgPSAoKTogUHJvbWlzZTxCbG9jaz4gPT4ge1xuICAgIHJldHVybiB0aGlzLm5ldHdvcmsuZ2V0QmxvY2tBdEhlaWdodCh0aGlzLmluaXRpYWxIZWlnaHQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBmb3JrIGlzIGhhcHBlbiBpbiB0aGUgYmxvY2tjaGFpbiBvciBub3RcbiAgICogQHJldHVybiBQcm9taXNlPEJvb2xlYW4+XG4gICAqL1xuICBwcm90ZWN0ZWQgaXNGb3JrSGFwcGVuID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IGxhc3RTYXZlZEJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0TGFzdFNhdmVkQmxvY2soKTtcbiAgICBpZiAobGFzdFNhdmVkQmxvY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbGFzdFNhdmVkQmxvY2tGcm9tTmV0d29yayA9IGF3YWl0IHRoaXMubmV0d29yay5nZXRCbG9ja0F0SGVpZ2h0KFxuICAgICAgICBsYXN0U2F2ZWRCbG9jay5oZWlnaHQsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGxhc3RTYXZlZEJsb2NrRnJvbU5ldHdvcmsuaGFzaCAhPT0gbGFzdFNhdmVkQmxvY2suaGFzaDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaW50cm9kdWNlcyBkZWxheSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGJsb2NrIHByb2Nlc3NpbmdcbiAgICogb3BlcmF0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIGRlbGF5QmV0d2VlbkJsb2Nrc1Byb2Nlc3NpbmcgPSBhc3luYyAoc3RhcnRUaW1lOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBzcGVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0VGltZTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShudWxsKSwgdGhpcy5ibG9ja1JldHJpZXZlR2FwIC0gc3BlbnRUaW1lKSxcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBwcm9jZXNzIGEgYmxvY2sgYW5kIGV4ZWN1dGUgYWxsIGV4dHJhY3RvciBvbiBpdC5cbiAgICogQHBhcmFtIGJsb2NrXG4gICAqL1xuICBwcm90ZWN0ZWQgcHJvY2Vzc0Jsb2NrID0gYXN5bmMgKGJsb2NrOiBCbG9jaykgPT4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgYFByb2Nlc3NpbmcgYmxvY2sgYXQgaGVpZ2h0IFske2Jsb2NrLmhlaWdodH1dIGluIHNjYW5uZXIgJHt0aGlzLm5hbWUoKX1gLFxuICAgICk7XG4gICAgY29uc3QgdHhzID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEJsb2NrVHhzKGJsb2NrLmhhc2gsIGJsb2NrLmhlaWdodCk7XG4gICAgaWYgKGJsb2NrLnR4Q291bnQpIHtcbiAgICAgIGlmICh0eHMubGVuZ3RoICE9IGJsb2NrLnR4Q291bnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEFib3J0aW5nIGJsb2NrIHByb2Nlc3Mgd2l0aCBoYXNoIFske2Jsb2NrLmhhc2h9XSBleHBlY3RlZCB0byBoYXZlIFxuICAgICAgICAgICR7YmxvY2sudHhDb3VudH0gdHJhbnNhY3Rpb25zIGJ1dCBoYWQgJHt0eHMubGVuZ3RofWAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgcHJvY2Vzc2luZyAke2Jsb2NrLnR4Q291bnR9IHRyYW5zYWN0aW9ucyBvZiBibG9jayB3aXRoIGhhc2ggWyR7YmxvY2suaGFzaH1dYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzQmxvY2tUcmFuc2FjdGlvbnMoYmxvY2ssIHR4cyk7XG5cbiAgICAvLyBTcGVuZGluZyB0aW1lIGJldHdlZW4gYmxvY2sgZmV0Y2hlcyBpZiB0aGUgc2V0dGluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYmxvY2tSZXRyaWV2ZUdhcClcbiAgICAgIGF3YWl0IHRoaXMuZGVsYXlCZXR3ZWVuQmxvY2tzUHJvY2Vzc2luZyhzdGFydFRpbWUpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogcHJvY2VzcyBmb3J3YXJkIGluIHNjYW5uZXIuIGdldCBibG9ja3MgYW5kIHN0b3JlIGluZm9ybWF0aW9uIGZyb21cbiAgICogdHJhbnNhY3Rpb25zLlxuICAgKiBAcGFyYW0gbGFzdFNhdmVkQmxvY2s6IGxhc3Qgc2F2ZWQgYmxvY2sgZW50aXR5IGluIGRhdGFiYXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RlcEZvcndhcmQgPSBhc3luYyAobGFzdFNhdmVkQmxvY2s6IEJsb2NrRW50aXR5KSA9PiB7XG4gICAgY29uc3QgY3VycmVudEhlaWdodCA9IGF3YWl0IHRoaXMubmV0d29yay5nZXRDdXJyZW50SGVpZ2h0KCk7XG4gICAgY29uc3QgZmlyc3RCbG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldEZpcnN0U2F2ZWRCbG9jaygpO1xuXG4gICAgaWYgKCFmaXJzdEJsb2NrIHx8IGZpcnN0QmxvY2suaGVpZ2h0ID49IGN1cnJlbnRIZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHN0b3BIZWlnaHQgPSBsYXN0U2F2ZWRCbG9jay5oZWlnaHQ7XG4gICAgbGV0IHN0ZXAgPSB0aGlzLmhlaWdodEdhcDtcbiAgICBmb3IgKFxuICAgICAgbGV0IGhlaWdodCA9IGxhc3RTYXZlZEJsb2NrLmhlaWdodDtcbiAgICAgIGhlaWdodCA8IGN1cnJlbnRIZWlnaHQ7XG4gICAgICBoZWlnaHQgKz0gc3RlcFxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBzdGVwID4gMSAmJlxuICAgICAgICAoYXdhaXQgdGhpcy5jaGVja0V4dHJhY3RvcnNGb3JFdmVudHMoaGVpZ2h0LCBoZWlnaHQgKyB0aGlzLmhlaWdodEdhcCkpXG4gICAgICApIHtcbiAgICAgICAgc3RlcCA9IDE7XG4gICAgICAgIHN0b3BIZWlnaHQgPSBoZWlnaHQgKyB0aGlzLmhlaWdodEdhcDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgdGhpcy5uZXR3b3JrLmdldEJsb2NrQXRIZWlnaHQoaGVpZ2h0ICsgc3RlcCk7XG4gICAgICBpZiAoYmxvY2sucGFyZW50SGFzaCAhPSBsYXN0U2F2ZWRCbG9jay5oYXNoICYmIHN0ZXAgPT09IDEpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEludmFsaWQgYmxvY2sgYXQgaGVpZ2h0ICR7bGFzdFNhdmVkQmxvY2suaGVpZ2h0ICsgMX0uIEJsb2NrIGluZm8gXG4gICAgICAgICAgICBpcyBbJHtKc29uQkkuc3RyaW5naWZ5KFxuICAgICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgICl9IGFuZCB0aGUgZXhwZWN0ZWQgcGFyZW50IGhhc2ggaXMgWyR7bGFzdFNhdmVkQmxvY2suaGFzaH1dYCxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zdCBzYXZlZEJsb2NrID0gYXdhaXQgdGhpcy5wcm9jZXNzQmxvY2soYmxvY2spO1xuICAgICAgaWYgKHR5cGVvZiBzYXZlZEJsb2NrID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYXN0U2F2ZWRCbG9jayA9IHNhdmVkQmxvY2s7XG4gICAgICB9XG4gICAgICBpZiAoaGVpZ2h0ICsgc3RlcCA9PSBzdG9wSGVpZ2h0KSB7XG4gICAgICAgIHN0ZXAgPSB0aGlzLmhlaWdodEdhcDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0ZXAgYmFja3dhcmQgaW4gYmxvY2tjaGFpbiBhbmQgZmluZCBmb3JrIHBvaW50LlxuICAgKiBhbmQgcmVtb3ZlIGFsbCBmb3JrZWQgYmxvY2tzIGZyb20gZGF0YWJhc2VcbiAgICovXG4gIHByb3RlY3RlZCBzdGVwQmFja3dhcmQgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0TGFzdFNhdmVkQmxvY2soKTtcbiAgICB3aGlsZSAoYmxvY2spIHtcbiAgICAgIGNvbnN0IGJsb2NrRnJvbU5ldHdvcmsgPSBhd2FpdCB0aGlzLm5ldHdvcmsuZ2V0QmxvY2tBdEhlaWdodChcbiAgICAgICAgYmxvY2suaGVpZ2h0LFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgYmxvY2tGcm9tTmV0d29yay5oYXNoID09PSBibG9jay5oYXNoICYmXG4gICAgICAgIGJsb2NrLnBhcmVudEhhc2ggPT09IGJsb2NrRnJvbU5ldHdvcmsucGFyZW50SGFzaFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZm9ya0Jsb2NrKGJsb2NrLmhlaWdodCk7XG4gICAgICBibG9jayA9IGF3YWl0IHRoaXMuYWN0aW9uLmdldExhc3RTYXZlZEJsb2NrKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBleHRyYWN0b3JzIHdpdGggdGhlIGZpcnN0IGJsb2NrXG4gICAqIFByb2Nlc3MgYW5kIHN0b3JlIHRoZSBmaXJzdCBibG9jayBpbiBkYXRhYmFzZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRpYWxpemUgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYmxvY2sgPSBhd2FpdCB0aGlzLmdldEZpcnN0QmxvY2soKTtcbiAgICBhd2FpdCB0aGlzLnZlcmlmeUV4dHJhY3RvcnNJbml0aWFsaXphdGlvbih7XG4gICAgICBoZWlnaHQ6IGJsb2NrLmhlaWdodCAtIDEsXG4gICAgICBoYXNoOiBibG9jay5wYXJlbnRIYXNoLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMucHJvY2Vzc0Jsb2NrKGJsb2NrKTtcbiAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRGaXJzdFNhdmVkQmxvY2soKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBzdG9yZSBibG9jayBpbiBkYXRhYmFzZScpO1xuICAgIH1cbiAgICByZXR1cm4gZW50aXR5O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxhdGVzdCBoZWlnaHQgb2YgdGhlIGJsb2NrY2hhaW5cbiAgICogQHJldHVybnMgeyBudW1iZXIgfCB1bmRlZmluZWQgfVxuICAgKi9cbiAgcHVibGljIGdldEJsb2NrQ2hhaW5MYXN0SGVpZ2h0ID0gKCk6IG51bWJlciB8IHVuZGVmaW5lZCA9PlxuICAgIHRoaXMuYmxvY2tDaGFpbkxhc3RIZWlnaHQ7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbnkgcmVnaXN0ZXJlZCBleHRyYWN0b3IgZGV0ZWN0cyBhbiBldmVudFxuICAgKiB3aXRoaW4gdGhlIGdpdmVuIGJsb2NrIGhlaWdodCByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21IZWlnaHQgLSBUaGUgc3RhcnRpbmcgYmxvY2sgaGVpZ2h0IHRvIGNoZWNrLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG9IZWlnaHQgLSBUaGUgZW5kaW5nIGJsb2NrIGhlaWdodCB0byBjaGVjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFRydWUgaWYgYXQgbGVhc3Qgb25lIGV2ZW50IGlzIGZvdW5kLFxuICAgKiBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2hlY2tFeHRyYWN0b3JzRm9yRXZlbnRzID0gYXN5bmMgKFxuICAgIGZyb21IZWlnaHQ6IG51bWJlcixcbiAgICB0b0hlaWdodDogbnVtYmVyLFxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBmb3IgKGNvbnN0IGV4dHJhY3RvciBvZiB0aGlzLmV4dHJhY3RvcnMpIHtcbiAgICAgIGNvbnN0IGhhc0V2ZW50ID0gYXdhaXQgZXh0cmFjdG9yLmhhc0V2ZW50SW5IZWlnaHRSYW5nZShcbiAgICAgICAgZnJvbUhlaWdodCxcbiAgICAgICAgdG9IZWlnaHQsXG4gICAgICApO1xuICAgICAgaWYgKGhhc0V2ZW50KSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiB3b3JrZXIgZnVuY3Rpb24gdGhhdCBzeW5jaHJvbml6ZXMgdGhlIGRhdGFiYXNlIHdpdGggdGhlIGJsb2NrY2hhaW4uXG4gICAqIEl0IGhhbmRsZXMgc2Nhbm5lciBpbml0aWFsaXphdGlvbiwgZm9yayByZXNvbHV0aW9uLFxuICAgKiBzdGVwLWJ5LXN0ZXAgYmxvY2sgcHJvY2Vzc2luZyxcbiAgICogYW5kIGZhc3QtZm9yd2FyZGluZyB3aGVuIG5vIGV2ZW50cyBhcmUgZGV0ZWN0ZWQuXG4gICAqL1xuICB1cGRhdGUgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxhdGVzdEhlaWdodCA9IGF3YWl0IHRoaXMubmV0d29yay5nZXRDdXJyZW50SGVpZ2h0KCk7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmJsb2NrQ2hhaW5MYXN0SGVpZ2h0IHx8XG4gICAgICAgIHRoaXMuYmxvY2tDaGFpbkxhc3RIZWlnaHQgPCBsYXRlc3RIZWlnaHRcbiAgICAgIClcbiAgICAgICAgdGhpcy5ibG9ja0NoYWluTGFzdEhlaWdodCA9IGxhdGVzdEhlaWdodDtcblxuICAgICAgbGV0IGxhc3RTYXZlZEJsb2NrID0gYXdhaXQgdGhpcy5hY3Rpb24uZ2V0TGFzdFNhdmVkQmxvY2soKTtcbiAgICAgIGlmICghbGFzdFNhdmVkQmxvY2spIHtcbiAgICAgICAgbGFzdFNhdmVkQmxvY2sgPSBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgIH0gZWxzZSBhd2FpdCB0aGlzLnZlcmlmeUV4dHJhY3RvcnNJbml0aWFsaXphdGlvbihsYXN0U2F2ZWRCbG9jayk7XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmlzRm9ya0hhcHBlbigpKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0ZXBGb3J3YXJkKGxhc3RTYXZlZEJsb2NrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RlcEJhY2t3YXJkKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGRhdGUgcHJvY2Vzcy4gJHtlfWApO1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBlcnJvciBzdGFjazogJHtlLnN0YWNrfWApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IHsgR2VuZXJhbFNjYW5uZXIgfTtcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../lib/scanner/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,WAAW,aAAa,CAAC,eAAe;IAC5C,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB"}
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../lib/scanner/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,WAAW,aAAa,CAAC,eAAe;IAC5C,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zY2FubmVyL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3IgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lckNvbmZpZzxUcmFuc2FjdGlvblR5cGU+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zY2FubmVyL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3IgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lckNvbmZpZzxUcmFuc2FjdGlvblR5cGU+IHtcbiAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZTtcbiAgaW5pdGlhbEhlaWdodDogbnVtYmVyO1xuICBuZXR3b3JrOiBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8VHJhbnNhY3Rpb25UeXBlPjtcbiAgYmxvY2tSZXRyaWV2ZUdhcD86IG51bWJlcjtcbiAgc3VmZml4Pzogc3RyaW5nO1xuICBoZWlnaHRHYXA/OiBudW1iZXI7XG4gIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyO1xufVxuIl19
|
|
@@ -47,9 +47,10 @@ export declare class NetworkConnectorManager<TransactionType> implements Abstrac
|
|
|
47
47
|
/**
|
|
48
48
|
* Get all transactions in a block
|
|
49
49
|
* @param blockHash The hash of the block to get transactions from
|
|
50
|
+
* @param height The height of the block to get transactions from
|
|
50
51
|
* @returns Array of transactions in the block
|
|
51
52
|
*/
|
|
52
|
-
getBlockTxs: (blockHash: string) => Promise<Array<TransactionType>>;
|
|
53
|
+
getBlockTxs: (blockHash: string, height: number) => Promise<Array<TransactionType>>;
|
|
53
54
|
/**
|
|
54
55
|
* Get the number of available connectors
|
|
55
56
|
* @returns The number of connectors
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networkConnectorManager.d.ts","sourceRoot":"","sources":["../../../lib/scanner/network/networkConnectorManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,0BAA0B,EAE3B,MAAM,gCAAgC,CAAC;AAExC;;;GAGG;AACH,qBAAa,uBAAuB,CAAC,eAAe,CAClD,YAAW,wBAAwB,CAAC,eAAe,CAAC;IAMlD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IALhB,OAAO,CAAC,UAAU,CAAmD;IACrE,OAAO,CAAC,qBAAqB,CAAS;gBAG5B,QAAQ,GAAE,0BAA0B,CAAC,eAAe,CAA2C,EAC/F,MAAM,GAAE,cAAkC;IAQpD;;;OAGG;IACI,YAAY,CACjB,SAAS,EAAE,wBAAwB,CAAC,eAAe,CAAC,GACnD,IAAI;IAOP;;;;OAIG;IACH,mBAAmB,IAAI,wBAAwB,CAAC,eAAe,CAAC;IAQhE;;;;OAIG;YACW,mBAAmB;IA8CjC;;;OAGG;IACI,WAAW,CAChB,QAAQ,EAAE,0BAA0B,CAAC,eAAe,CAAC,GACpD,IAAI;IAKP;;;;OAIG;IACH,gBAAgB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,CAIvD;IAEF;;;OAGG;IACH,gBAAgB,QAAa,OAAO,CAAC,MAAM,CAAC,CAI1C;IAEF
|
|
1
|
+
{"version":3,"file":"networkConnectorManager.d.ts","sourceRoot":"","sources":["../../../lib/scanner/network/networkConnectorManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,0BAA0B,EAE3B,MAAM,gCAAgC,CAAC;AAExC;;;GAGG;AACH,qBAAa,uBAAuB,CAAC,eAAe,CAClD,YAAW,wBAAwB,CAAC,eAAe,CAAC;IAMlD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IALhB,OAAO,CAAC,UAAU,CAAmD;IACrE,OAAO,CAAC,qBAAqB,CAAS;gBAG5B,QAAQ,GAAE,0BAA0B,CAAC,eAAe,CAA2C,EAC/F,MAAM,GAAE,cAAkC;IAQpD;;;OAGG;IACI,YAAY,CACjB,SAAS,EAAE,wBAAwB,CAAC,eAAe,CAAC,GACnD,IAAI;IAOP;;;;OAIG;IACH,mBAAmB,IAAI,wBAAwB,CAAC,eAAe,CAAC;IAQhE;;;;OAIG;YACW,mBAAmB;IA8CjC;;;OAGG;IACI,WAAW,CAChB,QAAQ,EAAE,0BAA0B,CAAC,eAAe,CAAC,GACpD,IAAI;IAKP;;;;OAIG;IACH,gBAAgB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,CAIvD;IAEF;;;OAGG;IACH,gBAAgB,QAAa,OAAO,CAAC,MAAM,CAAC,CAI1C;IAEF;;;;;OAKG;IACH,WAAW,GACT,WAAW,MAAM,EACjB,QAAQ,MAAM,KACb,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAIhC;IAEF;;;OAGG;IACI,iBAAiB,IAAI,MAAM;IAMlC;;;OAGG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAU5C"}
|
|
@@ -93,10 +93,11 @@ export class NetworkConnectorManager {
|
|
|
93
93
|
/**
|
|
94
94
|
* Get all transactions in a block
|
|
95
95
|
* @param blockHash The hash of the block to get transactions from
|
|
96
|
+
* @param height The height of the block to get transactions from
|
|
96
97
|
* @returns Array of transactions in the block
|
|
97
98
|
*/
|
|
98
|
-
getBlockTxs = async (blockHash) => {
|
|
99
|
-
return this.executeWithStrategy((connector) => connector.getBlockTxs(blockHash));
|
|
99
|
+
getBlockTxs = async (blockHash, height) => {
|
|
100
|
+
return this.executeWithStrategy((connector) => connector.getBlockTxs(blockHash, height));
|
|
100
101
|
};
|
|
101
102
|
/**
|
|
102
103
|
* Get the number of available connectors
|
|
@@ -122,4 +123,4 @@ export class NetworkConnectorManager {
|
|
|
122
123
|
}
|
|
123
124
|
}
|
|
124
125
|
}
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya0Nvbm5lY3Rvck1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2Nhbm5lci9uZXR3b3JrL25ldHdvcmtDb25uZWN0b3JNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFNNUUsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDOzs7R0FHRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFPeEI7SUFDQTtJQUxGLFVBQVUsQ0FBbUQ7SUFDN0QscUJBQXFCLENBQVM7SUFFdEMsWUFDVSxXQUF3RCxJQUFJLGdCQUFnQixFQUFtQixFQUMvRixTQUF5QixJQUFJLFdBQVcsRUFBRTtRQUQxQyxhQUFRLEdBQVIsUUFBUSxDQUF1RjtRQUMvRixXQUFNLEdBQU4sTUFBTSxDQUFvQztRQUVsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFlBQVksQ0FDakIsU0FBb0Q7UUFFcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsMENBQTBDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENB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RUFBbUMsRUFBRTtRQUN6RSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQzVDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQ2pDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSSxpQkFBaUI7UUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZUFBZSxDQUFDLEtBQWE7UUFDbEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yLFxuICBCbG9jayxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuXG5pbXBvcnQge1xuICBDb25uZWN0b3JTZWxlY3Rpb25TdHJhdGVneSxcbiAgRmFpbG92ZXJTdHJhdGVneSxcbn0gZnJvbSAnLi9jb25uZWN0b3JTZWxlY3Rpb25TdHJhdGVnaWVzJztcblxuLyoqXG4gKiBOZXR3b3JrIGNvbm5lY3RvciBtYW5hZ2VyIHRoYXQgY2FuIGhhbmRsZSBtdWx0aXBsZSBjb25uZWN0b3JzXG4gKiBmb3IgYSBzaW5nbGUgbmV0d29yayB3aXRoIHBsdWdnYWJsZSBzZWxlY3Rpb24gc3RyYXRlZ3lcbiAqL1xuZXhwb3J0IGNsYXNzIE5ldHdvcmtDb25uZWN0b3JNYW5hZ2VyPFRyYW5zYWN0aW9uVHlwZT5cbiAgaW1wbGVtZW50cyBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8VHJhbnNhY3Rpb25UeXBlPlxue1xuICBwcml2YXRlIGNvbm5lY3RvcnM6IEFycmF5PEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcjxUcmFuc2FjdGlvblR5cGU+PjtcbiAgcHJpdmF0ZSBjdXJyZW50Q29ubmVjdG9ySW5kZXg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0cmF0ZWd5OiBDb25uZWN0b3JTZWxlY3Rpb25TdHJhdGVneTxUcmFuc2FjdGlvblR5cGU+ID0gbmV3IEZhaWxvdmVyU3RyYXRlZ3k8VHJhbnNhY3Rpb25UeXBlPigpLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlciA9IG5ldyBEdW1teUxvZ2dlcigpLFxuICApIHtcbiAgICB0aGlzLmNvbm5lY3RvcnMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA9IDA7XG4gICAgdGhpcy5zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdOZXR3b3JrQ29ubmVjdG9yTWFuYWdlciBpbml0aWFsaXplZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBjb25uZWN0b3IgdG8gdGhlIG1hbmFnZXJcbiAgICogQHBhcmFtIGNvbm5lY3RvciBUaGUgbmV0d29yayBjb25uZWN0b3IgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBhZGRDb25uZWN0b3IoXG4gICAgY29ubmVjdG9yOiBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8VHJhbnNhY3Rpb25UeXBlPixcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0b3JzLnB1c2goY29ubmVjdG9yKTtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgYEFkZGVkIG5ldyBjb25uZWN0b3IuIFRvdGFsIGNvbm5lY3RvcnM6ICR7dGhpcy5jb25uZWN0b3JzLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSBjb25uZWN0b3JcbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgbmV0d29yayBjb25uZWN0b3IgaW5zdGFuY2VcbiAgICogQHRocm93cyBFcnJvciBpZiBubyBjb25uZWN0b3JzIGFyZSBhdmFpbGFibGVcbiAgICovXG4gIGdldEN1cnJlbnRDb25uZWN0b3IoKTogQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPFRyYW5zYWN0aW9uVHlwZT4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3RvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbm5lY3RvcnMgYXZhaWxhYmxlJyk7XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBVc2luZyBjb25uZWN0b3IgYXQgaW5kZXggJHt0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleH1gKTtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3JzW3RoaXMuY3VycmVudENvbm5lY3RvckluZGV4XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGFuIG9wZXJhdGlvbiB1c2luZyB0aGUgY29uZmlndXJlZCBzdHJhdGVneVxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gdG8gZXhlY3V0ZVxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZVdpdGhTdHJhdGVneTxUPihcbiAgICBvcGVyYXRpb246IChcbiAgICAgIGNvbm5lY3RvcjogQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPFRyYW5zYWN0aW9uVHlwZT4sXG4gICAgKSA9PiBQcm9taXNlPFQ+LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb25uZWN0b3JzIGF2YWlsYWJsZSBmb3Igb3BlcmF0aW9uJyk7XG4gICAgfVxuXG4gICAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICBjb25zdCBtYXhBdHRlbXB0cyA9IHRoaXMuY29ubmVjdG9ycy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gdGhpcy5jb25uZWN0b3JzW3RoaXMuY3VycmVudENvbm5lY3RvckluZGV4XTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEF0dGVtcHQgJHthdHRlbXB0cyArIDF9LyR7bWF4QXR0ZW1wdHN9IHdpdGggY29ubmVjdG9yIGF0IGluZGV4ICR7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleFxuICAgICAgICAgIH1gLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcGVyYXRpb24oY29ubmVjdG9yKTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXggPSB0aGlzLnN0cmF0ZWd5LnNlbGVjdE5leHRDb25uZWN0b3IoXG4gICAgICAgICAgdGhpcy5jb25uZWN0b3JzLFxuICAgICAgICAgIHRoaXMuY3VycmVudENvbm5lY3RvckluZGV4LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgT3BlcmF0aW9uIHN1Y2Nlc3NmdWwsIG5leHQgY29ubmVjdG9yIGluZGV4OiAke3RoaXMuY3VycmVudENvbm5lY3RvckluZGV4fWAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnJvciBhcyBFcnJvcjtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICBgT3BlcmF0aW9uIGZhaWxlZCB3aXRoIGNvbm5lY3RvciBhdCBpbmRleCAke3RoaXMuY3VycmVudENvbm5lY3RvckluZGV4fTogJHtsYXN0RXJyb3IubWVzc2FnZX1gLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA9IHRoaXMuc3RyYXRlZ3kuc2VsZWN0TmV4dENvbm5lY3RvcihcbiAgICAgICAgICB0aGlzLmNvbm5lY3RvcnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXgsXG4gICAgICAgICAgbGFzdEVycm9yLFxuICAgICAgICApO1xuICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBsYXN0RXJyb3IgfHwgbmV3IEVycm9yKCdBbGwgY29ubmVjdG9ycyBmYWlsZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0cmF0ZWd5IHRvIHVzZSBmb3IgY29ubmVjdG9yIHNlbGVjdGlvblxuICAgKiBAcGFyYW0gc3RyYXRlZ3kgVGhlIHN0cmF0ZWd5IHRvIHVzZVxuICAgKi9cbiAgcHVibGljIHNldFN0cmF0ZWd5KFxuICAgIHN0cmF0ZWd5OiBDb25uZWN0b3JTZWxlY3Rpb25TdHJhdGVneTxUcmFuc2FjdGlvblR5cGU+LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKCdTZXR0aW5nIG5ldyBjb25uZWN0b3Igc2VsZWN0aW9uIHN0cmF0ZWd5Jyk7XG4gICAgdGhpcy5zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGJsb2NrIGF0IGEgc3BlY2lmaWMgaGVpZ2h0XG4gICAqIEBwYXJhbSBoZWlnaHQgVGhlIGhlaWdodCBvZiB0aGUgYmxvY2sgdG8gZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBibG9jayBhdCB0aGUgc3BlY2lmaWVkIGhlaWdodFxuICAgKi9cbiAgZ2V0QmxvY2tBdEhlaWdodCA9IGFzeW5jIChoZWlnaHQ6IG51bWJlcik6IFByb21pc2U8QmxvY2s+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlV2l0aFN0cmF0ZWd5KChjb25uZWN0b3IpID0+XG4gICAgICBjb25uZWN0b3IuZ2V0QmxvY2tBdEhlaWdodChoZWlnaHQpLFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBoZWlnaHQgb2YgdGhlIGJsb2NrY2hhaW5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgaGVpZ2h0XG4gICAqL1xuICBnZXRDdXJyZW50SGVpZ2h0ID0gYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVdpdGhTdHJhdGVneSgoY29ubmVjdG9yKSA9PlxuICAgICAgY29ubmVjdG9yLmdldEN1cnJlbnRIZWlnaHQoKSxcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRyYW5zYWN0aW9ucyBpbiBhIGJsb2NrXG4gICAqIEBwYXJhbSBibG9ja0hhc2ggVGhlIGhhc2ggb2YgdGhlIGJsb2NrIHRvIGdldCB0cmFuc2FjdGlvbnMgZnJvbVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB0cmFuc2FjdGlvbnMgaW4gdGhlIGJsb2NrXG4gICAqL1xuICBnZXRCbG9ja1R4cyA9IGFzeW5jIChibG9ja0hhc2g6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8VHJhbnNhY3Rpb25UeXBlPj4gPT4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVXaXRoU3RyYXRlZ3koKGNvbm5lY3RvcikgPT5cbiAgICAgIGNvbm5lY3Rvci5nZXRCbG9ja1R4cyhibG9ja0hhc2gpLFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjb25uZWN0b3JzXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY29ubmVjdG9yc1xuICAgKi9cbiAgcHVibGljIGdldENvbm5lY3RvckNvdW50KCk6IG51bWJlciB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDdXJyZW50IGNvbm5lY3RvciBjb3VudDogJHtjb3VudH1gKTtcbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY29ubmVjdG9yIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgY29ubmVjdG9yIHRvIHJlbW92ZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUNvbm5lY3RvcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29ubmVjdG9yIGluZGV4Jyk7XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLmluZm8oYFJlbW92aW5nIGNvbm5lY3RvciBhdCBpbmRleCAke2luZGV4fWApO1xuICAgIHRoaXMuY29ubmVjdG9ycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA+PSB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA9IDA7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya0Nvbm5lY3Rvck1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc2Nhbm5lci9uZXR3b3JrL25ldHdvcmtDb25uZWN0b3JNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFNNUUsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDOzs7R0FHRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFPeEI7SUFDQTtJQUxGLFVBQVUsQ0FBbUQ7SUFDN0QscUJBQXFCLENBQVM7SUFFdEMsWUFDVSxXQUF3RCxJQUFJLGdCQUFnQixFQUFtQixFQUMvRixTQUF5QixJQUFJLFdBQVcsRUFBRTtRQUQxQyxhQUFRLEdBQVIsUUFBUSxDQUF1RjtRQUMvRixXQUFNLEdBQU4sTUFBTSxDQUFvQztRQUVsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFlBQVksQ0FDakIsU0FBb0Q7UUFFcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsMENBQTBDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENB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QixFQUNqQixNQUFjLEVBQ21CLEVBQUU7UUFDbkMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUM1QyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FDekMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNJLGlCQUFpQjtRQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSSxlQUFlLENBQUMsS0FBYTtRQUNsQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdExvZ2dlciwgRHVtbXlMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQge1xuICBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3IsXG4gIEJsb2NrLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7XG4gIENvbm5lY3RvclNlbGVjdGlvblN0cmF0ZWd5LFxuICBGYWlsb3ZlclN0cmF0ZWd5LFxufSBmcm9tICcuL2Nvbm5lY3RvclNlbGVjdGlvblN0cmF0ZWdpZXMnO1xuXG4vKipcbiAqIE5ldHdvcmsgY29ubmVjdG9yIG1hbmFnZXIgdGhhdCBjYW4gaGFuZGxlIG11bHRpcGxlIGNvbm5lY3RvcnNcbiAqIGZvciBhIHNpbmdsZSBuZXR3b3JrIHdpdGggcGx1Z2dhYmxlIHNlbGVjdGlvbiBzdHJhdGVneVxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya0Nvbm5lY3Rvck1hbmFnZXI8VHJhbnNhY3Rpb25UeXBlPlxuICBpbXBsZW1lbnRzIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcjxUcmFuc2FjdGlvblR5cGU+XG57XG4gIHByaXZhdGUgY29ubmVjdG9yczogQXJyYXk8QWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPFRyYW5zYWN0aW9uVHlwZT4+O1xuICBwcml2YXRlIGN1cnJlbnRDb25uZWN0b3JJbmRleDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RyYXRlZ3k6IENvbm5lY3RvclNlbGVjdGlvblN0cmF0ZWd5PFRyYW5zYWN0aW9uVHlwZT4gPSBuZXcgRmFpbG92ZXJTdHJhdGVneTxUcmFuc2FjdGlvblR5cGU+KCksXG4gICAgcHJpdmF0ZSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyID0gbmV3IER1bW15TG9nZ2VyKCksXG4gICkge1xuICAgIHRoaXMuY29ubmVjdG9ycyA9IFtdO1xuICAgIHRoaXMuY3VycmVudENvbm5lY3RvckluZGV4ID0gMDtcbiAgICB0aGlzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ05ldHdvcmtDb25uZWN0b3JNYW5hZ2VyIGluaXRpYWxpemVkJyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGNvbm5lY3RvciB0byB0aGUgbWFuYWdlclxuICAgKiBAcGFyYW0gY29ubmVjdG9yIFRoZSBuZXR3b3JrIGNvbm5lY3RvciBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIGFkZENvbm5lY3RvcihcbiAgICBjb25uZWN0b3I6IEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcjxUcmFuc2FjdGlvblR5cGU+LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3RvcnMucHVzaChjb25uZWN0b3IpO1xuICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICBgQWRkZWQgbmV3IGNvbm5lY3Rvci4gVG90YWwgY29ubmVjdG9yczogJHt0aGlzLmNvbm5lY3RvcnMubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbm5lY3RvclxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBuZXR3b3JrIGNvbm5lY3RvciBpbnN0YW5jZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5vIGNvbm5lY3RvcnMgYXJlIGF2YWlsYWJsZVxuICAgKi9cbiAgZ2V0Q3VycmVudENvbm5lY3RvcigpOiBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8VHJhbnNhY3Rpb25UeXBlPiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY29ubmVjdG9ycyBhdmFpbGFibGUnKTtcbiAgICB9XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFVzaW5nIGNvbm5lY3RvciBhdCBpbmRleCAke3RoaXMuY3VycmVudENvbm5lY3RvckluZGV4fWApO1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3RvcnNbdGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYW4gb3BlcmF0aW9uIHVzaW5nIHRoZSBjb25maWd1cmVkIHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBvcGVyYXRpb24gVGhlIG9wZXJhdGlvbiB0byBleGVjdXRlXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlV2l0aFN0cmF0ZWd5PFQ+KFxuICAgIG9wZXJhdGlvbjogKFxuICAgICAgY29ubmVjdG9yOiBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8VHJhbnNhY3Rpb25UeXBlPixcbiAgICApID0+IFByb21pc2U8VD4sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3RvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbm5lY3RvcnMgYXZhaWxhYmxlIGZvciBvcGVyYXRpb24nKTtcbiAgICB9XG5cbiAgICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgIGNvbnN0IG1heEF0dGVtcHRzID0gdGhpcy5jb25uZWN0b3JzLmxlbmd0aDtcblxuICAgIHdoaWxlIChhdHRlbXB0cyA8IG1heEF0dGVtcHRzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25uZWN0b3IgPSB0aGlzLmNvbm5lY3RvcnNbdGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXhdO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgQXR0ZW1wdCAke2F0dGVtcHRzICsgMX0vJHttYXhBdHRlbXB0c30gd2l0aCBjb25uZWN0b3IgYXQgaW5kZXggJHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvbm5lY3RvckluZGV4XG4gICAgICAgICAgfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbihjb25uZWN0b3IpO1xuICAgICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA9IHRoaXMuc3RyYXRlZ3kuc2VsZWN0TmV4dENvbm5lY3RvcihcbiAgICAgICAgICB0aGlzLmNvbm5lY3RvcnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXgsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBPcGVyYXRpb24gc3VjY2Vzc2Z1bCwgbmV4dCBjb25uZWN0b3IgaW5kZXg6ICR7dGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXh9YCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGFzIEVycm9yO1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICAgIGBPcGVyYXRpb24gZmFpbGVkIHdpdGggY29ubmVjdG9yIGF0IGluZGV4ICR7dGhpcy5jdXJyZW50Q29ubmVjdG9ySW5kZXh9OiAke2xhc3RFcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3VycmVudENvbm5lY3RvckluZGV4ID0gdGhpcy5zdHJhdGVneS5zZWxlY3ROZXh0Q29ubmVjdG9yKFxuICAgICAgICAgIHRoaXMuY29ubmVjdG9ycyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCxcbiAgICAgICAgICBsYXN0RXJyb3IsXG4gICAgICAgICk7XG4gICAgICAgIGF0dGVtcHRzKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ0FsbCBjb25uZWN0b3JzIGZhaWxlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RyYXRlZ3kgdG8gdXNlIGZvciBjb25uZWN0b3Igc2VsZWN0aW9uXG4gICAqIEBwYXJhbSBzdHJhdGVneSBUaGUgc3RyYXRlZ3kgdG8gdXNlXG4gICAqL1xuICBwdWJsaWMgc2V0U3RyYXRlZ3koXG4gICAgc3RyYXRlZ3k6IENvbm5lY3RvclNlbGVjdGlvblN0cmF0ZWd5PFRyYW5zYWN0aW9uVHlwZT4sXG4gICk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oJ1NldHRpbmcgbmV3IGNvbm5lY3RvciBzZWxlY3Rpb24gc3RyYXRlZ3knKTtcbiAgICB0aGlzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgYmxvY2sgYXQgYSBzcGVjaWZpYyBoZWlnaHRcbiAgICogQHBhcmFtIGhlaWdodCBUaGUgaGVpZ2h0IG9mIHRoZSBibG9jayB0byBnZXRcbiAgICogQHJldHVybnMgVGhlIGJsb2NrIGF0IHRoZSBzcGVjaWZpZWQgaGVpZ2h0XG4gICAqL1xuICBnZXRCbG9ja0F0SGVpZ2h0ID0gYXN5bmMgKGhlaWdodDogbnVtYmVyKTogUHJvbWlzZTxCbG9jaz4gPT4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVXaXRoU3RyYXRlZ3koKGNvbm5lY3RvcikgPT5cbiAgICAgIGNvbm5lY3Rvci5nZXRCbG9ja0F0SGVpZ2h0KGhlaWdodCksXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGhlaWdodCBvZiB0aGUgYmxvY2tjaGFpblxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBoZWlnaHRcbiAgICovXG4gIGdldEN1cnJlbnRIZWlnaHQgPSBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlV2l0aFN0cmF0ZWd5KChjb25uZWN0b3IpID0+XG4gICAgICBjb25uZWN0b3IuZ2V0Q3VycmVudEhlaWdodCgpLFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgdHJhbnNhY3Rpb25zIGluIGEgYmxvY2tcbiAgICogQHBhcmFtIGJsb2NrSGFzaCBUaGUgaGFzaCBvZiB0aGUgYmxvY2sgdG8gZ2V0IHRyYW5zYWN0aW9ucyBmcm9tXG4gICAqIEBwYXJhbSBoZWlnaHQgVGhlIGhlaWdodCBvZiB0aGUgYmxvY2sgdG8gZ2V0IHRyYW5zYWN0aW9ucyBmcm9tXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHRyYW5zYWN0aW9ucyBpbiB0aGUgYmxvY2tcbiAgICovXG4gIGdldEJsb2NrVHhzID0gYXN5bmMgKFxuICAgIGJsb2NrSGFzaDogc3RyaW5nLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICApOiBQcm9taXNlPEFycmF5PFRyYW5zYWN0aW9uVHlwZT4+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlV2l0aFN0cmF0ZWd5KChjb25uZWN0b3IpID0+XG4gICAgICBjb25uZWN0b3IuZ2V0QmxvY2tUeHMoYmxvY2tIYXNoLCBoZWlnaHQpLFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjb25uZWN0b3JzXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY29ubmVjdG9yc1xuICAgKi9cbiAgcHVibGljIGdldENvbm5lY3RvckNvdW50KCk6IG51bWJlciB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDdXJyZW50IGNvbm5lY3RvciBjb3VudDogJHtjb3VudH1gKTtcbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY29ubmVjdG9yIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgY29ubmVjdG9yIHRvIHJlbW92ZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUNvbm5lY3RvcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29ubmVjdG9yIGluZGV4Jyk7XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLmluZm8oYFJlbW92aW5nIGNvbm5lY3RvciBhdCBpbmRleCAke2luZGV4fWApO1xuICAgIHRoaXMuY29ubmVjdG9ycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA+PSB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb25uZWN0b3JJbmRleCA9IDA7XG4gICAgfVxuICB9XG59XG4iXX0=
|