@ashishpandeyone/cdk-lambda-web-function 0.1.2 → 0.1.3
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/.jsii +649 -79
- package/.jsii.tabl.json +1 -1
- package/API.md +506 -0
- package/README.md +47 -5
- package/assets/web-function-provider/index.js +26 -26
- package/lib/nodejs-web-function.js +1 -1
- package/lib/private/metrics.d.ts +23 -0
- package/lib/private/metrics.js +49 -0
- package/lib/private/provider-protocol.d.ts +17 -0
- package/lib/private/provider-protocol.js +6 -2
- package/lib/private/provider.d.ts +3 -3
- package/lib/private/provider.js +15 -5
- package/lib/private/regional-alarm.d.ts +23 -0
- package/lib/private/regional-alarm.js +40 -0
- package/lib/private/rollback.d.ts +9 -0
- package/lib/private/rollback.js +3 -0
- package/lib/private/traffic-shift.d.ts +2 -0
- package/lib/private/traffic-shift.js +3 -2
- package/lib/web-function-deployment.d.ts +64 -0
- package/lib/web-function-deployment.js +41 -6
- package/lib/web-function-endpoint.d.ts +46 -0
- package/lib/web-function-endpoint.js +155 -2
- package/lib/web-function-grants.js +1 -1
- package/lib/web-function-revision.js +1 -1
- package/lib/web-function.d.ts +30 -0
- package/lib/web-function.js +52 -2
- package/package.json +2 -2
package/lib/web-function.js
CHANGED
|
@@ -36,11 +36,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.WebFunction = void 0;
|
|
37
37
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
38
38
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
39
|
+
const cloudwatch = __importStar(require("aws-cdk-lib/aws-cloudwatch"));
|
|
39
40
|
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
40
41
|
const lambda = __importStar(require("aws-cdk-lib/aws-lambda"));
|
|
41
42
|
const logs = __importStar(require("aws-cdk-lib/aws-logs"));
|
|
42
43
|
const code_1 = require("./private/code");
|
|
43
44
|
const log_group_1 = require("./private/log-group");
|
|
45
|
+
const metrics_1 = require("./private/metrics");
|
|
44
46
|
const revision_cleanup_1 = require("./private/revision-cleanup");
|
|
45
47
|
const validation_1 = require("./private/validation");
|
|
46
48
|
const web_function_endpoint_1 = require("./web-function-endpoint");
|
|
@@ -59,7 +61,7 @@ const MAX_ENDPOINTS = 10;
|
|
|
59
61
|
* @resource AWS::Lambda::WebFunction
|
|
60
62
|
*/
|
|
61
63
|
class WebFunction extends aws_cdk_lib_1.Resource {
|
|
62
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunction", version: "0.1.
|
|
64
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunction", version: "0.1.3" };
|
|
63
65
|
webFunctionName;
|
|
64
66
|
webFunctionArn;
|
|
65
67
|
/** The ID of the current revision. Same as `currentRevision.revisionId`. */
|
|
@@ -209,6 +211,54 @@ class WebFunction extends aws_cdk_lib_1.Resource {
|
|
|
209
211
|
grantInvoke(grantee) {
|
|
210
212
|
return this.grants.invoke(grantee);
|
|
211
213
|
}
|
|
214
|
+
/**
|
|
215
|
+
* A metric of this function's execution environments in `AWS/Lambda/Web` (dimension `FunctionName`), across all endpoints.
|
|
216
|
+
* For request and error counts, use the endpoint's metrics (`fn.endpoint.metricRequests()`).
|
|
217
|
+
*
|
|
218
|
+
* Metrics are published in the region that served the request: pass `region` for another serving region.
|
|
219
|
+
* An alarm can only use metrics from its own stack's region.
|
|
220
|
+
*
|
|
221
|
+
* @default - sum over 1 minute, in the home region
|
|
222
|
+
*/
|
|
223
|
+
metric(metricName, props) {
|
|
224
|
+
return new cloudwatch.Metric({
|
|
225
|
+
namespace: metrics_1.WEB_NAMESPACE,
|
|
226
|
+
metricName,
|
|
227
|
+
dimensionsMap: { FunctionName: this.webFunctionName },
|
|
228
|
+
statistic: cloudwatch.Stats.SUM,
|
|
229
|
+
period: metrics_1.DEFAULT_PERIOD,
|
|
230
|
+
...props,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
/** Time the execution environments were active (`EnvironmentActiveTime`). */
|
|
234
|
+
metricActiveTime(props) {
|
|
235
|
+
return this.metric('EnvironmentActiveTime', props);
|
|
236
|
+
}
|
|
237
|
+
/** CPU time the execution environments used (`EnvironmentCPUTime`). */
|
|
238
|
+
metricCpuTime(props) {
|
|
239
|
+
return this.metric('EnvironmentCPUTime', props);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Requests an execution environment handled at once (`EnvironmentConcurrentRequests`), to compare with
|
|
243
|
+
* `maxConcurrencyPerEnvironment`.
|
|
244
|
+
*
|
|
245
|
+
* @default - maximum over 1 minute
|
|
246
|
+
*/
|
|
247
|
+
metricConcurrentRequests(props) {
|
|
248
|
+
return this.metric('EnvironmentConcurrentRequests', { statistic: cloudwatch.Stats.MAXIMUM, ...props });
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Peak memory an execution environment used (`EnvironmentMaxMemoryUsage`); each environment has 2 GB.
|
|
252
|
+
*
|
|
253
|
+
* @default - maximum over 1 minute
|
|
254
|
+
*/
|
|
255
|
+
metricMaxMemoryUsage(props) {
|
|
256
|
+
return this.metric('EnvironmentMaxMemoryUsage', { statistic: cloudwatch.Stats.MAXIMUM, ...props });
|
|
257
|
+
}
|
|
258
|
+
/** Bytes sent in responses (`ResponseBytes`). */
|
|
259
|
+
metricResponseBytes(props) {
|
|
260
|
+
return this.metric('ResponseBytes', props);
|
|
261
|
+
}
|
|
212
262
|
createEndpoint(id, options, namePrefix, nameSeed) {
|
|
213
263
|
if (this.endpoints.length >= MAX_ENDPOINTS) {
|
|
214
264
|
throw new Error(`${this.node.path}: a Web Function can have at most ${MAX_ENDPOINTS} endpoints`);
|
|
@@ -254,4 +304,4 @@ class WebFunction extends aws_cdk_lib_1.Resource {
|
|
|
254
304
|
}
|
|
255
305
|
}
|
|
256
306
|
exports.WebFunction = WebFunction;
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dlYi1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXdIO0FBQ3hILHlEQUEyQztBQUMzQywrREFBaUQ7QUFDakQsMkRBQTZDO0FBRzdDLHlDQUFpRDtBQUNqRCxtREFBMEQ7QUFDMUQsaUVBQTZEO0FBQzdELHFEQUFxRjtBQUNyRixtRUFBbUk7QUFFbkksbUVBQXlGO0FBRXpGLDhEQUE4RDtBQUM5RCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUF5SnpCOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUTs7SUFDdkIsZUFBZSxDQUFTO0lBQ3hCLGNBQWMsQ0FBUztJQUV2Qyw0RUFBNEU7SUFDNUQsVUFBVSxDQUFTO0lBRW5DLGtFQUFrRTtJQUNsRCxlQUFlLENBQXVCO0lBRXRELHlEQUF5RDtJQUN6QyxRQUFRLENBQXNCO0lBRTlDLGlIQUFpSDtJQUNqRyxNQUFNLENBQW9CO0lBRTFDLDBCQUEwQjtJQUNWLElBQUksQ0FBWTtJQUVoQyxrRUFBa0U7SUFDbEQsY0FBYyxDQUFpQjtJQUUvQzs7O09BR0c7SUFDYSxRQUFRLENBQWlCO0lBRXhCLFdBQVcsR0FBOEIsRUFBRSxDQUFDO0lBQzVDLFNBQVMsR0FBMEIsRUFBRSxDQUFDO0lBQ3RDLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztJQUN6RCxZQUFZLENBQVM7SUFDckIsVUFBVSxDQUE4RDtJQUN4RSxRQUFRLENBQXdCO0lBQ2hDLGVBQWUsQ0FBa0I7SUFFbEQsbUZBQW1GO0lBQ25GLElBQVcsY0FBYztRQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMv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RUFBRTtZQUN2QyxNQUFNO1lBQ04sWUFBWSxFQUFFLElBQUk7WUFDbEIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUztZQUN2RSxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsSUFBSSwyQkFBYSxDQUFDLE1BQU07U0FDeEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF6Tkgsa0NBME5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIHR5cGUgSVJlc291cmNlLCBMYXp5LCBOYW1lcywgUmVtb3ZhbFBvbGljeSwgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiwgVmFsaWRhdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgV2ViRnVuY3Rpb25BdXRoVHlwZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgV2ViRnVuY3Rpb25Db2RlIH0gZnJvbSAnLi9wcml2YXRlL2NvZGUnO1xuaW1wb3J0IHsgV2ViRnVuY3Rpb25Mb2dHcm91cCB9IGZyb20gJy4vcHJpdmF0ZS9sb2ctZ3JvdXAnO1xuaW1wb3J0IHsgUmV2aXNpb25DbGVhbnVwIH0gZnJvbSAnLi9wcml2YXRlL3JldmlzaW9uLWNsZWFudXAnO1xuaW1wb3J0IHsgQ0ZOX1ZBTElEQVRFX1VOS05PV05fVFlQRSwgYXNzZXJ0UmVzb3VyY2VOYW1lIH0gZnJvbSAnLi9wcml2YXRlL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHsgV2ViRnVuY3Rpb25FbmRwb2ludCwgdHlwZSBBZGRXZWJGdW5jdGlvbkVuZHBvaW50T3B0aW9ucywgdHlwZSBXZWJGdW5jdGlvbkVuZHBvaW50T3B0aW9ucyB9IGZyb20gJy4vd2ViLWZ1bmN0aW9uLWVuZHBvaW50JztcbmltcG9ydCB7IFdlYkZ1bmN0aW9uR3JhbnRzIH0gZnJvbSAnLi93ZWItZnVuY3Rpb24tZ3JhbnRzJztcbmltcG9ydCB7IFdlYkZ1bmN0aW9uUmV2aXNpb24sIHR5cGUgSVdlYkZ1bmN0aW9uUmV2aXNpb24gfSBmcm9tICcuL3dlYi1mdW5jdGlvbi1yZXZpc2lvbic7XG5cbi8qKiBFbmRwb2ludHMgcGVyIGZ1bmN0aW9uIChzZXJ2aWNlIHF1b3RhLCBub3QgYWRqdXN0YWJsZSkuICovXG5jb25zdCBNQVhfRU5EUE9JTlRTID0gMTA7XG5cbi8qKlxuICogT3B0aW9ucyBzaGFyZWQgYnkgYFdlYkZ1bmN0aW9uYCBhbmQgYE5vZGVqc1dlYkZ1bmN0aW9uYDogZXZlcnl0aGluZyBleGNlcHQgaG93IHRoZSBjb2RlIGlzIHN1cHBsaWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkZ1bmN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIb3cgY2FsbGVycyBvZiB0aGUgZW5kcG9pbnQgYXJlIGF1dGhlbnRpY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBhdXRoVHlwZTogV2ViRnVuY3Rpb25BdXRoVHlwZTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgZW5kcG9pbnQgKGBmbi5lbmRwb2ludGApOiB3aGVyZSBpdCBzZXJ2ZXMgZnJvbSwgaXRzIG5hbWUgYW5kIGxpbWl0cy5cbiAgICogSXQgc2VydmVzIHRoZSBjdXJyZW50IHJldmlzaW9uOyByb3V0ZSBpdCBlbHNld2hlcmUgd2l0aCBgZm4uZW5kcG9pbnQucm91dGVUcmFmZmljKClgLlxuICAgKiBBZGQgbW9yZSBlbmRwb2ludHMgd2l0aCBgYWRkRW5kcG9pbnRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgSE9NRV9SRUdJT04gZW5kcG9pbnQgc2VydmluZyB0aGUgY3VycmVudCByZXZpc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBXZWJGdW5jdGlvbkVuZHBvaW50T3B0aW9ucztcblxuICAvKipcbiAgICogSG93IG1hbnkgb2YgdGhlIG5ld2VzdCByZXZpc2lvbnMgdG8ga2VlcCAoMS01MCkuIEVhY2ggZGVwbG95bWVudCB0aGF0IGNoYW5nZXMgdGhlIGNvZGUgb3JcbiAgICogY29uZmlndXJhdGlvbiBjcmVhdGVzIGEgcmV2aXNpb247IG9sZGVyIG9uZXMgc3RheSBhdmFpbGFibGUgdG8gcm9sbCBiYWNrIHRvIG9yIHJvdXRlIHRyYWZmaWMgdG8sXG4gICAqIGFuZCB0aGUgb2xkZXN0IGJleW9uZCB0aGlzIGNvdW50IGFyZSBkZWxldGVkIGFmdGVyIGVhY2ggZGVwbG95bWVudC5cbiAgICpcbiAgICogUmV2aXNpb25zIHRoYXQgYW4gZW5kcG9pbnQgcm91dGVzIHRvIGFyZSBuZXZlciBkZWxldGVkLCBhbmQgbmVpdGhlciBhcmUgdGhvc2UgdGhlIHByZXZpb3VzXG4gICAqIGRlcGxveW1lbnQgdXNlZCAoYSByb2xsYmFjayByZXR1cm5zIHRvIHRoZW0pLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyMFxuICAgKi9cbiAgcmVhZG9ubHkgcmV2aXNpb25SZXRlbnRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbidzIG5hbWUuIFJlbmFtaW5nIGEgZnVuY3Rpb24gcmVwbGFjZXMgaXQsIGFuZCBpdHMgZW5kcG9pbnQgZ2V0cyBhIG5ldyBVUkwuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSB1bmlxdWUgbmFtZSBnZW5lcmF0ZWQgZnJvbSB0aGUgY29uc3RydWN0IHBhdGggKG1vdmluZyB0aGUgY29uc3RydWN0IGNoYW5nZXMgaXQpXG4gICAqL1xuICByZWFkb25seSB3ZWJGdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uJ3MgY29kZSBhbmQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gcm9sZS5cbiAgICpcbiAgICogQW4gYGlhbS5JUm9sZWAgKG5vdCBgSVJvbGVSZWZgKSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBhZGRzIHN0YXRlbWVudHMgdG8gaXQgYW5kIGdyYW50cyB0aHJvdWdoIGl0LlxuICAgKiBbZGlzYWJsZS1hd3NsaW50OnByZWZlci1yZWYtaW50ZXJmYWNlXVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgcm9sZSB0cnVzdGluZyBgbGFtYmRhLmFtYXpvbmF3cy5jb21gIHdpdGggYEFXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZWBcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcy4gTmFtZXMgc3RhcnRpbmcgd2l0aCBgQVdTX2AgYXJlIHJlc2VydmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogSG93IGxvbmcgYSBzaW5nbGUgcmVxdWVzdCBtYXkgcnVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDMwKVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSByZXF1ZXN0cyBvbmUgZXhlY3V0aW9uIGVudmlyb25tZW50IGhhbmRsZXMgYXQgdGhlIHNhbWUgdGltZSAoMS0xMjgpLlxuICAgKiBSZXF1ZXN0cyBzaGFyZSBtb2R1bGUtbGV2ZWwgc3RhdGUsIHNvIGhhbmRsZXJzIG11c3QgYmUgY29uY3VycmVuY3ktc2FmZS5cbiAgICpcbiAgICogQGRlZmF1bHQgNjRcbiAgICovXG4gIHJlYWRvbmx5IG1heENvbmN1cnJlbmN5UGVyRW52aXJvbm1lbnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldGVudGlvbiBmb3IgZXZlcnkgbG9nIGdyb3VwIG9mIHRoZSBmdW5jdGlvbiwgaW4gZXZlcnkgcmVnaW9uIGl0IHNlcnZlcyBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRIXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIFdoYXQgaGFwcGVucyB0byB0aGUgbG9nIGdyb3VwcyB3aGVuIHRoZSBmdW5jdGlvbiBpcyByZW1vdmVkOiBSRVRBSU4gb3IgREVTVFJPWS5cbiAgICogV2l0aCBERVNUUk9ZLCBkZWxldGlvbiB3YWl0cyBhYm91dCBhIG1pbnV0ZSBmb3IgZW52aXJvbm1lbnRzIHRvIGZsdXNoIHRoZWlyIGxhc3QgbGluZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuUkVUQUlOXG4gICAqL1xuICByZWFkb25seSBsb2dSZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbGV2ZWwgb2YgYXBwbGljYXRpb24gbG9ncyB0byBrZWVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPXG4gICAqL1xuICByZWFkb25seSBhcHBsaWNhdGlvbkxvZ0xldmVsVjI/OiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbDtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbGV2ZWwgb2YgcGxhdGZvcm0gbG9ncyB0byBrZWVwIChERUJVRywgSU5GTyBvciBXQVJOKS5cbiAgICpcbiAgICogQGRlZmF1bHQgbGFtYmRhLlN5c3RlbUxvZ0xldmVsLklORk9cbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbUxvZ0xldmVsVjI/OiBsYW1iZGEuU3lzdGVtTG9nTGV2ZWw7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBgV2ViRnVuY3Rpb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBXZWJGdW5jdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE5vZGUuanMgcnVudGltZSwgZS5nLiBgbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzI0X1hgLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZTogbGFtYmRhLlJ1bnRpbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBjb2RlOiBhIHppcCBpbiBTMyAoYENvZGUuZnJvbUFzc2V0YCwgYENvZGUuZnJvbUJ1Y2tldGAsIGBDb2RlLmZyb21DdXN0b21Db21tYW5kYCwgYENvZGUuZnJvbURvY2tlckJ1aWxkYCkuXG4gICAqIElubGluZSBjb2RlIGFuZCBjb250YWluZXIgaW1hZ2VzIGFyZW4ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIFRoZSBjb2RlIGlzIGNvcGllZCBpbnRvIHRoZSBzdGFjaydzIGNvZGUgYnVja2V0LCB3aGljaCBMYW1iZGEgV2ViIEZ1bmN0aW9ucyBjYW4gcmVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGU6IGxhbWJkYS5Db2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSB0aGF0IHN0YXJ0cyB5b3VyIHNlcnZlciwgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIGNvZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdpbmRleC5qcydcbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5cG9pbnQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBBIExhbWJkYSBXZWIgRnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYkZ1bmN0aW9uIGV4dGVuZHMgSVJlc291cmNlLCBsYW1iZGEuSVdlYkZ1bmN0aW9uUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbidzIG5hbWUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHdlYkZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24ncyBBUk4uXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHdlYkZ1bmN0aW9uQXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBOb2RlLmpzIEhUVFAgc2VydmVyIHJ1bm5pbmcgYXMgYW4gQVdTIExhbWJkYSBXZWIgRnVuY3Rpb24sIHNlcnZlZCBmcm9tIG9uZSBvciBtb3JlIHJlZ2lvbnMuXG4gKlxuICogQ3JlYXRlcyB0aGUgZnVuY3Rpb24sIGl0cyBjdXJyZW50IHJldmlzaW9uIChjb2RlIGFuZCBjb25maWd1cmF0aW9uOyBhbnkgY2hhbmdlIGNyZWF0ZXMgYSBuZXcgb25lLFxuICogYW5kIHRoZSBuZXdlc3QgYHJldmlzaW9uUmV0ZW50aW9uYCBhcmUga2VwdCksIGEgZGVmYXVsdCBIVFRQUyBlbmRwb2ludCwgYW4gZXhlY3V0aW9uIHJvbGUsIGFuZCBvd25zXG4gKiB0aGUgZnVuY3Rpb24ncyBsb2cgZ3JvdXBzIGluIGV2ZXJ5IHJlZ2lvbiBpdHMgZW5kcG9pbnRzIHNlcnZlIGZyb20uXG4gKlxuICogSW1wb3J0aW5nIGV4aXN0aW5nIGZ1bmN0aW9ucyAoYGZyb21YeHhgIG1ldGhvZHMpIGlzIHBsYW5uZWQgYWZ0ZXIgMC4xLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkxhbWJkYTo6V2ViRnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYkZ1bmN0aW9uIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJV2ViRnVuY3Rpb24sIGlhbS5JR3JhbnRhYmxlIHtcbiAgcHVibGljIHJlYWRvbmx5IHdlYkZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgd2ViRnVuY3Rpb25Bcm46IHN0cmluZztcblxuICAvKiogVGhlIElEIG9mIHRoZSBjdXJyZW50IHJldmlzaW9uLiBTYW1lIGFzIGBjdXJyZW50UmV2aXNpb24ucmV2aXNpb25JZGAuICovXG4gIHB1YmxpYyByZWFkb25seSByZXZpc2lvbklkOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSByZXZpc2lvbiBidWlsdCBmcm9tIHRoZSBjdXJyZW50IGNvZGUgYW5kIGNvbmZpZ3VyYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UmV2aXNpb246IElXZWJGdW5jdGlvblJldmlzaW9uO1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBlbmRwb2ludC4gQWRkIG1vcmUgd2l0aCBgYWRkRW5kcG9pbnRgLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnQ6IFdlYkZ1bmN0aW9uRW5kcG9pbnQ7XG5cbiAgLyoqIEdyYW50cyBvbiB0aGUgZGVmYXVsdCBlbmRwb2ludCAoZS5nLiBgZ3JhbnRzLmludm9rZShwcmluY2lwYWwpYCkuIE90aGVyIGVuZHBvaW50cyBoYXZlIHRoZWlyIG93biBgZ3JhbnRzYC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50czogV2ViRnVuY3Rpb25HcmFudHM7XG5cbiAgLyoqIFRoZSBleGVjdXRpb24gcm9sZS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKiogVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0byAodGhlIGV4ZWN1dGlvbiByb2xlKS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAvKipcbiAgICogVGhlIGhvbWUtcmVnaW9uIGxvZyBncm91cCB0aGF0IHJlY2VpdmVzIHRoZSBsb2dzIG9mIGV2ZXJ5IHJlZ2lvbiB0aGUgZnVuY3Rpb24gc2VydmVzIGZyb20uXG4gICAqIFN1YnNjcmliZSB0byB0aGlzIG9uZSBvbmx5OiBlYWNoIHJlZ2lvbidzIGAubG9jYWxgIGdyb3VwIGhvbGRzIGEgY29weSBvZiB0aGUgc2FtZSBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuSUxvZ0dyb3VwO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHM6IFdlYkZ1bmN0aW9uRW5kcG9pbnRbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbW90ZUxvZ0dyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBXZWJGdW5jdGlvbkxvZ0dyb3VwPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZ09wdGlvbnM6IFBpY2s8V2ViRnVuY3Rpb25Qcm9wcywgJ2xvZ1JldGVudGlvbicgfCAnbG9nUmVtb3ZhbFBvbGljeSc+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBsYW1iZGEuQ2ZuV2ViRnVuY3Rpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV2aXNpb25DbGVhbnVwOiBSZXZpc2lvbkNsZWFudXA7XG5cbiAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoaXMgZnVuY3Rpb24sIGZvciBBUElzIHRoYXQgYWNjZXB0IGBsYW1iZGEuSVdlYkZ1bmN0aW9uUmVmYC4gKi9cbiAgcHVibGljIGdldCB3ZWJGdW5jdGlvblJlZigpOiBsYW1iZGEuV2ViRnVuY3Rpb25SZWZlcmVuY2Uge1xuICAgIHJldHVybiB7IGZ1bmN0aW9uQXJuOiB0aGlzLndlYkZ1bmN0aW9uQXJuIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogV2ViRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMucnVudGltZS5mYW1pbHkgIT09IGxhbWJkYS5SdW50aW1lRmFtaWx5Lk5PREVKUykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubm9kZS5wYXRofTogTGFtYmRhIFdlYiBGdW5jdGlvbnMgcnVuIE5vZGUuanMgb25seSwgZ290ICR7cHJvcHMucnVudGltZS5uYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCB0aW1lb3V0ID0gcHJvcHMudGltZW91dD8udG9TZWNvbmRzKCkgPz8gMzA7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQodGltZW91dCkgJiYgKHRpbWVvdXQgPCAzIHx8IHRpbWVvdXQgPiA5MDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5ub2RlLnBhdGh9OiB0aW1lb3V0IG11c3QgYmUgYmV0d2VlbiAzIHNlY29uZHMgYW5kIDE1IG1pbnV0ZXMsIGdvdCAke3RpbWVvdXR9c2ApO1xuICAgIH1cbiAgICBjb25zdCBtYXhDb25jdXJyZW5jeSA9IHByb3BzLm1heENvbmN1cnJlbmN5UGVyRW52aXJvbm1lbnQ7XG4gICAgY29uc3QgdmFsaWRDb25jdXJyZW5jeSA9IChuOiBudW1iZXIpID0+IE51bWJlci5pc0ludGVnZXIobikgJiYgbiA+PSAxICYmIG4gPD0gMTI4O1xuICAgIGlmIChtYXhDb25jdXJyZW5jeSAhPT0gdW5kZWZpbmVkICYmICFUb2tlbi5pc1VucmVzb2x2ZWQobWF4Q29uY3VycmVuY3kpICYmICF2YWxpZENvbmN1cnJlbmN5KG1heENvbmN1cnJlbmN5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubm9kZS5wYXRofTogbWF4Q29uY3VycmVuY3lQZXJFbnZpcm9ubWVudCBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxIHRvIDEyOCwgZ290ICR7bWF4Q29uY3VycmVuY3l9YCk7XG4gICAgfVxuICAgIGNvbnN0IHJldmlzaW9uUmV0ZW50aW9uID0gcHJvcHMucmV2aXNpb25SZXRlbnRpb24gPz8gMjA7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocmV2aXNpb25SZXRlbnRpb24pICYmICghTnVtYmVyLmlzSW50ZWdlcihyZXZpc2lvblJldGVudGlvbikgfHwgcmV2aXNpb25SZXRlbnRpb24gPCAxIHx8IHJldmlzaW9uUmV0ZW50aW9uID4gNTApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5ub2RlLnBhdGh9OiByZXZpc2lvblJldGVudGlvbiBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxIHRvIDUwLCBnb3QgJHtyZXZpc2lvblJldGVudGlvbn1gKTtcbiAgICB9XG4gICAgY29uc3Qgc3lzdGVtTG9nTGV2ZWxzID0gW2xhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5ERUJVRywgbGFtYmRhLlN5c3RlbUxvZ0xldmVsLklORk8sIGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5XQVJOXTtcbiAgICBpZiAocHJvcHMuc3lzdGVtTG9nTGV2ZWxWMiAhPT0gdW5kZWZpbmVkICYmICFzeXN0ZW1Mb2dMZXZlbHMuaW5jbHVkZXMocHJvcHMuc3lzdGVtTG9nTGV2ZWxWMikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5vZGUucGF0aH06IHN5c3RlbUxvZ0xldmVsVjIgbXVzdCBiZSBERUJVRywgSU5GTyBvciBXQVJOIGZvciBMYW1iZGEgV2ViIEZ1bmN0aW9uc2ApO1xuICAgIH1cblxuICAgIHRoaXMud2ViRnVuY3Rpb25OYW1lID0gcHJvcHMud2ViRnVuY3Rpb25OYW1lID8/IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNjQsIHNlcGFyYXRvcjogJy0nIH0pO1xuICAgIGFzc2VydFJlc291cmNlTmFtZSh0aGlzLCAnd2ViRnVuY3Rpb25OYW1lJywgdGhpcy53ZWJGdW5jdGlvbk5hbWUpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMuZW52aXJvbm1lbnQgPz8ge30pKSB7XG4gICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZW50cnlwb2ludCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVudmlyb25tZW50LkFXU19MQU1CREFfTk9ERUpTX0VOVFJZUE9JTlQgPSBwcm9wcy5lbnRyeXBvaW50O1xuICAgIH1cblxuICAgIHRoaXMucm9sZSA9IHByb3BzLnJvbGUgPz8gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyldLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG5cbiAgICAvLyBMb2cgZ3JvdXBzIGZpcnN0OiB0aGUgc2VydmljZSB3b3VsZCBvdGhlcndpc2UgY3JlYXRlIHRoZW0gd2l0aG91dCByZXRlbnRpb24uXG4gICAgY29uc3QgbG9nR3JvdXBOYW1lID0gYC9hd3MvbGFtYmRhL3dlYi8ke3RoaXMud2ViRnVuY3Rpb25OYW1lfWA7XG4gICAgdGhpcy5sb2dHcm91cE5hbWUgPSBsb2dHcm91cE5hbWU7XG4gICAgdGhpcy5sb2dPcHRpb25zID0geyBsb2dSZXRlbnRpb246IHByb3BzLmxvZ1JldGVudGlvbiwgbG9nUmVtb3ZhbFBvbGljeTogcHJvcHMubG9nUmVtb3ZhbFBvbGljeSB9O1xuICAgIGNvbnN0IGxvZ0dyb3VwcyA9IHRoaXMuY3JlYXRlTG9nR3JvdXBzKGxvZ0dyb3VwTmFtZSk7XG4gICAgdGhpcy5sb2dHcm91cCA9IGxvZ3MuTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZSh0aGlzLCAnTG9nR3JvdXAnLCBsb2dHcm91cE5hbWUpO1xuXG4gICAgY29uc3QgY29kZSA9IG5ldyBXZWJGdW5jdGlvbkNvZGUodGhpcywgJ0NvZGUnLCBwcm9wcy5jb2RlKS5sb2NhdGlvbjtcblxuICAgIGNvbnN0IGZuID0gbmV3IGxhbWJkYS5DZm5XZWJGdW5jdGlvbih0aGlzLCAnUmVzb3VyY2UnLCB7IGZ1bmN0aW9uTmFtZTogdGhpcy53ZWJGdW5jdGlvbk5hbWUgfSk7XG4gICAgLy8gVGhlIGZ1bmN0aW9uIGlzIGRlbGV0ZWQgYmVmb3JlIGl0cyBsb2cgZ3JvdXBzLCB3aGljaCB0aGVuIHdhaXQgZm9yIGxhdGUgZmx1c2hlcy5cbiAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGxvZ0dyb3VwcykgZm4ubm9kZS5hZGREZXBlbmRlbmN5KGdyb3VwLnJlc291cmNlKTtcbiAgICBWYWxpZGF0aW9ucy5vZihmbikuYWNrbm93bGVkZ2UoQ0ZOX1ZBTElEQVRFX1VOS05PV05fVFlQRSk7XG4gICAgdGhpcy5yZXNvdXJjZSA9IGZuO1xuICAgIHRoaXMud2ViRnVuY3Rpb25Bcm4gPSBmbi5hdHRyRnVuY3Rpb25Bcm47XG5cbiAgICBjb25zdCByZXZpc2lvbiA9IG5ldyBsYW1iZGEuQ2ZuV2ViRnVuY3Rpb25SZXZpc2lvbih0aGlzLCAnUmV2aXNpb24nLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IGZuLmF0dHJGdW5jdGlvbkFybixcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGJ1aWxkQ29uZmlnOiB7XG4gICAgICAgIGNvZGVDb25maWc6IHsgczNPYmplY3Q6IHsgYnVja2V0OiBjb2RlLmJ1Y2tldE5hbWUsIGtleTogY29kZS5vYmplY3RLZXksIHZlcnNpb25JZDogY29kZS5vYmplY3RWZXJzaW9uIH0gfSxcbiAgICAgICAgcnVudGltZUNvbmZpZzogeyBydW50aW1lOiBwcm9wcy5ydW50aW1lLm5hbWUgfSxcbiAgICAgIH0sXG4gICAgICBzZXJ2aWNlQ29uZmlnOiB7XG4gICAgICAgIGV4ZWN1dGlvblJvbGVBcm46IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiAoT2JqZWN0LmtleXModGhpcy5lbnZpcm9ubWVudCkubGVuZ3RoID4gMCA/IHsgLi4udGhpcy5lbnZpcm9ubWVudCB9IDogdW5kZWZpbmVkKSB9KSxcbiAgICAgICAgdGltZW91dFNlY29uZHM6IHRpbWVvdXQsXG4gICAgICAgIG1heENvbmN1cnJlbmN5UGVyRW52aXJvbm1lbnQ6IG1heENvbmN1cnJlbmN5LFxuICAgICAgICB0ZWxlbWV0cnlDb25maWc6IHtcbiAgICAgICAgICBsb2dnaW5nQ29uZmlnOiB7XG4gICAgICAgICAgICBsb2dHcm91cDogbG9nR3JvdXBOYW1lLFxuICAgICAgICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbDogcHJvcHMuYXBwbGljYXRpb25Mb2dMZXZlbFYyLFxuICAgICAgICAgICAgc3lzdGVtTG9nTGV2ZWw6IHByb3BzLnN5c3RlbUxvZ0xldmVsVjIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gV2FpdCBmb3IgdGhlIHJvbGUncyBwb2xpY2llcywgc28gdGhlIGZpcnN0IGVudmlyb25tZW50IHN0YXJ0cyB3aXRoIGl0cyBwZXJtaXNzaW9ucy5cbiAgICByZXZpc2lvbi5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcbiAgICBWYWxpZGF0aW9ucy5vZihyZXZpc2lvbikuYWNrbm93bGVkZ2UoQ0ZOX1ZBTElEQVRFX1VOS05PV05fVFlQRSk7XG4gICAgLy8gUmVwbGFjZWQgcmV2aXNpb25zIHN0YXkgYXMgcm9sbGJhY2sgdGFyZ2V0czsgUmV2aXNpb25DbGVhbnVwIGRlbGV0ZXMgdGhlIG9sZGVzdC4gRGVsZXRpbmcgdGhlIGZ1bmN0aW9uIGRlbGV0ZXMgdGhlbSBhbGwuXG4gICAgcmV2aXNpb24uYXBwbHlSZW1vdmFsUG9saWN5KFJlbW92YWxQb2xpY3kuUkVUQUlOKTtcbiAgICB0aGlzLnJldmlzaW9uSWQgPSByZXZpc2lvbi5hdHRyUmV2aXNpb25JZDtcbiAgICB0aGlzLmN1cnJlbnRSZXZpc2lvbiA9IFdlYkZ1bmN0aW9uUmV2aXNpb24uX2N1cnJlbnQodGhpcywgJ0N1cnJlbnRSZXZpc2lvbicsIHRoaXMsIHJldmlzaW9uLmF0dHJSZXZpc2lvbklkLCByZXZpc2lvbi5hdHRyUmV2aXNpb25Bcm4pO1xuXG4gICAgdGhpcy5yZXZpc2lvbkNsZWFudXAgPSBuZXcgUmV2aXNpb25DbGVhbnVwKHRoaXMsICdSZXZpc2lvbkNsZWFudXAnLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IHRoaXMud2ViRnVuY3Rpb25OYW1lLFxuICAgICAgZnVuY3Rpb25Bcm46IGZuLmF0dHJGdW5jdGlvbkFybixcbiAgICAgIGtlZXA6IHJldmlzaW9uUmV0ZW50aW9uLFxuICAgICAgcmV2aXNpb25JZHM6ICgpID0+IFt0aGlzLmN1cnJlbnRSZXZpc2lvbi5yZXZpc2lvbklkLCAuLi50aGlzLmVuZHBvaW50cy5mbGF0TWFwKChlKSA9PiBlLl9yZXZpc2lvbklkcygpKV0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmVuZHBvaW50ID0gdGhpcy5jcmVhdGVFbmRwb2ludCgnRW5kcG9pbnQnLCB7IC4uLnByb3BzLmVuZHBvaW50LCBhdXRoVHlwZTogcHJvcHMuYXV0aFR5cGUgfSwgJ2RlZmF1bHQnKTtcbiAgICB0aGlzLmdyYW50cyA9IHRoaXMuZW5kcG9pbnQuZ3JhbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZW5kcG9pbnQgKHVwIHRvIDEwIHBlciBmdW5jdGlvbiksIGUuZy4gYSBwdWJsaWMgb25lIG5leHQgdG8gYW4gSUFNLW9ubHkgb25lLCBvciBvbmUgcGlubmVkIHRvIGFuXG4gICAqIGVhcmxpZXIgcmV2aXNpb24uIEVhY2ggZW5kcG9pbnQgaGFzIGl0cyBvd24gVVJMLCBhdXRoZW50aWNhdGlvbiwgcmVnaW9ucyBhbmQgbGltaXRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgdGhlIGVuZHBvaW50J3MgY29uc3RydWN0IElELCBhbHNvIHVzZWQgaW4gaXRzIGdlbmVyYXRlZCBuYW1lIChgPGlkPi08aGFzaD5gKVxuICAgKi9cbiAgcHVibGljIGFkZEVuZHBvaW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IEFkZFdlYkZ1bmN0aW9uRW5kcG9pbnRPcHRpb25zKTogV2ViRnVuY3Rpb25FbmRwb2ludCB7XG4gICAgY29uc3QgcHJlZml4ID0gaWQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJykucmVwbGFjZSgvXi0rLywgJycpLnNsaWNlKDAsIDU1KS5yZXBsYWNlKC8tKyQvLCAnJykgfHwgJ2VuZHBvaW50JztcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVFbmRwb2ludChpZCwgb3B0aW9ucywgcHJlZml4LCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gTmFtZXMgc3RhcnRpbmcgd2l0aCBgQVdTX2AgYXJlIHJlc2VydmVkLlxuICAgKi9cbiAgcHVibGljIGFkZEVudmlyb25tZW50KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogV2ViRnVuY3Rpb24ge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnQVdTXycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5ub2RlLnBhdGh9OiBlbnZpcm9ubWVudCB2YXJpYWJsZSAke2tleX0gaXMgcmVzZXJ2ZWQgKG5hbWVzIHN0YXJ0aW5nIHdpdGggQVdTXyBhcmUgc2V0IGJ5IHRoZSBydW50aW1lKSR7a2V5ID09PSAnQVdTX0xBTUJEQV9OT0RFSlNfRU5UUllQT0lOVCcgPyAnOyB1c2UgdGhlIGVudHJ5cG9pbnQgcHJvcGVydHknIDogJyd9YCk7XG4gICAgfVxuICAgIHRoaXMuZW52aXJvbm1lbnRba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzdGF0ZW1lbnQgdG8gdGhlIGV4ZWN1dGlvbiByb2xlJ3MgcG9saWN5LlxuICAgKi9cbiAgcHVibGljIGFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koc3RhdGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgYGdyYW50ZWVgIHRvIGNhbGwgdGhlIGVuZHBvaW50LiBTaG9ydGN1dCBmb3IgYGdyYW50cy5pbnZva2UoZ3JhbnRlZSlgLCBhcyBvbiBgbGFtYmRhLkZ1bmN0aW9uYC5cbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRJbnZva2UoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50cy5pbnZva2UoZ3JhbnRlZSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVuZHBvaW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IEFkZFdlYkZ1bmN0aW9uRW5kcG9pbnRPcHRpb25zLCBuYW1lUHJlZml4OiBzdHJpbmcsIG5hbWVTZWVkPzogc3RyaW5nKTogV2ViRnVuY3Rpb25FbmRwb2ludCB7XG4gICAgaWYgKHRoaXMuZW5kcG9pbnRzLmxlbmd0aCA+PSBNQVhfRU5EUE9JTlRTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5ub2RlLnBhdGh9OiBhIFdlYiBGdW5jdGlvbiBjYW4gaGF2ZSBhdCBtb3N0ICR7TUFYX0VORFBPSU5UU30gZW5kcG9pbnRzYCk7XG4gICAgfVxuICAgIGNvbnN0IGVuZHBvaW50ID0gV2ViRnVuY3Rpb25FbmRwb2ludC5fY3JlYXRlKHRoaXMsIGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgd2ViRnVuY3Rpb246IHRoaXMsXG4gICAgICBjdXJyZW50UmV2aXNpb246IHRoaXMuY3VycmVudFJldmlzaW9uLFxuICAgICAgbmFtZVByZWZpeCxcbiAgICAgIG5hbWVTZWVkLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsYXNoID0gdGhpcy5lbmRwb2ludHMuZmluZCgoZSkgPT4gIVRva2VuLmlzVW5yZXNvbHZlZChlLmVuZHBvaW50TmFtZSkgJiYgZS5lbmRwb2ludE5hbWUgPT09IGVuZHBvaW50LmVuZHBvaW50TmFtZSk7XG4gICAgaWYgKGNsYXNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW5kcG9pbnQubm9kZS5wYXRofTogZW5kcG9pbnROYW1lICcke2VuZHBvaW50LmVuZHBvaW50TmFtZX0nIGlzIGFscmVhZHkgdXNlZCBieSAke2NsYXNoLm5vZGUucGF0aH1gKTtcbiAgICB9XG4gICAgdGhpcy5lbmRwb2ludHMucHVzaChlbmRwb2ludCk7XG4gICAgLy8gUmV2aXNpb25zIGFuIGVuZHBvaW50IHN0b3BzIHJvdXRpbmcgdG8gb25seSBiZWNvbWUgZGVsZXRhYmxlIG9uY2UgaXQncyB1cGRhdGVkLlxuICAgIHRoaXMucmV2aXNpb25DbGVhbnVwLm5vZGUuYWRkRGVwZW5kZW5jeShlbmRwb2ludCk7XG4gICAgLy8gRWFjaCBzZXJ2aW5nIHJlZ2lvbidzIC5sb2NhbCBncm91cCBtdXN0IGV4aXN0IGJlZm9yZSB0cmFmZmljLCBhbmQgb3V0bGl2ZSB0aGUgZnVuY3Rpb24uXG4gICAgZm9yIChjb25zdCByZWdpb24gb2YgZW5kcG9pbnQucmVnaW9ucy5zbGljZSgxKSkge1xuICAgICAgaWYgKHRoaXMucmVtb3RlTG9nR3JvdXBzLmhhcyhyZWdpb24pKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5sb2dHcm91cEluKGBMb2NhbExvZ3MtJHtyZWdpb259YCwgcmVnaW9uLCBgJHt0aGlzLmxvZ0dyb3VwTmFtZX0ubG9jYWxgKTtcbiAgICAgIHRoaXMucmVtb3RlTG9nR3JvdXBzLnNldChyZWdpb24sIGdyb3VwKTtcbiAgICAgIHRoaXMucmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KGdyb3VwLnJlc291cmNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMb2dHcm91cHMobG9nR3JvdXBOYW1lOiBzdHJpbmcpOiBXZWJGdW5jdGlvbkxvZ0dyb3VwW10ge1xuICAgIGNvbnN0IGhvbWUgPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMubG9nR3JvdXBJbignTG9ncycsIGhvbWUsIGxvZ0dyb3VwTmFtZSksXG4gICAgICB0aGlzLmxvZ0dyb3VwSW4oJ0xvY2FsTG9ncycsIGhvbWUsIGAke2xvZ0dyb3VwTmFtZX0ubG9jYWxgKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dHcm91cEluKGlkOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBXZWJGdW5jdGlvbkxvZ0dyb3VwIHtcbiAgICByZXR1cm4gbmV3IFdlYkZ1bmN0aW9uTG9nR3JvdXAodGhpcywgaWQsIHtcbiAgICAgIHJlZ2lvbixcbiAgICAgIGxvZ0dyb3VwTmFtZTogbmFtZSxcbiAgICAgIHJldGVudGlvbjogdGhpcy5sb2dPcHRpb25zLmxvZ1JldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgcmVtb3ZhbFBvbGljeTogdGhpcy5sb2dPcHRpb25zLmxvZ1JlbW92YWxQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dlYi1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXdIO0FBQ3hILHVFQUF5RDtBQUN6RCx5REFBMkM7QUFDM0MsK0RBQWlEO0FBQ2pELDJEQUE2QztBQUc3Qyx5Q0FBaUQ7QUFDakQsbURBQTBEO0FBQzFELCtDQUFrRTtBQUNsRSxpRUFBNkQ7QUFDN0QscURBQXFGO0FBQ3JGLG1FQUFtSTtBQUVuSSxtRUFBeUY7QUFFekYsOERBQThEO0FBQzlELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQXlKekI7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFROztJQUN2QixlQUFlLENBQVM7SUFDeEIsY0FBYyxDQUFTO0lBRXZDLDRFQUE0RTtJQUM1RCxVQUFVLENBQVM7SUFFbkMsa0VBQWtFO0lBQ2xELGVBQWUsQ0FBdUI7SUFFdEQseURBQXlEO0lBQ3pDLFFBQVEsQ0FBc0I7SUFFOUMsaUhBQWlIO0lBQ2pHLE1BQU0sQ0FBb0I7SUFFMUMsMEJBQTBCO0lBQ1YsSUFBSSxDQUFZO0lBRWhDLGtFQUFrRTtJQUNsRCxjQUFjLENBQWlCO0lBRS9DOzs7T0FHRztJQUNhLFFBQVEsQ0FBaUI7SUFFeEIsV0FBVyxHQUE4QixFQUFFLENBQUM7SUFDNUMsU0FBUyxHQUEwQixFQUFFLENBQUM7SUFDdEMsZUFBZSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0lBQ3pELFlBQVksQ0FBUztJQUNyQixVQUFVLENBQThEO0lBQ3hFLFFBQVEsQ0FBd0I7SUFDaEMsZUFBZSxDQUFrQjtJQUVsRCxtRkFBbUY7SUFDbkYsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxZQUFZLEtBQWdC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QUksK0JBQW1CLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUN2QyxNQUFNO1lBQ04sWUFBWSxFQUFFLElBQUk7WUFDbEIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUztZQUN2RSxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsSUFBSSwyQkFBYSxDQUFDLE1BQU07U0FDeEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUEvUUgsa0NBZ1JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIHR5cGUgSVJlc291cmNlLCBMYXp5LCBOYW1lcywgUmVtb3ZhbFBvbGljeSwgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiwgVmFsaWRhdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBXZWJGdW5jdGlvbkF1dGhUeXBlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBXZWJGdW5jdGlvbkNvZGUgfSBmcm9tICcuL3ByaXZhdGUvY29kZSc7XG5pbXBvcnQgeyBXZWJGdW5jdGlvbkxvZ0dyb3VwIH0gZnJvbSAnLi9wcml2YXRlL2xvZy1ncm91cCc7XG5pbXBvcnQgeyBERUZBVUxUX1BFUklPRCwgV0VCX05BTUVTUEFDRSB9IGZyb20gJy4vcHJpdmF0ZS9tZXRyaWNzJztcbmltcG9ydCB7IFJldmlzaW9uQ2xlYW51cCB9IGZyb20gJy4vcHJpdmF0ZS9yZXZpc2lvbi1jbGVhbnVwJztcbmltcG9ydCB7IENGTl9WQUxJREFURV9VTktOT1dOX1RZUEUsIGFzc2VydFJlc291cmNlTmFtZSB9IGZyb20gJy4vcHJpdmF0ZS92YWxpZGF0aW9uJztcbmltcG9ydCB7IFdlYkZ1bmN0aW9uRW5kcG9pbnQsIHR5cGUgQWRkV2ViRnVuY3Rpb25FbmRwb2ludE9wdGlvbnMsIHR5cGUgV2ViRnVuY3Rpb25FbmRwb2ludE9wdGlvbnMgfSBmcm9tICcuL3dlYi1mdW5jdGlvbi1lbmRwb2ludCc7XG5pbXBvcnQgeyBXZWJGdW5jdGlvbkdyYW50cyB9IGZyb20gJy4vd2ViLWZ1bmN0aW9uLWdyYW50cyc7XG5pbXBvcnQgeyBXZWJGdW5jdGlvblJldmlzaW9uLCB0eXBlIElXZWJGdW5jdGlvblJldmlzaW9uIH0gZnJvbSAnLi93ZWItZnVuY3Rpb24tcmV2aXNpb24nO1xuXG4vKiogRW5kcG9pbnRzIHBlciBmdW5jdGlvbiAoc2VydmljZSBxdW90YSwgbm90IGFkanVzdGFibGUpLiAqL1xuY29uc3QgTUFYX0VORFBPSU5UUyA9IDEwO1xuXG4vKipcbiAqIE9wdGlvbnMgc2hhcmVkIGJ5IGBXZWJGdW5jdGlvbmAgYW5kIGBOb2RlanNXZWJGdW5jdGlvbmA6IGV2ZXJ5dGhpbmcgZXhjZXB0IGhvdyB0aGUgY29kZSBpcyBzdXBwbGllZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJGdW5jdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogSG93IGNhbGxlcnMgb2YgdGhlIGVuZHBvaW50IGFyZSBhdXRoZW50aWNhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aFR5cGU6IFdlYkZ1bmN0aW9uQXV0aFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGVuZHBvaW50IChgZm4uZW5kcG9pbnRgKTogd2hlcmUgaXQgc2VydmVzIGZyb20sIGl0cyBuYW1lIGFuZCBsaW1pdHMuXG4gICAqIEl0IHNlcnZlcyB0aGUgY3VycmVudCByZXZpc2lvbjsgcm91dGUgaXQgZWxzZXdoZXJlIHdpdGggYGZuLmVuZHBvaW50LnJvdXRlVHJhZmZpYygpYC5cbiAgICogQWRkIG1vcmUgZW5kcG9pbnRzIHdpdGggYGFkZEVuZHBvaW50YC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIEhPTUVfUkVHSU9OIGVuZHBvaW50IHNlcnZpbmcgdGhlIGN1cnJlbnQgcmV2aXNpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50PzogV2ViRnVuY3Rpb25FbmRwb2ludE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IG9mIHRoZSBuZXdlc3QgcmV2aXNpb25zIHRvIGtlZXAgKDEtNTApLiBFYWNoIGRlcGxveW1lbnQgdGhhdCBjaGFuZ2VzIHRoZSBjb2RlIG9yXG4gICAqIGNvbmZpZ3VyYXRpb24gY3JlYXRlcyBhIHJldmlzaW9uOyBvbGRlciBvbmVzIHN0YXkgYXZhaWxhYmxlIHRvIHJvbGwgYmFjayB0byBvciByb3V0ZSB0cmFmZmljIHRvLFxuICAgKiBhbmQgdGhlIG9sZGVzdCBiZXlvbmQgdGhpcyBjb3VudCBhcmUgZGVsZXRlZCBhZnRlciBlYWNoIGRlcGxveW1lbnQuXG4gICAqXG4gICAqIFJldmlzaW9ucyB0aGF0IGFuIGVuZHBvaW50IHJvdXRlcyB0byBhcmUgbmV2ZXIgZGVsZXRlZCwgYW5kIG5laXRoZXIgYXJlIHRob3NlIHRoZSBwcmV2aW91c1xuICAgKiBkZXBsb3ltZW50IHVzZWQgKGEgcm9sbGJhY2sgcmV0dXJucyB0byB0aGVtKS5cbiAgICpcbiAgICogQGRlZmF1bHQgMjBcbiAgICovXG4gIHJlYWRvbmx5IHJldmlzaW9uUmV0ZW50aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24ncyBuYW1lLiBSZW5hbWluZyBhIGZ1bmN0aW9uIHJlcGxhY2VzIGl0LCBhbmQgaXRzIGVuZHBvaW50IGdldHMgYSBuZXcgVVJMLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgdW5pcXVlIG5hbWUgZ2VuZXJhdGVkIGZyb20gdGhlIGNvbnN0cnVjdCBwYXRoIChtb3ZpbmcgdGhlIGNvbnN0cnVjdCBjaGFuZ2VzIGl0KVxuICAgKi9cbiAgcmVhZG9ubHkgd2ViRnVuY3Rpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvbidzIGNvZGUgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0aW9uIHJvbGUuXG4gICAqXG4gICAqIEFuIGBpYW0uSVJvbGVgIChub3QgYElSb2xlUmVmYCkgYmVjYXVzZSB0aGUgZnVuY3Rpb24gYWRkcyBzdGF0ZW1lbnRzIHRvIGl0IGFuZCBncmFudHMgdGhyb3VnaCBpdC5cbiAgICogW2Rpc2FibGUtYXdzbGludDpwcmVmZXItcmVmLWludGVyZmFjZV1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIHJvbGUgdHJ1c3RpbmcgYGxhbWJkYS5hbWF6b25hd3MuY29tYCB3aXRoIGBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVgXG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMuIE5hbWVzIHN0YXJ0aW5nIHdpdGggYEFXU19gIGFyZSByZXNlcnZlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIGEgc2luZ2xlIHJlcXVlc3QgbWF5IHJ1bi5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogSG93IG1hbnkgcmVxdWVzdHMgb25lIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBoYW5kbGVzIGF0IHRoZSBzYW1lIHRpbWUgKDEtMTI4KS5cbiAgICogUmVxdWVzdHMgc2hhcmUgbW9kdWxlLWxldmVsIHN0YXRlLCBzbyBoYW5kbGVycyBtdXN0IGJlIGNvbmN1cnJlbmN5LXNhZmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDY0XG4gICAqL1xuICByZWFkb25seSBtYXhDb25jdXJyZW5jeVBlckVudmlyb25tZW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXRlbnRpb24gZm9yIGV2ZXJ5IGxvZyBncm91cCBvZiB0aGUgZnVuY3Rpb24sIGluIGV2ZXJ5IHJlZ2lvbiBpdCBzZXJ2ZXMgZnJvbS5cbiAgICpcbiAgICogQGRlZmF1bHQgbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogbG9ncy5SZXRlbnRpb25EYXlzO1xuXG4gIC8qKlxuICAgKiBXaGF0IGhhcHBlbnMgdG8gdGhlIGxvZyBncm91cHMgd2hlbiB0aGUgZnVuY3Rpb24gaXMgcmVtb3ZlZDogUkVUQUlOIG9yIERFU1RST1kuXG4gICAqIFdpdGggREVTVFJPWSwgZGVsZXRpb24gd2FpdHMgYWJvdXQgYSBtaW51dGUgZm9yIGVudmlyb25tZW50cyB0byBmbHVzaCB0aGVpciBsYXN0IGxpbmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZW1vdmFsUG9saWN5LlJFVEFJTlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIGxldmVsIG9mIGFwcGxpY2F0aW9uIGxvZ3MgdG8ga2VlcC5cbiAgICpcbiAgICogQGRlZmF1bHQgbGFtYmRhLkFwcGxpY2F0aW9uTG9nTGV2ZWwuSU5GT1xuICAgKi9cbiAgcmVhZG9ubHkgYXBwbGljYXRpb25Mb2dMZXZlbFYyPzogbGFtYmRhLkFwcGxpY2F0aW9uTG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIGxldmVsIG9mIHBsYXRmb3JtIGxvZ3MgdG8ga2VlcCAoREVCVUcsIElORk8gb3IgV0FSTikuXG4gICAqXG4gICAqIEBkZWZhdWx0IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPXG4gICAqL1xuICByZWFkb25seSBzeXN0ZW1Mb2dMZXZlbFYyPzogbGFtYmRhLlN5c3RlbUxvZ0xldmVsO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgYFdlYkZ1bmN0aW9uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJGdW5jdGlvblByb3BzIGV4dGVuZHMgV2ViRnVuY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBOb2RlLmpzIHJ1bnRpbWUsIGUuZy4gYGxhbWJkYS5SdW50aW1lLk5PREVKU18yNF9YYC5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgY29kZTogYSB6aXAgaW4gUzMgKGBDb2RlLmZyb21Bc3NldGAsIGBDb2RlLmZyb21CdWNrZXRgLCBgQ29kZS5mcm9tQ3VzdG9tQ29tbWFuZGAsIGBDb2RlLmZyb21Eb2NrZXJCdWlsZGApLlxuICAgKiBJbmxpbmUgY29kZSBhbmQgY29udGFpbmVyIGltYWdlcyBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBUaGUgY29kZSBpcyBjb3BpZWQgaW50byB0aGUgc3RhY2sncyBjb2RlIGJ1Y2tldCwgd2hpY2ggTGFtYmRhIFdlYiBGdW5jdGlvbnMgY2FuIHJlYWQuXG4gICAqL1xuICByZWFkb25seSBjb2RlOiBsYW1iZGEuQ29kZTtcblxuICAvKipcbiAgICogVGhlIGZpbGUgdGhhdCBzdGFydHMgeW91ciBzZXJ2ZXIsIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBjb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnaW5kZXguanMnXG4gICAqL1xuICByZWFkb25seSBlbnRyeXBvaW50Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQSBMYW1iZGEgV2ViIEZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElXZWJGdW5jdGlvbiBleHRlbmRzIElSZXNvdXJjZSwgbGFtYmRhLklXZWJGdW5jdGlvblJlZiB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24ncyBuYW1lLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB3ZWJGdW5jdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uJ3MgQVJOLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB3ZWJGdW5jdGlvbkFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgTm9kZS5qcyBIVFRQIHNlcnZlciBydW5uaW5nIGFzIGFuIEFXUyBMYW1iZGEgV2ViIEZ1bmN0aW9uLCBzZXJ2ZWQgZnJvbSBvbmUgb3IgbW9yZSByZWdpb25zLlxuICpcbiAqIENyZWF0ZXMgdGhlIGZ1bmN0aW9uLCBpdHMgY3VycmVudCByZXZpc2lvbiAoY29kZSBhbmQgY29uZmlndXJhdGlvbjsgYW55IGNoYW5nZSBjcmVhdGVzIGEgbmV3IG9uZSxcbiAqIGFuZCB0aGUgbmV3ZXN0IGByZXZpc2lvblJldGVudGlvbmAgYXJlIGtlcHQpLCBhIGRlZmF1bHQgSFRUUFMgZW5kcG9pbnQsIGFuIGV4ZWN1dGlvbiByb2xlLCBhbmQgb3duc1xuICogdGhlIGZ1bmN0aW9uJ3MgbG9nIGdyb3VwcyBpbiBldmVyeSByZWdpb24gaXRzIGVuZHBvaW50cyBzZXJ2ZSBmcm9tLlxuICpcbiAqIEltcG9ydGluZyBleGlzdGluZyBmdW5jdGlvbnMgKGBmcm9tWHh4YCBtZXRob2RzKSBpcyBwbGFubmVkIGFmdGVyIDAuMS5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpMYW1iZGE6OldlYkZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJGdW5jdGlvbiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVdlYkZ1bmN0aW9uLCBpYW0uSUdyYW50YWJsZSB7XG4gIHB1YmxpYyByZWFkb25seSB3ZWJGdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHdlYkZ1bmN0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBJRCBvZiB0aGUgY3VycmVudCByZXZpc2lvbi4gU2FtZSBhcyBgY3VycmVudFJldmlzaW9uLnJldmlzaW9uSWRgLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmV2aXNpb25JZDogc3RyaW5nO1xuXG4gIC8qKiBUaGUgcmV2aXNpb24gYnVpbHQgZnJvbSB0aGUgY3VycmVudCBjb2RlIGFuZCBjb25maWd1cmF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudFJldmlzaW9uOiBJV2ViRnVuY3Rpb25SZXZpc2lvbjtcblxuICAvKiogVGhlIGRlZmF1bHQgZW5kcG9pbnQuIEFkZCBtb3JlIHdpdGggYGFkZEVuZHBvaW50YC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50OiBXZWJGdW5jdGlvbkVuZHBvaW50O1xuXG4gIC8qKiBHcmFudHMgb24gdGhlIGRlZmF1bHQgZW5kcG9pbnQgKGUuZy4gYGdyYW50cy5pbnZva2UocHJpbmNpcGFsKWApLiBPdGhlciBlbmRwb2ludHMgaGF2ZSB0aGVpciBvd24gYGdyYW50c2AuICovXG4gIHB1YmxpYyByZWFkb25seSBncmFudHM6IFdlYkZ1bmN0aW9uR3JhbnRzO1xuXG4gIC8qKiBUaGUgZXhlY3V0aW9uIHJvbGUuICovXG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG5cbiAgLyoqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG8gKHRoZSBleGVjdXRpb24gcm9sZSkuICovXG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIFRoZSBob21lLXJlZ2lvbiBsb2cgZ3JvdXAgdGhhdCByZWNlaXZlcyB0aGUgbG9ncyBvZiBldmVyeSByZWdpb24gdGhlIGZ1bmN0aW9uIHNlcnZlcyBmcm9tLlxuICAgKiBTdWJzY3JpYmUgdG8gdGhpcyBvbmUgb25seTogZWFjaCByZWdpb24ncyBgLmxvY2FsYCBncm91cCBob2xkcyBhIGNvcHkgb2YgdGhlIHNhbWUgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvZ0dyb3VwOiBsb2dzLklMb2dHcm91cDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGVudmlyb25tZW50OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzOiBXZWJGdW5jdGlvbkVuZHBvaW50W10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSByZW1vdGVMb2dHcm91cHMgPSBuZXcgTWFwPHN0cmluZywgV2ViRnVuY3Rpb25Mb2dHcm91cD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dHcm91cE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dPcHRpb25zOiBQaWNrPFdlYkZ1bmN0aW9uUHJvcHMsICdsb2dSZXRlbnRpb24nIHwgJ2xvZ1JlbW92YWxQb2xpY3knPjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogbGFtYmRhLkNmbldlYkZ1bmN0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHJldmlzaW9uQ2xlYW51cDogUmV2aXNpb25DbGVhbnVwO1xuXG4gIC8qKiBBIHJlZmVyZW5jZSB0byB0aGlzIGZ1bmN0aW9uLCBmb3IgQVBJcyB0aGF0IGFjY2VwdCBgbGFtYmRhLklXZWJGdW5jdGlvblJlZmAuICovXG4gIHB1YmxpYyBnZXQgd2ViRnVuY3Rpb25SZWYoKTogbGFtYmRhLldlYkZ1bmN0aW9uUmVmZXJlbmNlIHtcbiAgICByZXR1cm4geyBmdW5jdGlvbkFybjogdGhpcy53ZWJGdW5jdGlvbkFybiB9O1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFdlYkZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzLnJ1bnRpbWUuZmFtaWx5ICE9PSBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5vZGUucGF0aH06IExhbWJkYSBXZWIgRnVuY3Rpb25zIHJ1biBOb2RlLmpzIG9ubHksIGdvdCAke3Byb3BzLnJ1bnRpbWUubmFtZX1gKTtcbiAgICB9XG4gICAgY29uc3QgdGltZW91dCA9IHByb3BzLnRpbWVvdXQ/LnRvU2Vjb25kcygpID8/IDMwO1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHRpbWVvdXQpICYmICh0aW1lb3V0IDwgMyB8fCB0aW1lb3V0ID4gOTAwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubm9kZS5wYXRofTogdGltZW91dCBtdXN0IGJlIGJldHdlZW4gMyBzZWNvbmRzIGFuZCAxNSBtaW51dGVzLCBnb3QgJHt0aW1lb3V0fXNgKTtcbiAgICB9XG4gICAgY29uc3QgbWF4Q29uY3VycmVuY3kgPSBwcm9wcy5tYXhDb25jdXJyZW5jeVBlckVudmlyb25tZW50O1xuICAgIGNvbnN0IHZhbGlkQ29uY3VycmVuY3kgPSAobjogbnVtYmVyKSA9PiBOdW1iZXIuaXNJbnRlZ2VyKG4pICYmIG4gPj0gMSAmJiBuIDw9IDEyODtcbiAgICBpZiAobWF4Q29uY3VycmVuY3kgIT09IHVuZGVmaW5lZCAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKG1heENvbmN1cnJlbmN5KSAmJiAhdmFsaWRDb25jdXJyZW5jeShtYXhDb25jdXJyZW5jeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5vZGUucGF0aH06IG1heENvbmN1cnJlbmN5UGVyRW52aXJvbm1lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMSB0byAxMjgsIGdvdCAke21heENvbmN1cnJlbmN5fWApO1xuICAgIH1cbiAgICBjb25zdCByZXZpc2lvblJldGVudGlvbiA9IHByb3BzLnJldmlzaW9uUmV0ZW50aW9uID8/IDIwO1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHJldmlzaW9uUmV0ZW50aW9uKSAmJiAoIU51bWJlci5pc0ludGVnZXIocmV2aXNpb25SZXRlbnRpb24pIHx8IHJldmlzaW9uUmV0ZW50aW9uIDwgMSB8fCByZXZpc2lvblJldGVudGlvbiA+IDUwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubm9kZS5wYXRofTogcmV2aXNpb25SZXRlbnRpb24gbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMSB0byA1MCwgZ290ICR7cmV2aXNpb25SZXRlbnRpb259YCk7XG4gICAgfVxuICAgIGNvbnN0IHN5c3RlbUxvZ0xldmVscyA9IFtsYW1iZGEuU3lzdGVtTG9nTGV2ZWwuREVCVUcsIGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLCBsYW1iZGEuU3lzdGVtTG9nTGV2ZWwuV0FSTl07XG4gICAgaWYgKHByb3BzLnN5c3RlbUxvZ0xldmVsVjIgIT09IHVuZGVmaW5lZCAmJiAhc3lzdGVtTG9nTGV2ZWxzLmluY2x1ZGVzKHByb3BzLnN5c3RlbUxvZ0xldmVsVjIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5ub2RlLnBhdGh9OiBzeXN0ZW1Mb2dMZXZlbFYyIG11c3QgYmUgREVCVUcsIElORk8gb3IgV0FSTiBmb3IgTGFtYmRhIFdlYiBGdW5jdGlvbnNgKTtcbiAgICB9XG5cbiAgICB0aGlzLndlYkZ1bmN0aW9uTmFtZSA9IHByb3BzLndlYkZ1bmN0aW9uTmFtZSA/PyBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDY0LCBzZXBhcmF0b3I6ICctJyB9KTtcbiAgICBhc3NlcnRSZXNvdXJjZU5hbWUodGhpcywgJ3dlYkZ1bmN0aW9uTmFtZScsIHRoaXMud2ViRnVuY3Rpb25OYW1lKTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLmVudmlyb25tZW50ID8/IHt9KSkge1xuICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmVudHJ5cG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lbnZpcm9ubWVudC5BV1NfTEFNQkRBX05PREVKU19FTlRSWVBPSU5UID0gcHJvcHMuZW50cnlwb2ludDtcbiAgICB9XG5cbiAgICB0aGlzLnJvbGUgPSBwcm9wcy5yb2xlID8/IG5ldyBpYW0uUm9sZSh0aGlzLCAnU2VydmljZVJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpXSxcbiAgICB9KTtcbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5yb2xlO1xuXG4gICAgLy8gTG9nIGdyb3VwcyBmaXJzdDogdGhlIHNlcnZpY2Ugd291bGQgb3RoZXJ3aXNlIGNyZWF0ZSB0aGVtIHdpdGhvdXQgcmV0ZW50aW9uLlxuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2xhbWJkYS93ZWIvJHt0aGlzLndlYkZ1bmN0aW9uTmFtZX1gO1xuICAgIHRoaXMubG9nR3JvdXBOYW1lID0gbG9nR3JvdXBOYW1lO1xuICAgIHRoaXMubG9nT3B0aW9ucyA9IHsgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24sIGxvZ1JlbW92YWxQb2xpY3k6IHByb3BzLmxvZ1JlbW92YWxQb2xpY3kgfTtcbiAgICBjb25zdCBsb2dHcm91cHMgPSB0aGlzLmNyZWF0ZUxvZ0dyb3Vwcyhsb2dHcm91cE5hbWUpO1xuICAgIHRoaXMubG9nR3JvdXAgPSBsb2dzLkxvZ0dyb3VwLmZyb21Mb2dHcm91cE5hbWUodGhpcywgJ0xvZ0dyb3VwJywgbG9nR3JvdXBOYW1lKTtcblxuICAgIGNvbnN0IGNvZGUgPSBuZXcgV2ViRnVuY3Rpb25Db2RlKHRoaXMsICdDb2RlJywgcHJvcHMuY29kZSkubG9jYXRpb247XG5cbiAgICBjb25zdCBmbiA9IG5ldyBsYW1iZGEuQ2ZuV2ViRnVuY3Rpb24odGhpcywgJ1Jlc291cmNlJywgeyBmdW5jdGlvbk5hbWU6IHRoaXMud2ViRnVuY3Rpb25OYW1lIH0pO1xuICAgIC8vIFRoZSBmdW5jdGlvbiBpcyBkZWxldGVkIGJlZm9yZSBpdHMgbG9nIGdyb3Vwcywgd2hpY2ggdGhlbiB3YWl0IGZvciBsYXRlIGZsdXNoZXMuXG4gICAgZm9yIChjb25zdCBncm91cCBvZiBsb2dHcm91cHMpIGZuLm5vZGUuYWRkRGVwZW5kZW5jeShncm91cC5yZXNvdXJjZSk7XG4gICAgVmFsaWRhdGlvbnMub2YoZm4pLmFja25vd2xlZGdlKENGTl9WQUxJREFURV9VTktOT1dOX1RZUEUpO1xuICAgIHRoaXMucmVzb3VyY2UgPSBmbjtcbiAgICB0aGlzLndlYkZ1bmN0aW9uQXJuID0gZm4uYXR0ckZ1bmN0aW9uQXJuO1xuXG4gICAgY29uc3QgcmV2aXNpb24gPSBuZXcgbGFtYmRhLkNmbldlYkZ1bmN0aW9uUmV2aXNpb24odGhpcywgJ1JldmlzaW9uJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBmbi5hdHRyRnVuY3Rpb25Bcm4sXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBidWlsZENvbmZpZzoge1xuICAgICAgICBjb2RlQ29uZmlnOiB7IHMzT2JqZWN0OiB7IGJ1Y2tldDogY29kZS5idWNrZXROYW1lLCBrZXk6IGNvZGUub2JqZWN0S2V5LCB2ZXJzaW9uSWQ6IGNvZGUub2JqZWN0VmVyc2lvbiB9IH0sXG4gICAgICAgIHJ1bnRpbWVDb25maWc6IHsgcnVudGltZTogcHJvcHMucnVudGltZS5uYW1lIH0sXG4gICAgICB9LFxuICAgICAgc2VydmljZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25Sb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IExhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gKE9iamVjdC5rZXlzKHRoaXMuZW52aXJvbm1lbnQpLmxlbmd0aCA+IDAgPyB7IC4uLnRoaXMuZW52aXJvbm1lbnQgfSA6IHVuZGVmaW5lZCkgfSksXG4gICAgICAgIHRpbWVvdXRTZWNvbmRzOiB0aW1lb3V0LFxuICAgICAgICBtYXhDb25jdXJyZW5jeVBlckVudmlyb25tZW50OiBtYXhDb25jdXJyZW5jeSxcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlnOiB7XG4gICAgICAgICAgbG9nZ2luZ0NvbmZpZzoge1xuICAgICAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWw6IHByb3BzLmFwcGxpY2F0aW9uTG9nTGV2ZWxWMixcbiAgICAgICAgICAgIHN5c3RlbUxvZ0xldmVsOiBwcm9wcy5zeXN0ZW1Mb2dMZXZlbFYyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIC8vIFdhaXQgZm9yIHRoZSByb2xlJ3MgcG9saWNpZXMsIHNvIHRoZSBmaXJzdCBlbnZpcm9ubWVudCBzdGFydHMgd2l0aCBpdHMgcGVybWlzc2lvbnMuXG4gICAgcmV2aXNpb24ubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMucm9sZSk7XG4gICAgVmFsaWRhdGlvbnMub2YocmV2aXNpb24pLmFja25vd2xlZGdlKENGTl9WQUxJREFURV9VTktOT1dOX1RZUEUpO1xuICAgIC8vIFJlcGxhY2VkIHJldmlzaW9ucyBzdGF5IGFzIHJvbGxiYWNrIHRhcmdldHM7IFJldmlzaW9uQ2xlYW51cCBkZWxldGVzIHRoZSBvbGRlc3QuIERlbGV0aW5nIHRoZSBmdW5jdGlvbiBkZWxldGVzIHRoZW0gYWxsLlxuICAgIHJldmlzaW9uLmFwcGx5UmVtb3ZhbFBvbGljeShSZW1vdmFsUG9saWN5LlJFVEFJTik7XG4gICAgdGhpcy5yZXZpc2lvbklkID0gcmV2aXNpb24uYXR0clJldmlzaW9uSWQ7XG4gICAgdGhpcy5jdXJyZW50UmV2aXNpb24gPSBXZWJGdW5jdGlvblJldmlzaW9uLl9jdXJyZW50KHRoaXMsICdDdXJyZW50UmV2aXNpb24nLCB0aGlzLCByZXZpc2lvbi5hdHRyUmV2aXNpb25JZCwgcmV2aXNpb24uYXR0clJldmlzaW9uQXJuKTtcblxuICAgIHRoaXMucmV2aXNpb25DbGVhbnVwID0gbmV3IFJldmlzaW9uQ2xlYW51cCh0aGlzLCAnUmV2aXNpb25DbGVhbnVwJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiB0aGlzLndlYkZ1bmN0aW9uTmFtZSxcbiAgICAgIGZ1bmN0aW9uQXJuOiBmbi5hdHRyRnVuY3Rpb25Bcm4sXG4gICAgICBrZWVwOiByZXZpc2lvblJldGVudGlvbixcbiAgICAgIHJldmlzaW9uSWRzOiAoKSA9PiBbdGhpcy5jdXJyZW50UmV2aXNpb24ucmV2aXNpb25JZCwgLi4udGhpcy5lbmRwb2ludHMuZmxhdE1hcCgoZSkgPT4gZS5fcmV2aXNpb25JZHMoKSldLFxuICAgIH0pO1xuXG4gICAgdGhpcy5lbmRwb2ludCA9IHRoaXMuY3JlYXRlRW5kcG9pbnQoJ0VuZHBvaW50JywgeyAuLi5wcm9wcy5lbmRwb2ludCwgYXV0aFR5cGU6IHByb3BzLmF1dGhUeXBlIH0sICdkZWZhdWx0Jyk7XG4gICAgdGhpcy5ncmFudHMgPSB0aGlzLmVuZHBvaW50LmdyYW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVuZHBvaW50ICh1cCB0byAxMCBwZXIgZnVuY3Rpb24pLCBlLmcuIGEgcHVibGljIG9uZSBuZXh0IHRvIGFuIElBTS1vbmx5IG9uZSwgb3Igb25lIHBpbm5lZCB0byBhblxuICAgKiBlYXJsaWVyIHJldmlzaW9uLiBFYWNoIGVuZHBvaW50IGhhcyBpdHMgb3duIFVSTCwgYXV0aGVudGljYXRpb24sIHJlZ2lvbnMgYW5kIGxpbWl0cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIHRoZSBlbmRwb2ludCdzIGNvbnN0cnVjdCBJRCwgYWxzbyB1c2VkIGluIGl0cyBnZW5lcmF0ZWQgbmFtZSAoYDxpZD4tPGhhc2g+YClcbiAgICovXG4gIHB1YmxpYyBhZGRFbmRwb2ludChpZDogc3RyaW5nLCBvcHRpb25zOiBBZGRXZWJGdW5jdGlvbkVuZHBvaW50T3B0aW9ucyk6IFdlYkZ1bmN0aW9uRW5kcG9pbnQge1xuICAgIGNvbnN0IHByZWZpeCA9IGlkLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpLnJlcGxhY2UoL14tKy8sICcnKS5zbGljZSgwLCA1NSkucmVwbGFjZSgvLSskLywgJycpIHx8ICdlbmRwb2ludCc7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRW5kcG9pbnQoaWQsIG9wdGlvbnMsIHByZWZpeCwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIE5hbWVzIHN0YXJ0aW5nIHdpdGggYEFXU19gIGFyZSByZXNlcnZlZC5cbiAgICovXG4gIHB1YmxpYyBhZGRFbnZpcm9ubWVudChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFdlYkZ1bmN0aW9uIHtcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ0FXU18nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubm9kZS5wYXRofTogZW52aXJvbm1lbnQgdmFyaWFibGUgJHtrZXl9IGlzIHJlc2VydmVkIChuYW1lcyBzdGFydGluZyB3aXRoIEFXU18gYXJlIHNldCBieSB0aGUgcnVudGltZSkke2tleSA9PT0gJ0FXU19MQU1CREFfTk9ERUpTX0VOVFJZUE9JTlQnID8gJzsgdXNlIHRoZSBlbnRyeXBvaW50IHByb3BlcnR5JyA6ICcnfWApO1xuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50W2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3RhdGVtZW50IHRvIHRoZSBleGVjdXRpb24gcm9sZSdzIHBvbGljeS5cbiAgICovXG4gIHB1YmxpYyBhZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50OiBpYW0uUG9saWN5U3RhdGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIGBncmFudGVlYCB0byBjYWxsIHRoZSBlbmRwb2ludC4gU2hvcnRjdXQgZm9yIGBncmFudHMuaW52b2tlKGdyYW50ZWUpYCwgYXMgb24gYGxhbWJkYS5GdW5jdGlvbmAuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50SW52b2tlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudHMuaW52b2tlKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgbWV0cmljIG9mIHRoaXMgZnVuY3Rpb24ncyBleGVjdXRpb24gZW52aXJvbm1lbnRzIGluIGBBV1MvTGFtYmRhL1dlYmAgKGRpbWVuc2lvbiBgRnVuY3Rpb25OYW1lYCksIGFjcm9zcyBhbGwgZW5kcG9pbnRzLlxuICAgKiBGb3IgcmVxdWVzdCBhbmQgZXJyb3IgY291bnRzLCB1c2UgdGhlIGVuZHBvaW50J3MgbWV0cmljcyAoYGZuLmVuZHBvaW50Lm1ldHJpY1JlcXVlc3RzKClgKS5cbiAgICpcbiAgICogTWV0cmljcyBhcmUgcHVibGlzaGVkIGluIHRoZSByZWdpb24gdGhhdCBzZXJ2ZWQgdGhlIHJlcXVlc3Q6IHBhc3MgYHJlZ2lvbmAgZm9yIGFub3RoZXIgc2VydmluZyByZWdpb24uXG4gICAqIEFuIGFsYXJtIGNhbiBvbmx5IHVzZSBtZXRyaWNzIGZyb20gaXRzIG93biBzdGFjaydzIHJlZ2lvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciAxIG1pbnV0ZSwgaW4gdGhlIGhvbWUgcmVnaW9uXG4gICAqL1xuICBwdWJsaWMgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6IFdFQl9OQU1FU1BBQ0UsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBGdW5jdGlvbk5hbWU6IHRoaXMud2ViRnVuY3Rpb25OYW1lIH0sXG4gICAgICBzdGF0aXN0aWM6IGNsb3Vkd2F0Y2guU3RhdHMuU1VNLFxuICAgICAgcGVyaW9kOiBERUZBVUxUX1BFUklPRCxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFRpbWUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudHMgd2VyZSBhY3RpdmUgKGBFbnZpcm9ubWVudEFjdGl2ZVRpbWVgKS4gKi9cbiAgcHVibGljIG1ldHJpY0FjdGl2ZVRpbWUocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdFbnZpcm9ubWVudEFjdGl2ZVRpbWUnLCBwcm9wcyk7XG4gIH1cblxuICAvKiogQ1BVIHRpbWUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudHMgdXNlZCAoYEVudmlyb25tZW50Q1BVVGltZWApLiAqL1xuICBwdWJsaWMgbWV0cmljQ3B1VGltZShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0Vudmlyb25tZW50Q1BVVGltZScsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBhbiBleGVjdXRpb24gZW52aXJvbm1lbnQgaGFuZGxlZCBhdCBvbmNlIChgRW52aXJvbm1lbnRDb25jdXJyZW50UmVxdWVzdHNgKSwgdG8gY29tcGFyZSB3aXRoXG4gICAqIGBtYXhDb25jdXJyZW5jeVBlckVudmlyb25tZW50YC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBtYXhpbXVtIG92ZXIgMSBtaW51dGVcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDb25jdXJyZW50UmVxdWVzdHMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdFbnZpcm9ubWVudENvbmN1cnJlbnRSZXF1ZXN0cycsIHsgc3RhdGlzdGljOiBjbG91ZHdhdGNoLlN0YXRzLk1BWElNVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlYWsgbWVtb3J5IGFuIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCB1c2VkIChgRW52aXJvbm1lbnRNYXhNZW1vcnlVc2FnZWApOyBlYWNoIGVudmlyb25tZW50IGhhcyAyIEdCLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG1heGltdW0gb3ZlciAxIG1pbnV0ZVxuICAgKi9cbiAgcHVibGljIG1ldHJpY01heE1lbW9yeVVzYWdlKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnRW52aXJvbm1lbnRNYXhNZW1vcnlVc2FnZScsIHsgc3RhdGlzdGljOiBjbG91ZHdhdGNoLlN0YXRzLk1BWElNVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqIEJ5dGVzIHNlbnQgaW4gcmVzcG9uc2VzIChgUmVzcG9uc2VCeXRlc2ApLiAqL1xuICBwdWJsaWMgbWV0cmljUmVzcG9uc2VCeXRlcyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1Jlc3BvbnNlQnl0ZXMnLCBwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVuZHBvaW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IEFkZFdlYkZ1bmN0aW9uRW5kcG9pbnRPcHRpb25zLCBuYW1lUHJlZml4OiBzdHJpbmcsIG5hbWVTZWVkPzogc3RyaW5nKTogV2ViRnVuY3Rpb25FbmRwb2ludCB7XG4gICAgaWYgKHRoaXMuZW5kcG9pbnRzLmxlbmd0aCA+PSBNQVhfRU5EUE9JTlRTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5ub2RlLnBhdGh9OiBhIFdlYiBGdW5jdGlvbiBjYW4gaGF2ZSBhdCBtb3N0ICR7TUFYX0VORFBPSU5UU30gZW5kcG9pbnRzYCk7XG4gICAgfVxuICAgIGNvbnN0IGVuZHBvaW50ID0gV2ViRnVuY3Rpb25FbmRwb2ludC5fY3JlYXRlKHRoaXMsIGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgd2ViRnVuY3Rpb246IHRoaXMsXG4gICAgICBjdXJyZW50UmV2aXNpb246IHRoaXMuY3VycmVudFJldmlzaW9uLFxuICAgICAgbmFtZVByZWZpeCxcbiAgICAgIG5hbWVTZWVkLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsYXNoID0gdGhpcy5lbmRwb2ludHMuZmluZCgoZSkgPT4gIVRva2VuLmlzVW5yZXNvbHZlZChlLmVuZHBvaW50TmFtZSkgJiYgZS5lbmRwb2ludE5hbWUgPT09IGVuZHBvaW50LmVuZHBvaW50TmFtZSk7XG4gICAgaWYgKGNsYXNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW5kcG9pbnQubm9kZS5wYXRofTogZW5kcG9pbnROYW1lICcke2VuZHBvaW50LmVuZHBvaW50TmFtZX0nIGlzIGFscmVhZHkgdXNlZCBieSAke2NsYXNoLm5vZGUucGF0aH1gKTtcbiAgICB9XG4gICAgdGhpcy5lbmRwb2ludHMucHVzaChlbmRwb2ludCk7XG4gICAgLy8gUmV2aXNpb25zIGFuIGVuZHBvaW50IHN0b3BzIHJvdXRpbmcgdG8gb25seSBiZWNvbWUgZGVsZXRhYmxlIG9uY2UgaXQncyB1cGRhdGVkLlxuICAgIHRoaXMucmV2aXNpb25DbGVhbnVwLm5vZGUuYWRkRGVwZW5kZW5jeShlbmRwb2ludCk7XG4gICAgLy8gRWFjaCBzZXJ2aW5nIHJlZ2lvbidzIC5sb2NhbCBncm91cCBtdXN0IGV4aXN0IGJlZm9yZSB0cmFmZmljLCBhbmQgb3V0bGl2ZSB0aGUgZnVuY3Rpb24uXG4gICAgZm9yIChjb25zdCByZWdpb24gb2YgZW5kcG9pbnQucmVnaW9ucy5zbGljZSgxKSkge1xuICAgICAgaWYgKHRoaXMucmVtb3RlTG9nR3JvdXBzLmhhcyhyZWdpb24pKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5sb2dHcm91cEluKGBMb2NhbExvZ3MtJHtyZWdpb259YCwgcmVnaW9uLCBgJHt0aGlzLmxvZ0dyb3VwTmFtZX0ubG9jYWxgKTtcbiAgICAgIHRoaXMucmVtb3RlTG9nR3JvdXBzLnNldChyZWdpb24sIGdyb3VwKTtcbiAgICAgIHRoaXMucmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KGdyb3VwLnJlc291cmNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMb2dHcm91cHMobG9nR3JvdXBOYW1lOiBzdHJpbmcpOiBXZWJGdW5jdGlvbkxvZ0dyb3VwW10ge1xuICAgIGNvbnN0IGhvbWUgPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMubG9nR3JvdXBJbignTG9ncycsIGhvbWUsIGxvZ0dyb3VwTmFtZSksXG4gICAgICB0aGlzLmxvZ0dyb3VwSW4oJ0xvY2FsTG9ncycsIGhvbWUsIGAke2xvZ0dyb3VwTmFtZX0ubG9jYWxgKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dHcm91cEluKGlkOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBXZWJGdW5jdGlvbkxvZ0dyb3VwIHtcbiAgICByZXR1cm4gbmV3IFdlYkZ1bmN0aW9uTG9nR3JvdXAodGhpcywgaWQsIHtcbiAgICAgIHJlZ2lvbixcbiAgICAgIGxvZ0dyb3VwTmFtZTogbmFtZSxcbiAgICAgIHJldGVudGlvbjogdGhpcy5sb2dPcHRpb25zLmxvZ1JldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgcmVtb3ZhbFBvbGljeTogdGhpcy5sb2dPcHRpb25zLmxvZ1JlbW92YWxQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"jsii-docgen": "^10.5.0",
|
|
79
79
|
"jsii-pacmak": "^1.141.0",
|
|
80
80
|
"jsii-rosetta": "~6.0.0",
|
|
81
|
-
"projen": "^0.104.
|
|
81
|
+
"projen": "^0.104.8",
|
|
82
82
|
"supports-color": "^7",
|
|
83
83
|
"ts-jest": "^29.4.15",
|
|
84
84
|
"ts-node": "^10.9.2",
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
"main": "lib/index.js",
|
|
112
112
|
"license": "Apache-2.0",
|
|
113
113
|
"stability": "experimental",
|
|
114
|
-
"version": "0.1.
|
|
114
|
+
"version": "0.1.3",
|
|
115
115
|
"jest": {
|
|
116
116
|
"coverageProvider": "v8",
|
|
117
117
|
"testMatch": [
|