@odigos/aws-cdk 0.0.19 → 0.0.20
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 +33 -34
- package/README.md +111 -47
- package/lib/collector-config.d.ts +2 -0
- package/lib/collector-config.js +40 -17
- package/lib/fargate-recipes.js +3 -1
- package/lib/fargate.d.ts +3 -2
- package/lib/fargate.js +44 -10
- package/lib/generated/distributions.d.ts +1 -1
- package/lib/generated/distributions.js +2 -2
- package/lib/generated/fargate.d.ts +2 -2
- package/lib/generated/fargate.js +3 -3
- package/lib/generated/layers.d.ts +3 -3
- package/lib/generated/layers.js +292 -292
- package/lib/instrumentation.d.ts +5 -6
- package/lib/instrumentation.js +32 -13
- package/lib/layer-resolver.js +6 -2
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types.d.ts +8 -10
- package/lib/types.js +5 -5
- package/package.json +1 -2
package/lib/instrumentation.d.ts
CHANGED
|
@@ -53,7 +53,7 @@ export interface OdigosInstrumentationOptions {
|
|
|
53
53
|
/**
|
|
54
54
|
* Raise in-function OpenTelemetry verbosity (`OTEL_LOG_LEVEL=debug`).
|
|
55
55
|
*
|
|
56
|
-
* The
|
|
56
|
+
* The SDK and collector can then emit additional OTLP-export diagnostics into the function's CloudWatch
|
|
57
57
|
* log group. Useful while wiring up a destination, expensive to leave on.
|
|
58
58
|
*
|
|
59
59
|
* Has no effect in web-server mode, matching the connector, which never sets a log level there.
|
|
@@ -80,11 +80,10 @@ export interface OdigosInstrumentationOptions {
|
|
|
80
80
|
* The value the function already needs in its language loader variable (`NODE_OPTIONS`,
|
|
81
81
|
* `JAVA_TOOL_OPTIONS` or `PYTHONPATH`), which the Odigos loader is joined to rather than replacing.
|
|
82
82
|
*
|
|
83
|
-
* Only used in web-server mode.
|
|
84
|
-
*
|
|
85
|
-
* silently overwritten, which for `NODE_OPTIONS` can mean losing a flag the app needs to boot.
|
|
83
|
+
* Only used in web-server mode. The launcher preserves the function's existing loader at startup;
|
|
84
|
+
* this optional value overrides the customer's saved loader setting before instrumentation is added.
|
|
86
85
|
*
|
|
87
|
-
* @default - the loader variable
|
|
86
|
+
* @default - preserve the function's existing loader variable
|
|
88
87
|
*/
|
|
89
88
|
readonly existingLoaderValue?: string;
|
|
90
89
|
/**
|
|
@@ -141,7 +140,7 @@ export interface OdigosLambdaInstrumentationProps extends OdigosInstrumentationO
|
|
|
141
140
|
*/
|
|
142
141
|
export declare class OdigosLambdaInstrumentation extends Construct {
|
|
143
142
|
private readonly options;
|
|
144
|
-
private readonly
|
|
143
|
+
private readonly resolvers;
|
|
145
144
|
private readonly instrumented;
|
|
146
145
|
constructor(scope: Construct, id: string, props: OdigosLambdaInstrumentationProps);
|
|
147
146
|
/**
|
package/lib/instrumentation.js
CHANGED
|
@@ -75,9 +75,9 @@ function defaultServiceName(fn) {
|
|
|
75
75
|
class OdigosLambdaInstrumentation extends constructs_1.Construct {
|
|
76
76
|
constructor(scope, id, props) {
|
|
77
77
|
super(scope, id);
|
|
78
|
+
this.resolvers = new Map();
|
|
78
79
|
this.instrumented = new Set();
|
|
79
80
|
this.options = props;
|
|
80
|
-
this.resolver = new layer_resolver_1.OdigosLayerResolver(this, props.layerSource ?? types_1.OdigosLayerSource.ODIGOS_PUBLIC);
|
|
81
81
|
// Rendered once. It depends only on the destination, and rendering it per function would make an
|
|
82
82
|
// accidental difference between two functions possible.
|
|
83
83
|
(0, collector_config_1.renderCollectorConfig)(props.destination);
|
|
@@ -124,23 +124,38 @@ class OdigosLambdaInstrumentation extends constructs_1.Construct {
|
|
|
124
124
|
if (recipe.applicationSignals && (!(0, collector_config_1.resolvedSignals)(this.options.destination).traces || !(0, collector_config_1.resolvedSignals)(this.options.destination).metrics)) {
|
|
125
125
|
throw new Error('ADOT + Application Signals requires traces and metrics to be enabled for the destination.');
|
|
126
126
|
}
|
|
127
|
+
const stack = aws_cdk_lib_1.Stack.of(fn);
|
|
128
|
+
let resolver = this.resolvers.get(stack);
|
|
129
|
+
if (!resolver) {
|
|
130
|
+
const scope = this.node.scopes.includes(stack) ? this : new constructs_1.Construct(stack, `OdigosLayers${this.node.addr}`);
|
|
131
|
+
resolver = new layer_resolver_1.OdigosLayerResolver(scope, this.options.layerSource ?? types_1.OdigosLayerSource.ODIGOS_PUBLIC);
|
|
132
|
+
this.resolvers.set(stack, resolver);
|
|
133
|
+
}
|
|
134
|
+
const architecture = fn.architecture.name;
|
|
135
|
+
const layer = this.options.layerVersion ?? resolver.resolve(recipe.artifact ?? language, architecture);
|
|
136
|
+
const collectorLayer = recipe.artifact ? (this.options.collectorLayerVersion ?? resolver.resolve('adot-collector', architecture)) : undefined;
|
|
137
|
+
const layers = collectorLayer ? [layer, collectorLayer] : [layer];
|
|
138
|
+
for (const attached of layers) {
|
|
139
|
+
const arn = attached.layerVersionArn;
|
|
140
|
+
if (!aws_cdk_lib_1.Token.isUnresolved(arn) && !aws_cdk_lib_1.Token.isUnresolved(stack.region) && arn.split(':')[3] !== stack.region) {
|
|
141
|
+
throw new Error(`Odigos: layer ${arn} is not in the function's region ${stack.region}. Supply a layer published in the function's region.`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const environment = this.environmentFor(fn, language, layer.layerVersionArn, collectorLayer?.layerVersionArn);
|
|
127
145
|
if (recipe.applicationSignals) {
|
|
128
146
|
fn.role?.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLambdaApplicationSignalsExecutionRolePolicy'));
|
|
129
|
-
aws_cdk_lib_1.Annotations.of(fn).addWarningV2('@odigos/aws-cdk:applicationSignals', 'Enable CloudWatch Application Signals service discovery once in this AWS account and region. Application Signals also sends AWS service telemetry through the Lambda embedded agent.');
|
|
147
|
+
aws_cdk_lib_1.Annotations.of(fn).addWarningV2('@odigos/aws-cdk:applicationSignals', 'Enable CloudWatch Application Signals service discovery once in this AWS account and region. If the Lambda role is imported as immutable, attach CloudWatchLambdaApplicationSignalsExecutionRolePolicy separately. Application Signals also sends AWS service telemetry through the Lambda embedded agent.');
|
|
130
148
|
}
|
|
131
149
|
const resource = fn.node.defaultChild;
|
|
132
150
|
resource.addPropertyDeletionOverride('Environment.Variables.ODIGOS_MANAGED');
|
|
133
151
|
resource.addPropertyDeletionOverride('Environment.Variables.ODIGOS_IAC');
|
|
134
|
-
|
|
135
|
-
const architecture = fn.architecture.name;
|
|
136
|
-
const layer = this.options.layerVersion ?? this.resolver.resolve(recipe.artifact ?? language, architecture);
|
|
137
|
-
const collectorLayer = recipe.artifact ? (this.options.collectorLayerVersion ?? this.resolver.resolve('adot-collector', architecture)) : undefined;
|
|
138
|
-
fn.addLayers(...(collectorLayer ? [layer, collectorLayer] : [layer]));
|
|
152
|
+
fn.addLayers(...layers);
|
|
139
153
|
// The ARN, not the construct: the marker has to name the exact layer version the function carries, and
|
|
140
154
|
// in IN_ACCOUNT mode that is a nested-stack output reference resolved at deploy time.
|
|
141
|
-
for (const [name, value] of Object.entries(
|
|
155
|
+
for (const [name, value] of Object.entries(environment)) {
|
|
142
156
|
fn.addEnvironment(name, value);
|
|
143
157
|
}
|
|
158
|
+
this.instrumented.add(key);
|
|
144
159
|
}
|
|
145
160
|
/** Instruments every function in the list. */
|
|
146
161
|
instrumentAll(functions) {
|
|
@@ -162,7 +177,11 @@ class OdigosLambdaInstrumentation extends constructs_1.Construct {
|
|
|
162
177
|
const signals = (0, collector_config_1.resolvedSignals)(destination);
|
|
163
178
|
const resource = fn.node.defaultChild;
|
|
164
179
|
const current = aws_cdk_lib_1.Stack.of(fn).resolve(resource.environment);
|
|
165
|
-
const
|
|
180
|
+
const wrapperValue = current?.variables?.AWS_LAMBDA_EXEC_WRAPPER;
|
|
181
|
+
const originalWrapper = wrapperValue === undefined ? '' : aws_cdk_lib_1.Token.asString(wrapperValue);
|
|
182
|
+
if (webServer && originalWrapper === '/opt/odigos-webserver') {
|
|
183
|
+
throw new Error('Odigos: this function already uses the Odigos web-server wrapper. Reuse its original instrumentation construct.');
|
|
184
|
+
}
|
|
166
185
|
const execWrapper = webServer ? '/opt/odigos-webserver' : (0, runtime_1.distributionWrapper)(language, distro, javaHandlerDistro, false);
|
|
167
186
|
const functionLogs = signals.logs && !webServer && (language === 'ruby' || (language === 'java' &&
|
|
168
187
|
['/opt/otel-handler', '/opt/otel-proxy-handler', '/opt/otel-sqs-handler', '/opt/otel-stream-handler'].includes(execWrapper)));
|
|
@@ -181,7 +200,7 @@ class OdigosLambdaInstrumentation extends constructs_1.Construct {
|
|
|
181
200
|
};
|
|
182
201
|
const env = {
|
|
183
202
|
[ENV_EXEC_WRAPPER]: execWrapper,
|
|
184
|
-
[ENV_LAMBDA_CONFIG]:
|
|
203
|
+
[ENV_LAMBDA_CONFIG]: aws_cdk_lib_1.Stack.of(fn).toJsonString(config),
|
|
185
204
|
};
|
|
186
205
|
aws_cdk_lib_1.Tags.of(fn).add('odigos:iac', 'v1');
|
|
187
206
|
aws_cdk_lib_1.Tags.of(fn).add('odigos:sdk-layer', layerArn);
|
|
@@ -204,7 +223,7 @@ class OdigosLambdaInstrumentation extends constructs_1.Construct {
|
|
|
204
223
|
}
|
|
205
224
|
exports.OdigosLambdaInstrumentation = OdigosLambdaInstrumentation;
|
|
206
225
|
_a = JSII_RTTI_SYMBOL_1;
|
|
207
|
-
OdigosLambdaInstrumentation[_a] = { fqn: "@odigos/aws-cdk.OdigosLambdaInstrumentation", version: "0.0.
|
|
226
|
+
OdigosLambdaInstrumentation[_a] = { fqn: "@odigos/aws-cdk.OdigosLambdaInstrumentation", version: "0.0.20" };
|
|
208
227
|
/**
|
|
209
228
|
* Applies Odigos instrumentation to every `lambda.Function` in a scope.
|
|
210
229
|
*
|
|
@@ -242,5 +261,5 @@ class OdigosInstrumentationAspect {
|
|
|
242
261
|
}
|
|
243
262
|
exports.OdigosInstrumentationAspect = OdigosInstrumentationAspect;
|
|
244
263
|
_b = JSII_RTTI_SYMBOL_1;
|
|
245
|
-
OdigosInstrumentationAspect[_b] = { fqn: "@odigos/aws-cdk.OdigosInstrumentationAspect", version: "0.0.
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1RTtBQUN2RSxpREFBaUQ7QUFDakQsMkNBQTJDO0FBQzNDLDJDQUFtRDtBQUNuRCx5REFHNEI7QUFDNUIscURBQXVEO0FBQ3ZELHVDQUF5RjtBQUN6RixtQ0FLaUI7QUFFakIsMkVBQTJFO0FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7QUFDbkQsa0VBQWtFO0FBQ2xFLDhGQUE4RjtBQUM5RixNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQVMsa0JBQWtCLENBQUMsRUFBbUI7SUFDN0MsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUE4QyxDQUFDO0lBQ25FLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBeUhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQWEsMkJBQTRCLFNBQVEsc0JBQVM7SUFLeEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QztRQUMvRSxLQUFLLENBQUMsS0FBSyxF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TCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQWdCO1FBQzNCLElBQUksSUFBSSxZQUFZLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQzs7QUFuQkgsa0VBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5ub3RhdGlvbnMsIElBc3BlY3QsIFN0YWNrLCBUb2tlbiwgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZWRTaWduYWxzLFxuICByZW5kZXJDb2xsZWN0b3JDb25maWcsXG59IGZyb20gJy4vY29sbGVjdG9yLWNvbmZpZyc7XG5pbXBvcnQgeyBPZGlnb3NMYXllclJlc29sdmVyIH0gZnJvbSAnLi9sYXllci1yZXNvbHZlcic7XG5pbXBvcnQgeyBkaXN0cmlidXRpb25SZWNpcGUsIGRpc3RyaWJ1dGlvbldyYXBwZXIsIGxhbmd1YWdlRnJvbVJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUnO1xuaW1wb3J0IHtcbiAgT2RpZ29zRGVzdGluYXRpb24sXG4gIE9kaWdvc0luc3RydW1lbnRhdGlvbk1vZGUsXG4gIE9kaWdvc0phdmFIYW5kbGVyRGlzdHJvLFxuICBPZGlnb3NMYXllclNvdXJjZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKiBgQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVJgIOKAlCB0aGUgbGF5ZXIncyBlbnRyeSBwb2ludCBpbiBoYW5kbGVyIG1vZGUuICovXG5jb25zdCBFTlZfRVhFQ19XUkFQUEVSID0gJ0FXU19MQU1CREFfRVhFQ19XUkFQUEVSJztcbi8qKiBTZXJ2aWNlIG5hbWUgcmVwb3J0ZWQgb24gZXZlcnkgc3BhbiwgbWV0cmljIGFuZCBsb2cgcmVjb3JkLiAqL1xuLyoqIENvbXBhY3QgU0RLIGFuZCBkZXN0aW5hdGlvbiBzZXR0aW5nczsgYWxsIGF0dHJpYnV0aW9uIG1hcmtlcnMgYXJlIExhbWJkYSByZXNvdXJjZSB0YWdzLiAqL1xuY29uc3QgRU5WX0xBTUJEQV9DT05GSUcgPSAnT0RJR09TX0xBTUJEQV9DT05GSUcnO1xuXG4vKipcbiAqIFRoZSBzZXJ2aWNlIGEgZnVuY3Rpb24gcmVwb3J0cyBhcywgd2hlbiB0aGUgY2FsbGVyIGhhcyBub3QgbmFtZWQgb25lLlxuICpcbiAqIFJFQUQgRlJPTSBUSEUgTDEsIE5PVCBGUk9NIGBmbi5mdW5jdGlvbk5hbWVgLiBUaGUgTDIgcHJvcGVydHkgaXMgYSBjcm9zcy1lbnZpcm9ubWVudC1hd2FyZSB0b2tlbiB0aGF0XG4gKiByZXNvbHZlcyB0byBhIGBSZWZgIHRvIHRoZSBmdW5jdGlvbiBpdHNlbGYgZXZlbiB3aGVuIHRoZSBzdGFjayBzZXQgYGZ1bmN0aW9uTmFtZWAgZXhwbGljaXRseSDigJQgc28gdGhlXG4gKiBvYnZpb3VzIGBTdGFjay5vZihmbikucmVzb2x2ZShmbi5mdW5jdGlvbk5hbWUpYCBuZXZlciB5aWVsZHMgYSBsaXRlcmFsLCBhbmQgZXZlcnkgZnVuY3Rpb24gc2lsZW50bHkgZmVsbFxuICogYmFjayB0byBpdHMgY29uc3RydWN0IGlkLiBgQ2ZuRnVuY3Rpb24uZnVuY3Rpb25OYW1lYCBpcyB0aGUgcmF3IHRlbXBsYXRlIHZhbHVlOiB0aGUgbGl0ZXJhbCB0aGUgc3RhY2tcbiAqIHBhc3NlZCwgb3IgdW5kZWZpbmVkIHdoZW4gQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIHRoZSBuYW1lLlxuICpcbiAqIFdoeSB0aGUgZmFsbGJhY2sgaXMgdGhlIGNvbnN0cnVjdCBpZCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJhdGVkIG5hbWU6IGEgZ2VuZXJhdGVkIG5hbWUgaXMgYSBgUmVmYCB0byB0aGVcbiAqIGZ1bmN0aW9uLCBhbmQgcHV0dGluZyB0aGF0IGluIHRoZSBmdW5jdGlvbidzIG93biBlbnZpcm9ubWVudCBtYWtlcyB0aGUgcmVzb3VyY2UgZGVwZW5kIG9uIGl0cyBvd25cbiAqIGNyZWF0aW9uIOKAlCBDbG91ZEZvcm1hdGlvbiByZWplY3RzIHRoZSB0ZW1wbGF0ZSB3aXRoIGEgZGVwZW5kZW5jeSBjeWNsZSwgYXQgZGVwbG95IHRpbWUuXG4gKlxuICogVGhpcyBtYXR0ZXJzIGJleW9uZCBjb3NtZXRpY3MuIFRoZSBjb25uZWN0b3IgY29tcGFyZXMgYE9URUxfU0VSVklDRV9OQU1FYCBhZ2FpbnN0IHRoZSB3b3JrbG9hZCdzIG5hbWUgaW5cbiAqIE9kaWdvcywgd2hpY2ggaXMgdGhlIHJlYWwgQVdTIGZ1bmN0aW9uIG5hbWUsIHNvIGEgZnVuY3Rpb24gcmVwb3J0aW5nIGl0cyBjb25zdHJ1Y3QgaWQgaXMgcmVwb3J0ZWQgYXNcbiAqIGRyaWZ0ZWQgb24gdGhlIHNlcnZpY2UtbmFtZSBjb21wb25lbnQuIE5hbWluZyB0aGUgZnVuY3Rpb24gaW4geW91ciBzdGFjayBpcyBub3cgZW5vdWdoIHRvIGxpbmUgdGhlIHR3b1xuICogdXA7IGEgZnVuY3Rpb24gd2hvc2UgbmFtZSBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZXMgc3RpbGwgbmVlZHMgYHNlcnZpY2VOYW1lYCBwYXNzZWQgZXhwbGljaXRseS5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFNlcnZpY2VOYW1lKGZuOiBsYW1iZGEuRnVuY3Rpb24pOiBzdHJpbmcge1xuICBjb25zdCBjZm4gPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlc29sdmVkID0gY2ZuID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBTdGFjay5vZihmbikucmVzb2x2ZShjZm4uZnVuY3Rpb25OYW1lKTtcbiAgaWYgKHR5cGVvZiByZXNvbHZlZCA9PT0gJ3N0cmluZycgJiYgcmVzb2x2ZWQgIT09ICcnICYmICFUb2tlbi5pc1VucmVzb2x2ZWQocmVzb2x2ZWQpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG4gIHJldHVybiBmbi5ub2RlLmlkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgc2hhcmVkIGJ5IHRoZSBjb25zdHJ1Y3QgYW5kIHRoZSBhc3BlY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2RpZ29zSW5zdHJ1bWVudGF0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgaW4tTGFtYmRhIGNvbGxlY3RvciBleHBvcnRzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IE9kaWdvc0Rlc3RpbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgT2RpZ29zIGxheWVyIGNvbWVzIGZyb20uXG4gICAqXG4gICAqIEBkZWZhdWx0IE9kaWdvc0xheWVyU291cmNlLk9ESUdPU19QVUJMSUNcbiAgICovXG4gIHJlYWRvbmx5IGxheWVyU291cmNlPzogT2RpZ29zTGF5ZXJTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXIgbW9kZSBvciB3ZWItc2VydmVyIChMYW1iZGEgV2ViIEFkYXB0ZXIpIG1vZGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGF1dG8tZGV0ZWN0aW9uLCBhbmQgdGhhdCBpcyBkZWxpYmVyYXRlIHJhdGhlciB0aGFuIGFuIG9taXNzaW9uOiBkZXRlY3RpbmcgdGhlIHdlYiBhZGFwdGVyXG4gICAqIG1lYW5zIGluc3BlY3RpbmcgdGhlIGZ1bmN0aW9uJ3Mgb3RoZXIgbGF5ZXJzLCB3aGljaCBhdCBzeW50aCB0aW1lIGFyZSBmcmVxdWVudGx5IHVucmVzb2x2ZWQgdG9rZW5zLlxuICAgKiBBIGRldGVjdG9yIHRoYXQgaXMgcmlnaHQgbW9zdCBvZiB0aGUgdGltZSB3b3VsZCBzaWxlbnRseSBicmVhayB0aGUgZnVuY3Rpb25zIGl0IGdvdCB3cm9uZy5cbiAgICpcbiAgICogQGRlZmF1bHQgT2RpZ29zSW5zdHJ1bWVudGF0aW9uTW9kZS5IQU5ETEVSXG4gICAqL1xuICByZWFkb25seSBtb2RlPzogT2RpZ29zSW5zdHJ1bWVudGF0aW9uTW9kZTtcblxuICAvKipcbiAgICogQ29ubmVjdG9yIEdyYXBoUUwgZGlzdHJvIG5hbWUsIHN1Y2ggYXMgamF2YS1sYW1iZGEtb3RlbC1hZ2VudCBvciBqYXZhLWxhbWJkYS1vdGVsLXdyYXBwZXIuXG4gICAqIEBkZWZhdWx0IC0gdGhlIGJ1bmRsZWQgZGVmYXVsdCBkaXN0cmlidXRpb24gZm9yIHRoZSBmdW5jdGlvbidzIHJ1bnRpbWVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3Rybz86IHN0cmluZztcblxuICAvKipcbiAgICogTGVnYWN5IGxpZ2h0d2VpZ2h0IEphdmEgaGFuZGxlciBhZGFwdGVyLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGNvcnJlc3BvbmRpbmcgamF2YS1sYW1iZGEtb3RlbC0qLXdyYXBwZXIgZGlzdHJvLlxuICAgKi9cbiAgcmVhZG9ubHkgamF2YUhhbmRsZXJEaXN0cm8/OiBPZGlnb3NKYXZhSGFuZGxlckRpc3RybztcblxuICAvKipcbiAgICogYE9URUxfU0VSVklDRV9OQU1FYCBmb3IgZXZlcnkgZnVuY3Rpb24gdGhpcyBpbnN0cnVtZW50cy5cbiAgICpcbiAgICogVXN1YWxseSB3cm9uZyB0byBzZXQgd2hlbiBpbnN0cnVtZW50aW5nIG1vcmUgdGhhbiBvbmUgZnVuY3Rpb24g4oCUIHRoZXkgd291bGQgYWxsIHJlcG9ydCBhcyB0aGUgc2FtZVxuICAgKiBzZXJ2aWNlLlxuICAgKlxuICAgKiBMZWZ0IHVuc2V0LCBhIGZ1bmN0aW9uIHJlcG9ydHMgYXMgaXRzIGV4cGxpY2l0bHktc2V0IHBoeXNpY2FsIG5hbWUgaWYgaXQgaGFzIG9uZSwgYW5kIG90aGVyd2lzZSBhc1xuICAgKiBpdHMgY29uc3RydWN0IGlkLiBJdCBkZWxpYmVyYXRlbHkgZG9lcyBub3QgZGVmYXVsdCB0byB0aGUgZ2VuZXJhdGVkIHBoeXNpY2FsIG5hbWU6IHRoYXQgdmFsdWUgaXMgYVxuICAgKiBgUmVmYCB0byB0aGUgZnVuY3Rpb24gaXRzZWxmLCBhbmQgYSBmdW5jdGlvbiByZWZlcmVuY2luZyBpdHNlbGYgaW4gaXRzIG93biBlbnZpcm9ubWVudCBpcyBhXG4gICAqIENsb3VkRm9ybWF0aW9uIGRlcGVuZGVuY3kgY3ljbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGZ1bmN0aW9uJ3MgcGh5c2ljYWwgbmFtZSBpZiBleHBsaWNpdGx5IHNldCwgb3RoZXJ3aXNlIGl0cyBjb25zdHJ1Y3QgaWRcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSYWlzZSBpbi1mdW5jdGlvbiBPcGVuVGVsZW1ldHJ5IHZlcmJvc2l0eSAoYE9URUxfTE9HX0xFVkVMPWRlYnVnYCkuXG4gICAqXG4gICAqIFRoZSBsYXllciwgU0RLIGFuZCBjb2xsZWN0b3IgdGhlbiBlbWl0IHNwYW4gYW5kIE9UTFAtZXhwb3J0IGRpYWdub3N0aWNzIGludG8gdGhlIGZ1bmN0aW9uJ3MgQ2xvdWRXYXRjaFxuICAgKiBsb2cgZ3JvdXAuIFVzZWZ1bCB3aGlsZSB3aXJpbmcgdXAgYSBkZXN0aW5hdGlvbiwgZXhwZW5zaXZlIHRvIGxlYXZlIG9uLlxuICAgKlxuICAgKiBIYXMgbm8gZWZmZWN0IGluIHdlYi1zZXJ2ZXIgbW9kZSwgbWF0Y2hpbmcgdGhlIGNvbm5lY3Rvciwgd2hpY2ggbmV2ZXIgc2V0cyBhIGxvZyBsZXZlbCB0aGVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXR0YWNoIHRoaXMgbGF5ZXIgaW5zdGVhZCBvZiByZXNvbHZpbmcgb25lLiBPdmVycmlkZXMgYGxheWVyU291cmNlYCBlbnRpcmVseS5cbiAgICpcbiAgICogVGhlIGVzY2FwZSBoYXRjaCBmb3IgYSBsYXllciBtaXJyb3JlZCBpbnRvIGEgcHJpdmF0ZSByZWdpc3RyeSBvciBhbiBpbnRlcm5hbCBhY2NvdW50LiBUaGUgbGF5ZXIgbXVzdFxuICAgKiBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzIGFzIHRoZSBPZGlnb3Mgb25lIOKAlCB0aGUgZW52aXJvbm1lbnQgc2V0IGhlcmUgYXNzdW1lcyBpdHMgZXhhY3Qgc2NyaXB0IGxheW91dC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXNvbHZlZCBmcm9tIGxheWVyU291cmNlXG4gICAqL1xuICByZWFkb25seSBsYXllclZlcnNpb24/OiBsYW1iZGEuSUxheWVyVmVyc2lvbjtcblxuICAvKipcbiAgICogQXJjaGl0ZWN0dXJlLW1hdGNoZWQgY29sbGVjdG9yIGxheWVyIHdoZW4gc3VwcGx5aW5nIGEgY3VzdG9tIEFET1QgU0RLIGxheWVyLlxuICAgKiBVcHN0cmVhbSBTREsgbGF5ZXJzIGFscmVhZHkgaW5jbHVkZSB0aGVpciBjb2xsZWN0b3IgYW5kIGRvIG5vdCB1c2UgdGhpcyBvcHRpb24uXG4gICAqIEBkZWZhdWx0IC0gcmVzb2x2ZWQgZnJvbSBsYXllclNvdXJjZSBmb3IgQURPVFxuICAgKi9cbiAgcmVhZG9ubHkgY29sbGVjdG9yTGF5ZXJWZXJzaW9uPzogbGFtYmRhLklMYXllclZlcnNpb247XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0aGUgZnVuY3Rpb24gYWxyZWFkeSBuZWVkcyBpbiBpdHMgbGFuZ3VhZ2UgbG9hZGVyIHZhcmlhYmxlIChgTk9ERV9PUFRJT05TYCxcbiAgICogYEpBVkFfVE9PTF9PUFRJT05TYCBvciBgUFlUSE9OUEFUSGApLCB3aGljaCB0aGUgT2RpZ29zIGxvYWRlciBpcyBqb2luZWQgdG8gcmF0aGVyIHRoYW4gcmVwbGFjaW5nLlxuICAgKlxuICAgKiBPbmx5IHVzZWQgaW4gd2ViLXNlcnZlciBtb2RlLiBJdCBoYXMgdG8gYmUgcGFzc2VkIGV4cGxpY2l0bHkgYmVjYXVzZSBDREsncyBgbGFtYmRhLkZ1bmN0aW9uYCBleHBvc2VzXG4gICAqIG5vIHdheSB0byByZWFkIGJhY2sgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IGVsc2V3aGVyZSBpbiB0aGUgYXBwIOKAlCBhbiBvbWl0dGVkIHZhbHVlIGhlcmUgaXNcbiAgICogc2lsZW50bHkgb3ZlcndyaXR0ZW4sIHdoaWNoIGZvciBgTk9ERV9PUFRJT05TYCBjYW4gbWVhbiBsb3NpbmcgYSBmbGFnIHRoZSBhcHAgbmVlZHMgdG8gYm9vdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgbG9hZGVyIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgT2RpZ29zIHZhbHVlIGFsb25lXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ0xvYWRlclZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTa2lwIGZ1bmN0aW9ucyB3aG9zZSBydW50aW1lIGhhcyBubyBPcGVuVGVsZW1ldHJ5IExhbWJkYSBsYXllciBpbnN0ZWFkIG9mIHRocm93aW5nLlxuICAgKlxuICAgKiBgZG90bmV0KmAgYW5kIGBwcm92aWRlZC4qYCAoR28sIGN1c3RvbSBydW50aW1lcykgaGF2ZSBubyBsYW5ndWFnZSBsYXllciB1cHN0cmVhbS4gRXhwbGljaXRseVxuICAgKiBpbnN0cnVtZW50aW5nIG9uZSBpcyBhIG1pc3Rha2Ugd29ydGggZmFpbGluZyBvbjsgc3dlZXBpbmcgYSB3aG9sZSBzdGFjayB3aXRoIHRoZSBhc3BlY3QgYW5kIGhpdHRpbmdcbiAgICogb25lIGlzIG5vdCwgd2hpY2ggaXMgd2h5IHRoZSBhc3BlY3QgZGVmYXVsdHMgdGhpcyB0byBgdHJ1ZWAgYW5kIHRoZSBjb25zdHJ1Y3QgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNraXBVbnN1cHBvcnRlZFJ1bnRpbWVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9kaWdvc0xhbWJkYUluc3RydW1lbnRhdGlvbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uUHJvcHMgZXh0ZW5kcyBPZGlnb3NJbnN0cnVtZW50YXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEZ1bmN0aW9ucyB0byBpbnN0cnVtZW50IG9uIGNvbnN0cnVjdGlvbi4gTW9yZSBjYW4gYmUgYWRkZWQgd2l0aCBgaW5zdHJ1bWVudCgpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbnM/OiBsYW1iZGEuRnVuY3Rpb25bXTtcbn1cblxuLyoqXG4gKiBJbnN0cnVtZW50cyBBV1MgTGFtYmRhIGZ1bmN0aW9ucyB3aXRoIHRoZSBPZGlnb3MgT3BlblRlbGVtZXRyeSBsYXllci5cbiAqXG4gKiBgYGB0c1xuICogY29uc3Qgb2RpZ29zID0gbmV3IE9kaWdvc0xhbWJkYUluc3RydW1lbnRhdGlvbih0aGlzLCAnT2RpZ29zJywge1xuICogICBkZXN0aW5hdGlvbjogeyBlbmRwb2ludDogJ290bHAuZXhhbXBsZS5jb206NDMxNycgfSxcbiAqICAgZnVuY3Rpb25zOiBbYXBpRm4sIHdvcmtlckZuXSxcbiAqIH0pO1xuICogb2RpZ29zLmluc3RydW1lbnQoYW5vdGhlckZuKTtcbiAqIGBgYFxuICpcbiAqIFdoYXQgaXQgZG9lcyB0byBlYWNoIGZ1bmN0aW9uOiBhdHRhY2hlcyB0aGUgbGF5ZXIgZm9yIHRoZSBmdW5jdGlvbidzIGxhbmd1YWdlIGFuZCBhcmNoaXRlY3R1cmUsIHNldHNcbiAqIGBBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUmAgYW5kIGNvbXBhY3QgYE9ESUdPU19MQU1CREFfQ09ORklHYC4gVGhlIGxheWVyIGJ1aWxkcyB0aGUgU0RLIGVudmlyb25tZW50IGFuZFxuICogY29sbGVjdG9yIHBpcGVsaW5lcyBhdCBzdGFydHVwOyBvd25lcnNoaXAgYW5kIGV4YWN0IGxheWVyIGF0dHJpYnV0aW9uIGFyZSByZWNvcmRlZCBpbiByZXNvdXJjZSB0YWdzLlxuICpcbiAqIFRoZSBmdW5jdGlvbidzIFNESyBleHBvcnRzIHRvIHRoZSBjb2xsZWN0b3Igb24gbG9jYWxob3N0LCBub3QgdG8geW91ciBkZXN0aW5hdGlvbi4gVGhlIGNvbGxlY3RvclxuICogZm9yd2FyZHMgYWZ0ZXIgdGhlIGhhbmRsZXIgaGFzIGFscmVhZHkgcmV0dXJuZWQsIHNvIGEgc2xvdyBkZXN0aW5hdGlvbiBjb3N0cyBiaWxsZWQgZHVyYXRpb24gcmF0aGVyXG4gKiB0aGFuIGNhbGxlciBsYXRlbmN5LlxuICpcbiAqICMjIERvIG5vdCBhbHNvIGluc3RydW1lbnQgdGhlc2UgZnVuY3Rpb25zIHdpdGggdGhlIGNvbm5lY3RvclxuICpcbiAqIFRoZSBPZGlnb3MgQVdTIGNvbm5lY3RvciBpbnN0cnVtZW50cyBsaXZlIGZ1bmN0aW9ucyBieSBtdXRhdGluZyB0aGVtLCBhbmQgcmVjb25jaWxlcyB0aGVtIGJhY2sgdG8gaXRzXG4gKiBvd24gZGVzaXJlZCBzdGF0ZSBvbiBldmVyeSBwYXNzLiBBIGZ1bmN0aW9uIGluc3RydW1lbnRlZCBoZXJlIGFuZCBhbHNvIGVuYWJsZWQgYXMgYSBjb25uZWN0b3Igc291cmNlXG4gKiBlbmRzIHVwIG93bmVkIGJ5IGJvdGg6IGVhY2ggYGNkayBkZXBsb3lgIHJlYXNzZXJ0cyB0aGUgQ0RLJ3MgZW52aXJvbm1lbnQsIGVhY2ggcmVjb25jaWxlIHJlYXNzZXJ0cyB0aGVcbiAqIGNvbm5lY3RvcidzLCBhbmQgZXZlcnkgcm91bmQgdHJpcCBwdWJsaXNoZXMgYSBuZXcgZnVuY3Rpb24gdmVyc2lvbi5cbiAqXG4gKiBDaG9vc2Ugb25lIHBlciBmdW5jdGlvbi4gVGhpcyBjb25zdHJ1Y3Qgd3JpdGVzIGBvZGlnb3M6aWFjYCByZXNvdXJjZSB0YWdzIGFuZCBuZXZlciB0aGUgY29ubmVjdG9yJ3MgYG9kaWdvczptYW5hZ2VkYFxuICogb3duZXJzaGlwIHRhZywgc28gYW4gSWFDLWluc3RydW1lbnRlZCBmdW5jdGlvbiByZXBvcnRzIGFzIGluc3RydW1lbnRlZCBidXQgaXMgbm90IG9uZSB0aGUgY29ubmVjdG9yXG4gKiB3aWxsIHJvbGwgYmFjayDigJQgdGhvdWdoIGl0IHdpbGwgaGFwcGlseSB0YWtlIGl0IG92ZXIgaWYgeW91IGVuYWJsZSBpdCBhcyBhIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE9kaWdvc0xhbWJkYUluc3RydW1lbnRhdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogT2RpZ29zSW5zdHJ1bWVudGF0aW9uT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlcjogT2RpZ29zTGF5ZXJSZXNvbHZlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnN0cnVtZW50ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gcHJvcHM7XG4gICAgdGhpcy5yZXNvbHZlciA9IG5ldyBPZGlnb3NMYXllclJlc29sdmVyKHRoaXMsIHByb3BzLmxheWVyU291cmNlID8/IE9kaWdvc0xheWVyU291cmNlLk9ESUdPU19QVUJMSUMpO1xuXG4gICAgLy8gUmVuZGVyZWQgb25jZS4gSXQgZGVwZW5kcyBvbmx5IG9uIHRoZSBkZXN0aW5hdGlvbiwgYW5kIHJlbmRlcmluZyBpdCBwZXIgZnVuY3Rpb24gd291bGQgbWFrZSBhblxuICAgIC8vIGFjY2lkZW50YWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBmdW5jdGlvbnMgcG9zc2libGUuXG4gICAgcmVuZGVyQ29sbGVjdG9yQ29uZmlnKHByb3BzLmRlc3RpbmF0aW9uKTtcblxuICAgIC8vIEEgd2FybmluZyByYXRoZXIgdGhhbiBhbiBlcnJvciwgYmVjYXVzZSBhIGNvbGxlY3RvciBDQU4gYmUgcmVhY2hlZCBvdmVyIGdSUEMgb24gYSBub24tc3RhbmRhcmQgcG9ydCDigJRcbiAgICAvLyBidXQgdGhlIG92ZXJ3aGVsbWluZ2x5IGxpa2VsaWVyIHJlYWRpbmcgb2YgYGVuZHBvaW50OiBcImhvc3Q6NDMxOFwiYCBpcyBhbiBPVExQL0hUVFAgZW5kcG9pbnQgcGFzc2VkIHRvXG4gICAgLy8gdGhlIGdSUEMgZXhwb3J0ZXIsIHdoaWNoIGJ1aWxkcywgc3RhcnRzLCBhbmQgdGhlbiBuZXZlciBkZWxpdmVycyBhIGJhdGNoLiBTaWxlbnQgZm9yIHRoZSBjYWxsZXIgd2hvXG4gICAgLy8gbWVhbnQgaXQ7IGxvdWQgZm9yIHRoZSBvbmUgd2hvIGRpZCBub3QuXG4gICAgaWYgKHByb3BzLmRlc3RpbmF0aW9uLmVuZHBvaW50Py5lbmRzV2l0aCgnOjQzMTgnKSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQG9kaWdvcy9hd3MtY2RrOnByb2JhYmxlSHR0cEVuZHBvaW50JyxcbiAgICAgICAgYE9kaWdvczogZGVzdGluYXRpb24gZW5kcG9pbnQgXCIke3Byb3BzLmRlc3RpbmF0aW9uLmVuZHBvaW50fVwiIGlzIG9uIDQzMTgsIHRoZSBPVExQL0hUVFAgcG9ydCwgYnV0IGAgK1xuICAgICAgICAgICdgZW5kcG9pbnRgIGNvbmZpZ3VyZXMgdGhlIGdSUEMgZXhwb3J0ZXIgKGNvbnZlbnRpb25hbGx5IDQzMTcpLiBJZiB0aGF0IGlzIGFuIE9UTFAvSFRUUCBjb2xsZWN0b3IsICcgK1xuICAgICAgICAgICdwYXNzIGl0IGFzIGBodHRwRW5kcG9pbnQ6IFwiaHR0cDovL2hvc3Q6NDMxOFwiYCBpbnN0ZWFkIOKAlCB0aGUgZ1JQQyBleHBvcnRlciB3aWxsIGV4cG9ydCBub3RoaW5nIHRvIGl0LicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZGVzdGluYXRpb24uaHR0cEVuZHBvaW50Py5lbmRzV2l0aCgnOjQzMTcnKSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQG9kaWdvcy9hd3MtY2RrOnByb2JhYmxlR3JwY0VuZHBvaW50JyxcbiAgICAgICAgYE9kaWdvczogZGVzdGluYXRpb24gaHR0cEVuZHBvaW50IFwiJHtwcm9wcy5kZXN0aW5hdGlvbi5odHRwRW5kcG9pbnR9XCIgaXMgb24gNDMxNywgdGhlIE9UTFAvZ1JQQyBwb3J0LCBgICtcbiAgICAgICAgICAnYnV0IGBodHRwRW5kcG9pbnRgIGNvbmZpZ3VyZXMgdGhlIEhUVFAgZXhwb3J0ZXIgKGNvbnZlbnRpb25hbGx5IDQzMTgpLiBJZiB0aGF0IGlzIGEgZ1JQQyBjb2xsZWN0b3IsICcgK1xuICAgICAgICAgICdwYXNzIGl0IGFzIGBlbmRwb2ludDogXCJob3N0OjQzMTdcImAgaW5zdGVhZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZuIG9mIHByb3BzLmZ1bmN0aW9ucyA/PyBbXSkge1xuICAgICAgdGhpcy5pbnN0cnVtZW50KGZuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5zdHJ1bWVudHMgb25lIGZ1bmN0aW9uLiBJZGVtcG90ZW50IOKAlCBpbnN0cnVtZW50aW5nIHRoZSBzYW1lIGZ1bmN0aW9uIHR3aWNlIGlzIGEgbm8tb3AgcmF0aGVyIHRoYW4gYVxuICAgKiBkb3VibGVkIGxvYWRlciB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBpbnN0cnVtZW50KGZuOiBsYW1iZGEuRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBmbi5ub2RlLnBhdGg7XG4gICAgaWYgKHRoaXMuaW5zdHJ1bWVudGVkLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcnVudGltZU5hbWUgPSBmbi5ydW50aW1lLm5hbWU7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZUZyb21SdW50aW1lKHJ1bnRpbWVOYW1lKTtcbiAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgYE9kaWdvczogcnVudGltZSBcIiR7cnVudGltZU5hbWV9XCIgaGFzIG5vIE9wZW5UZWxlbWV0cnkgTGFtYmRhIGxheWVyIGAgK1xuICAgICAgICAnKHVwc3RyZWFtIHB1Ymxpc2hlcyBsYXllcnMgZm9yIHB5dGhvbiwgbm9kZWpzLCBqYXZhIGFuZCBydWJ5IG9ubHkpLCBzbyB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSBpbnN0cnVtZW50ZWQuJztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2tpcFVuc3VwcG9ydGVkUnVudGltZXMpIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2YoZm4pLmFkZFdhcm5pbmdWMignQG9kaWdvcy9hd3MtY2RrOnVuc3VwcG9ydGVkUnVudGltZScsIGAke21lc3NhZ2V9IFNraXBwaW5nLmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX0gU2V0IHNraXBVbnN1cHBvcnRlZFJ1bnRpbWVzOiB0cnVlIHRvIHNraXAgaXQgaW5zdGVhZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGUgPSBkaXN0cmlidXRpb25SZWNpcGUobGFuZ3VhZ2UsIHRoaXMub3B0aW9ucy5kaXN0cm8sIHJ1bnRpbWVOYW1lKTtcbiAgICBkaXN0cmlidXRpb25XcmFwcGVyKGxhbmd1YWdlLCB0aGlzLm9wdGlvbnMuZGlzdHJvLCB0aGlzLm9wdGlvbnMuamF2YUhhbmRsZXJEaXN0cm8sIHRoaXMub3B0aW9ucy5tb2RlID09PSBPZGlnb3NJbnN0cnVtZW50YXRpb25Nb2RlLldFQl9TRVJWRVIpO1xuICAgIGlmIChyZWNpcGUuYXBwbGljYXRpb25TaWduYWxzICYmICghcmVzb2x2ZWRTaWduYWxzKHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvbikudHJhY2VzIHx8ICFyZXNvbHZlZFNpZ25hbHModGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uKS5tZXRyaWNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBRE9UICsgQXBwbGljYXRpb24gU2lnbmFscyByZXF1aXJlcyB0cmFjZXMgYW5kIG1ldHJpY3MgdG8gYmUgZW5hYmxlZCBmb3IgdGhlIGRlc3RpbmF0aW9uLicpO1xuICAgIH1cbiAgICBpZiAocmVjaXBlLmFwcGxpY2F0aW9uU2lnbmFscykge1xuICAgICAgZm4ucm9sZT8uYWRkTWFuYWdlZFBvbGljeShpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0Nsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5JykpO1xuICAgICAgQW5ub3RhdGlvbnMub2YoZm4pLmFkZFdhcm5pbmdWMignQG9kaWdvcy9hd3MtY2RrOmFwcGxpY2F0aW9uU2lnbmFscycsXG4gICAgICAgICdFbmFibGUgQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBTaWduYWxzIHNlcnZpY2UgZGlzY292ZXJ5IG9uY2UgaW4gdGhpcyBBV1MgYWNjb3VudCBhbmQgcmVnaW9uLiBBcHBsaWNhdGlvbiBTaWduYWxzIGFsc28gc2VuZHMgQVdTIHNlcnZpY2UgdGVsZW1ldHJ5IHRocm91Z2ggdGhlIExhbWJkYSBlbWJlZGRlZCBhZ2VudC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZT1mbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG4gICAgcmVzb3VyY2UuYWRkUHJvcGVydHlEZWxldGlvbk92ZXJyaWRlKCdFbnZpcm9ubWVudC5WYXJpYWJsZXMuT0RJR09TX01BTkFHRUQnKTtcbiAgICByZXNvdXJjZS5hZGRQcm9wZXJ0eURlbGV0aW9uT3ZlcnJpZGUoJ0Vudmlyb25tZW50LlZhcmlhYmxlcy5PRElHT1NfSUFDJyk7XG4gICAgdGhpcy5pbnN0cnVtZW50ZWQuYWRkKGtleSk7XG5cbiAgICBjb25zdCBhcmNoaXRlY3R1cmUgPSBmbi5hcmNoaXRlY3R1cmUubmFtZTtcbiAgICBjb25zdCBsYXllciA9IHRoaXMub3B0aW9ucy5sYXllclZlcnNpb24gPz8gdGhpcy5yZXNvbHZlci5yZXNvbHZlKHJlY2lwZS5hcnRpZmFjdCA/PyBsYW5ndWFnZSwgYXJjaGl0ZWN0dXJlKTtcbiAgICBjb25zdCBjb2xsZWN0b3JMYXllciA9IHJlY2lwZS5hcnRpZmFjdCA/ICh0aGlzLm9wdGlvbnMuY29sbGVjdG9yTGF5ZXJWZXJzaW9uID8/IHRoaXMucmVzb2x2ZXIucmVzb2x2ZSgnYWRvdC1jb2xsZWN0b3InLCBhcmNoaXRlY3R1cmUpKSA6IHVuZGVmaW5lZDtcbiAgICBmbi5hZGRMYXllcnMoLi4uKGNvbGxlY3RvckxheWVyID8gW2xheWVyLCBjb2xsZWN0b3JMYXllcl0gOiBbbGF5ZXJdKSk7XG5cbiAgICAvLyBUaGUgQVJOLCBub3QgdGhlIGNvbnN0cnVjdDogdGhlIG1hcmtlciBoYXMgdG8gbmFtZSB0aGUgZXhhY3QgbGF5ZXIgdmVyc2lvbiB0aGUgZnVuY3Rpb24gY2FycmllcywgYW5kXG4gICAgLy8gaW4gSU5fQUNDT1VOVCBtb2RlIHRoYXQgaXMgYSBuZXN0ZWQtc3RhY2sgb3V0cHV0IHJlZmVyZW5jZSByZXNvbHZlZCBhdCBkZXBsb3kgdGltZS5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5lbnZpcm9ubWVudEZvcihmbiwgbGFuZ3VhZ2UsIGxheWVyLmxheWVyVmVyc2lvbkFybiwgY29sbGVjdG9yTGF5ZXI/LmxheWVyVmVyc2lvbkFybikpKSB7XG4gICAgICBmbi5hZGRFbnZpcm9ubWVudChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEluc3RydW1lbnRzIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZSBsaXN0LiAqL1xuICBwdWJsaWMgaW5zdHJ1bWVudEFsbChmdW5jdGlvbnM6IGxhbWJkYS5GdW5jdGlvbltdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgIHRoaXMuaW5zdHJ1bWVudChmbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBhcHBsaWVkIHRvIG9uZSBmdW5jdGlvbi5cbiAgICpcbiAgICogTWlycm9ycyBgYXBwbHlIYW5kbGVyRW52YCAvIGBhcHBseVdlYlNlcnZlckVudmAgaW4gdGhlIGNvbm5lY3RvciwgaW5jbHVkaW5nIHdoYXQgaXMgZGVsaWJlcmF0ZWx5IE5PVFxuICAgKiBzZXQ6IGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIHN0YXlzIHVuc2V0IHNvIHRoZSBTREsga2VlcHMgZXhwb3J0aW5nIHRvIHRoZSBpbi1MYW1iZGEgY29sbGVjdG9yXG4gICAqIG9uIGxvY2FsaG9zdCByYXRoZXIgdGhhbiBibG9ja2luZyB0aGUgaW52b2NhdGlvbiBvbiB0aGUgcmVtb3RlIGRlc3RpbmF0aW9uLCBhbmQgZXZlcnkgc2lnbmFsIGV4cG9ydGVyIGlzIHNlbGVjdGVkIGV4cGxpY2l0bHkuXG4gICAqL1xuICBwcml2YXRlIGVudmlyb25tZW50Rm9yKGZuOiBsYW1iZGEuRnVuY3Rpb24sIGxhbmd1YWdlOiBzdHJpbmcsIGxheWVyQXJuOiBzdHJpbmcsIGNvbGxlY3RvckxheWVyQXJuPzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgeyBkZXN0aW5hdGlvbiwgbW9kZSwgZGVidWcsIHNlcnZpY2VOYW1lLCBqYXZhSGFuZGxlckRpc3RybywgZGlzdHJvLCBleGlzdGluZ0xvYWRlclZhbHVlIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3Qgd2ViU2VydmVyID0gbW9kZSA9PT0gT2RpZ29zSW5zdHJ1bWVudGF0aW9uTW9kZS5XRUJfU0VSVkVSO1xuXG4gICAgY29uc3QgcmVjaXBlID0gZGlzdHJpYnV0aW9uUmVjaXBlKGxhbmd1YWdlLCBkaXN0cm8sIGZuLnJ1bnRpbWUubmFtZSk7XG4gICAgY29uc3Qgc2lnbmFscyA9IHJlc29sdmVkU2lnbmFscyhkZXN0aW5hdGlvbik7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG4gICAgY29uc3QgY3VycmVudCA9IFN0YWNrLm9mKGZuKS5yZXNvbHZlKHJlc291cmNlLmVudmlyb25tZW50KSBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb24uRW52aXJvbm1lbnRQcm9wZXJ0eSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvcmlnaW5hbFdyYXBwZXIgPSAoY3VycmVudD8udmFyaWFibGVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQpPy5BV1NfTEFNQkRBX0VYRUNfV1JBUFBFUiA/PyAnJztcbiAgICBjb25zdCBleGVjV3JhcHBlciA9IHdlYlNlcnZlciA/ICcvb3B0L29kaWdvcy13ZWJzZXJ2ZXInIDogZGlzdHJpYnV0aW9uV3JhcHBlcihsYW5ndWFnZSwgZGlzdHJvLCBqYXZhSGFuZGxlckRpc3RybywgZmFsc2UpO1xuICAgIGNvbnN0IGZ1bmN0aW9uTG9ncyA9IHNpZ25hbHMubG9ncyAmJiAhd2ViU2VydmVyICYmIChsYW5ndWFnZSA9PT0gJ3J1YnknIHx8IChsYW5ndWFnZSA9PT0gJ2phdmEnICYmXG4gICAgICBbJy9vcHQvb3RlbC1oYW5kbGVyJywgJy9vcHQvb3RlbC1wcm94eS1oYW5kbGVyJywgJy9vcHQvb3RlbC1zcXMtaGFuZGxlcicsICcvb3B0L290ZWwtc3RyZWFtLWhhbmRsZXInXS5pbmNsdWRlcyhleGVjV3JhcHBlcikpKTtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAyLFxuICAgICAgc2VydmljZTogc2VydmljZU5hbWUgPz8gZGVmYXVsdFNlcnZpY2VOYW1lKGZuKSxcbiAgICAgIHNpZ25hbHM6IFsndHJhY2VzJywgJ21ldHJpY3MnLCAnbG9ncyddLmZpbHRlcihzaWduYWwgPT4gc2lnbmFsc1tzaWduYWwgYXMga2V5b2YgdHlwZW9mIHNpZ25hbHNdKSxcbiAgICAgIGVuZHBvaW50OiBkZXN0aW5hdGlvbi5lbmRwb2ludCA/PyBkZXN0aW5hdGlvbi5odHRwRW5kcG9pbnQsXG4gICAgICAuLi4oZGVzdGluYXRpb24uaHR0cEVuZHBvaW50ID8geyBodHRwOiB0cnVlIH0gOiB7fSksXG4gICAgICAuLi4oZGVzdGluYXRpb24uZW5kcG9pbnQgJiYgZGVzdGluYXRpb24uaW5zZWN1cmUgPyB7IGluc2VjdXJlOiB0cnVlIH0gOiB7fSksXG4gICAgICAuLi4oZGVzdGluYXRpb24uaGVhZGVycyAmJiBPYmplY3Qua2V5cyhkZXN0aW5hdGlvbi5oZWFkZXJzKS5sZW5ndGggPyB7IGhlYWRlcnM6IGRlc3RpbmF0aW9uLmhlYWRlcnMgfSA6IHt9KSxcbiAgICAgIC4uLihyZWNpcGUuYXBwbGljYXRpb25TaWduYWxzID8geyBhcHBsaWNhdGlvblNpZ25hbHM6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihmdW5jdGlvbkxvZ3MgPyB7IGZ1bmN0aW9uTG9nczogdHJ1ZSB9IDoge30pLFxuICAgICAgLi4uKGRlYnVnICYmICF3ZWJTZXJ2ZXIgPyB7IGRlYnVnOiB0cnVlIH0gOiB7fSksXG4gICAgICAuLi4od2ViU2VydmVyID8geyB3ZWJXcmFwcGVyOiBvcmlnaW5hbFdyYXBwZXIgfSA6IHt9KSxcbiAgICB9O1xuICAgIGNvbnN0IGVudjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgIFtFTlZfRVhFQ19XUkFQUEVSXTogZXhlY1dyYXBwZXIsXG4gICAgICBbRU5WX0xBTUJEQV9DT05GSUddOiBKU09OLnN0cmluZ2lmeShjb25maWcpLFxuICAgIH07XG4gICAgVGFncy5vZihmbikuYWRkKCdvZGlnb3M6aWFjJywgJ3YxJyk7XG4gICAgVGFncy5vZihmbikuYWRkKCdvZGlnb3M6c2RrLWxheWVyJywgbGF5ZXJBcm4pO1xuICAgIGlmIChjb2xsZWN0b3JMYXllckFybikgVGFncy5vZihmbikuYWRkKCdvZGlnb3M6Y29sbGVjdG9yLWxheWVyJywgY29sbGVjdG9yTGF5ZXJBcm4pO1xuICAgIC8vIEV4cGxpY2l0IGN1c3RvbWVyIGxvYWRlciBvcHRpb25zIHJlbWFpbiBvcmRpbmFyeSBjdXN0b21lciBlbnZpcm9ubWVudCB2YWx1ZXMuXG4gICAgaWYgKHdlYlNlcnZlciAmJiBleGlzdGluZ0xvYWRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGxvYWRlcktleSA9IHsgamF2YTogJ0pBVkFfVE9PTF9PUFRJT05TJywgbm9kZWpzOiAnTk9ERV9PUFRJT05TJywgcHl0aG9uOiAnUFlUSE9OUEFUSCcgfVtsYW5ndWFnZV07XG4gICAgICBpZiAobG9hZGVyS2V5KSBlbnZbbG9hZGVyS2V5XSA9IGV4aXN0aW5nTG9hZGVyVmFsdWU7XG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PT0gJ3J1YnknICYmIHNpZ25hbHMubWV0cmljcykge1xuICAgICAgQW5ub3RhdGlvbnMub2YoZm4pLmFkZFdhcm5pbmdWMignQG9kaWdvcy9hd3MtY2RrOnJ1YnlTaWduYWxzVW5zdXBwb3J0ZWQnLFxuICAgICAgICAnVGhlIGJ1bmRsZWQgUnVieSBMYW1iZGEgU0RLIGNhbm5vdCBnZW5lcmF0ZSBPVExQIG1ldHJpY3MuIEZ1bmN0aW9uIHN0ZG91dC9zdGRlcnIgbG9ncyBhcmUgY29sbGVjdGVkIGJ5IHRoZSBMYW1iZGEgY29sbGVjdG9yIHdoZW4gbG9ncyBhcmUgc2VsZWN0ZWQuJyk7XG4gICAgfVxuICAgIGlmIChkZXN0aW5hdGlvbi5wcm9maWxlcykge1xuICAgICAgQW5ub3RhdGlvbnMub2YoZm4pLmFkZFdhcm5pbmdWMignQG9kaWdvcy9hd3MtY2RrOnByb2ZpbGVzVW5zdXBwb3J0ZWQnLFxuICAgICAgICAnVGhlIGJ1bmRsZWQgTGFtYmRhIGxhbmd1YWdlIGFnZW50cyBkbyBub3QgZ2VuZXJhdGUgT1RMUCBwcm9maWxlcy4gT3RoZXIgc2VsZWN0ZWQgc2lnbmFscyByZW1haW4gZW5hYmxlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudjtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZGlnb3NJbnN0cnVtZW50YXRpb25Bc3BlY3RQcm9wcyBleHRlbmRzIE9kaWdvc0luc3RydW1lbnRhdGlvbk9wdGlvbnMge31cblxuLyoqXG4gKiBBcHBsaWVzIE9kaWdvcyBpbnN0cnVtZW50YXRpb24gdG8gZXZlcnkgYGxhbWJkYS5GdW5jdGlvbmAgaW4gYSBzY29wZS5cbiAqXG4gKiBgYGB0c1xuICogQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBPZGlnb3NJbnN0cnVtZW50YXRpb25Bc3BlY3Qoc3RhY2ssIHtcbiAqICAgZGVzdGluYXRpb246IHsgZW5kcG9pbnQ6ICdvdGxwLmV4YW1wbGUuY29tOjQzMTcnIH0sXG4gKiB9KSk7XG4gKiBgYGBcbiAqXG4gKiBgc2tpcFVuc3VwcG9ydGVkUnVudGltZXNgIGRlZmF1bHRzIHRvIGB0cnVlYCBoZXJlLCB1bmxpa2UgdGhlIGNvbnN0cnVjdDogYW4gYXNwZWN0IHZpc2l0cyBldmVyeSBmdW5jdGlvblxuICogaW4gdGhlIHNjb3BlLCBpbmNsdWRpbmcgb25lcyB3aG9zZSBydW50aW1lIGhhcyBubyBPcGVuVGVsZW1ldHJ5IGxheWVyLCBhbmQgZmFpbGluZyB0aGUgd2hvbGUgc3ludGhcbiAqIGJlY2F1c2UgYSBzdGFjayBoYXBwZW5zIHRvIGNvbnRhaW4gb25lIEdvIGZ1bmN0aW9uIGlzIG5vdCB1c2VmdWwuIEVhY2ggc2tpcCBpcyByZXBvcnRlZCBhcyBhIHN5bnRoXG4gKiB3YXJuaW5nLCBzbyBpdCBpcyB2aXNpYmxlIHJhdGhlciB0aGFuIHNpbGVudC5cbiAqXG4gKiBUaGUgYXNwZWN0IGluc3RydW1lbnRzIHdoYXQgZXhpc3RzIGluIHRoZSB0cmVlIHdoZW4gaXQgcnVucy4gQSBmdW5jdGlvbiBhZGRlZCBieSBhIGxhdGVyIGFzcGVjdCBpcyBub3RcbiAqIHZpc2l0ZWQ7IHVzZSB0aGUgY29uc3RydWN0IGRpcmVjdGx5IGZvciB0aG9zZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE9kaWdvc0luc3RydW1lbnRhdGlvbkFzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGluc3RydW1lbnRhdGlvbjogT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gc2NvcGUgd2hlcmUgdGhlIHNoYXJlZCBsYXllciBjb25zdHJ1Y3RzIGFyZSBjcmVhdGVkLiBVc3VhbGx5IHRoZSBzYW1lIHNjb3BlIHRoZSBhc3BlY3QgaXNcbiAgICogYXBwbGllZCB0by4gSXQgaXMgYSBzZXBhcmF0ZSBhcmd1bWVudCBmcm9tIHRoZSB2aXNpdGVkIG5vZGVzIGJlY2F1c2UgdGhlIGxheWVyIChhbmQsIGluIGBJTl9BQ0NPVU5UYFxuICAgKiBtb2RlLCB0aGUgbmVzdGVkIFNBUiBhcHBsaWNhdGlvbikgaXMgY3JlYXRlZCBvbmNlIGFuZCBzaGFyZWQgYnkgZXZlcnkgZnVuY3Rpb24gdGhlIGFzcGVjdCB2aXNpdHMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBwcm9wczogT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0UHJvcHMpIHtcbiAgICB0aGlzLmluc3RydW1lbnRhdGlvbiA9IG5ldyBPZGlnb3NMYW1iZGFJbnN0cnVtZW50YXRpb24oc2NvcGUsICdPZGlnb3NJbnN0cnVtZW50YXRpb25Bc3BlY3QnLCB7XG4gICAgICBza2lwVW5zdXBwb3J0ZWRSdW50aW1lczogdHJ1ZSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIGxhbWJkYS5GdW5jdGlvbikge1xuICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb24uaW5zdHJ1bWVudChub2RlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
264
|
+
OdigosInstrumentationAspect[_b] = { fqn: "@odigos/aws-cdk.OdigosInstrumentationAspect", version: "0.0.20" };
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1RTtBQUN2RSxpREFBaUQ7QUFDakQsMkNBQTJDO0FBQzNDLDJDQUFtRDtBQUNuRCx5REFHNEI7QUFDNUIscURBQXVEO0FBQ3ZELHVDQUF5RjtBQUN6RixtQ0FLaUI7QUFFakIsMkVBQTJFO0FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7QUFDbkQsa0VBQWtFO0FBQ2xFLDhGQUE4RjtBQUM5RixNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQVMsa0JBQWtCLENBQUMsRUFBbUI7SUFDN0MsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUE4QyxDQUFDO0lBQ25FLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBd0hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQWEsMkJBQTRCLFNBQVEsc0JBQVM7SUFLeEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QztRQUMvRSxLQUFLLENBQUMsS0FBSyxF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SUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsS0FBdUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLDJCQUEyQixDQUFDLEtBQUssRUFBRSw2QkFBNkIsRUFBRTtZQUMzRix1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBZ0I7UUFDM0IsSUFBSSxJQUFJLFlBQVksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDOztBQW5CSCxrRUFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbm5vdGF0aW9ucywgSUFzcGVjdCwgU3RhY2ssIFRva2VuLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICByZXNvbHZlZFNpZ25hbHMsXG4gIHJlbmRlckNvbGxlY3RvckNvbmZpZyxcbn0gZnJvbSAnLi9jb2xsZWN0b3ItY29uZmlnJztcbmltcG9ydCB7IE9kaWdvc0xheWVyUmVzb2x2ZXIgfSBmcm9tICcuL2xheWVyLXJlc29sdmVyJztcbmltcG9ydCB7IGRpc3RyaWJ1dGlvblJlY2lwZSwgZGlzdHJpYnV0aW9uV3JhcHBlciwgbGFuZ3VhZ2VGcm9tUnVudGltZSB9IGZyb20gJy4vcnVudGltZSc7XG5pbXBvcnQge1xuICBPZGlnb3NEZXN0aW5hdGlvbixcbiAgT2RpZ29zSW5zdHJ1bWVudGF0aW9uTW9kZSxcbiAgT2RpZ29zSmF2YUhhbmRsZXJEaXN0cm8sXG4gIE9kaWdvc0xheWVyU291cmNlLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqIGBBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUmAg4oCUIHRoZSBsYXllcidzIGVudHJ5IHBvaW50IGluIGhhbmRsZXIgbW9kZS4gKi9cbmNvbnN0IEVOVl9FWEVDX1dSQVBQRVIgPSAnQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVInO1xuLyoqIFNlcnZpY2UgbmFtZSByZXBvcnRlZCBvbiBldmVyeSBzcGFuLCBtZXRyaWMgYW5kIGxvZyByZWNvcmQuICovXG4vKiogQ29tcGFjdCBTREsgYW5kIGRlc3RpbmF0aW9uIHNldHRpbmdzOyBhbGwgYXR0cmlidXRpb24gbWFya2VycyBhcmUgTGFtYmRhIHJlc291cmNlIHRhZ3MuICovXG5jb25zdCBFTlZfTEFNQkRBX0NPTkZJRyA9ICdPRElHT1NfTEFNQkRBX0NPTkZJRyc7XG5cbi8qKlxuICogVGhlIHNlcnZpY2UgYSBmdW5jdGlvbiByZXBvcnRzIGFzLCB3aGVuIHRoZSBjYWxsZXIgaGFzIG5vdCBuYW1lZCBvbmUuXG4gKlxuICogUkVBRCBGUk9NIFRIRSBMMSwgTk9UIEZST00gYGZuLmZ1bmN0aW9uTmFtZWAuIFRoZSBMMiBwcm9wZXJ0eSBpcyBhIGNyb3NzLWVudmlyb25tZW50LWF3YXJlIHRva2VuIHRoYXRcbiAqIHJlc29sdmVzIHRvIGEgYFJlZmAgdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZiBldmVuIHdoZW4gdGhlIHN0YWNrIHNldCBgZnVuY3Rpb25OYW1lYCBleHBsaWNpdGx5IOKAlCBzbyB0aGVcbiAqIG9idmlvdXMgYFN0YWNrLm9mKGZuKS5yZXNvbHZlKGZuLmZ1bmN0aW9uTmFtZSlgIG5ldmVyIHlpZWxkcyBhIGxpdGVyYWwsIGFuZCBldmVyeSBmdW5jdGlvbiBzaWxlbnRseSBmZWxsXG4gKiBiYWNrIHRvIGl0cyBjb25zdHJ1Y3QgaWQuIGBDZm5GdW5jdGlvbi5mdW5jdGlvbk5hbWVgIGlzIHRoZSByYXcgdGVtcGxhdGUgdmFsdWU6IHRoZSBsaXRlcmFsIHRoZSBzdGFja1xuICogcGFzc2VkLCBvciB1bmRlZmluZWQgd2hlbiBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZXMgdGhlIG5hbWUuXG4gKlxuICogV2h5IHRoZSBmYWxsYmFjayBpcyB0aGUgY29uc3RydWN0IGlkIHJhdGhlciB0aGFuIHRoZSBnZW5lcmF0ZWQgbmFtZTogYSBnZW5lcmF0ZWQgbmFtZSBpcyBhIGBSZWZgIHRvIHRoZVxuICogZnVuY3Rpb24sIGFuZCBwdXR0aW5nIHRoYXQgaW4gdGhlIGZ1bmN0aW9uJ3Mgb3duIGVudmlyb25tZW50IG1ha2VzIHRoZSByZXNvdXJjZSBkZXBlbmQgb24gaXRzIG93blxuICogY3JlYXRpb24g4oCUIENsb3VkRm9ybWF0aW9uIHJlamVjdHMgdGhlIHRlbXBsYXRlIHdpdGggYSBkZXBlbmRlbmN5IGN5Y2xlLCBhdCBkZXBsb3kgdGltZS5cbiAqXG4gKiBUaGlzIG1hdHRlcnMgYmV5b25kIGNvc21ldGljcy4gVGhlIGNvbm5lY3RvciBjb21wYXJlcyBgT1RFTF9TRVJWSUNFX05BTUVgIGFnYWluc3QgdGhlIHdvcmtsb2FkJ3MgbmFtZSBpblxuICogT2RpZ29zLCB3aGljaCBpcyB0aGUgcmVhbCBBV1MgZnVuY3Rpb24gbmFtZSwgc28gYSBmdW5jdGlvbiByZXBvcnRpbmcgaXRzIGNvbnN0cnVjdCBpZCBpcyByZXBvcnRlZCBhc1xuICogZHJpZnRlZCBvbiB0aGUgc2VydmljZS1uYW1lIGNvbXBvbmVudC4gTmFtaW5nIHRoZSBmdW5jdGlvbiBpbiB5b3VyIHN0YWNrIGlzIG5vdyBlbm91Z2ggdG8gbGluZSB0aGUgdHdvXG4gKiB1cDsgYSBmdW5jdGlvbiB3aG9zZSBuYW1lIENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlcyBzdGlsbCBuZWVkcyBgc2VydmljZU5hbWVgIHBhc3NlZCBleHBsaWNpdGx5LlxuICovXG5mdW5jdGlvbiBkZWZhdWx0U2VydmljZU5hbWUoZm46IGxhbWJkYS5GdW5jdGlvbik6IHN0cmluZyB7XG4gIGNvbnN0IGNmbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcmVzb2x2ZWQgPSBjZm4gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFN0YWNrLm9mKGZuKS5yZXNvbHZlKGNmbi5mdW5jdGlvbk5hbWUpO1xuICBpZiAodHlwZW9mIHJlc29sdmVkID09PSAnc3RyaW5nJyAmJiByZXNvbHZlZCAhPT0gJycgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChyZXNvbHZlZCkpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cbiAgcmV0dXJuIGZuLm5vZGUuaWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBzaGFyZWQgYnkgdGhlIGNvbnN0cnVjdCBhbmQgdGhlIGFzcGVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZGlnb3NJbnN0cnVtZW50YXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBpbi1MYW1iZGEgY29sbGVjdG9yIGV4cG9ydHMgdG8uXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbjogT2RpZ29zRGVzdGluYXRpb247XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBPZGlnb3MgbGF5ZXIgY29tZXMgZnJvbS5cbiAgICpcbiAgICogQGRlZmF1bHQgT2RpZ29zTGF5ZXJTb3VyY2UuT0RJR09TX1BVQkxJQ1xuICAgKi9cbiAgcmVhZG9ubHkgbGF5ZXJTb3VyY2U/OiBPZGlnb3NMYXllclNvdXJjZTtcblxuICAvKipcbiAgICogSGFuZGxlciBtb2RlIG9yIHdlYi1zZXJ2ZXIgKExhbWJkYSBXZWIgQWRhcHRlcikgbW9kZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gYXV0by1kZXRlY3Rpb24sIGFuZCB0aGF0IGlzIGRlbGliZXJhdGUgcmF0aGVyIHRoYW4gYW4gb21pc3Npb246IGRldGVjdGluZyB0aGUgd2ViIGFkYXB0ZXJcbiAgICogbWVhbnMgaW5zcGVjdGluZyB0aGUgZnVuY3Rpb24ncyBvdGhlciBsYXllcnMsIHdoaWNoIGF0IHN5bnRoIHRpbWUgYXJlIGZyZXF1ZW50bHkgdW5yZXNvbHZlZCB0b2tlbnMuXG4gICAqIEEgZGV0ZWN0b3IgdGhhdCBpcyByaWdodCBtb3N0IG9mIHRoZSB0aW1lIHdvdWxkIHNpbGVudGx5IGJyZWFrIHRoZSBmdW5jdGlvbnMgaXQgZ290IHdyb25nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBPZGlnb3NJbnN0cnVtZW50YXRpb25Nb2RlLkhBTkRMRVJcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBPZGlnb3NJbnN0cnVtZW50YXRpb25Nb2RlO1xuXG4gIC8qKlxuICAgKiBDb25uZWN0b3IgR3JhcGhRTCBkaXN0cm8gbmFtZSwgc3VjaCBhcyBqYXZhLWxhbWJkYS1vdGVsLWFnZW50IG9yIGphdmEtbGFtYmRhLW90ZWwtd3JhcHBlci5cbiAgICogQGRlZmF1bHQgLSB0aGUgYnVuZGxlZCBkZWZhdWx0IGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGZ1bmN0aW9uJ3MgcnVudGltZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJvPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMZWdhY3kgbGlnaHR3ZWlnaHQgSmF2YSBoYW5kbGVyIGFkYXB0ZXIuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgY29ycmVzcG9uZGluZyBqYXZhLWxhbWJkYS1vdGVsLSotd3JhcHBlciBkaXN0cm8uXG4gICAqL1xuICByZWFkb25seSBqYXZhSGFuZGxlckRpc3Rybz86IE9kaWdvc0phdmFIYW5kbGVyRGlzdHJvO1xuXG4gIC8qKlxuICAgKiBgT1RFTF9TRVJWSUNFX05BTUVgIGZvciBldmVyeSBmdW5jdGlvbiB0aGlzIGluc3RydW1lbnRzLlxuICAgKlxuICAgKiBVc3VhbGx5IHdyb25nIHRvIHNldCB3aGVuIGluc3RydW1lbnRpbmcgbW9yZSB0aGFuIG9uZSBmdW5jdGlvbiDigJQgdGhleSB3b3VsZCBhbGwgcmVwb3J0IGFzIHRoZSBzYW1lXG4gICAqIHNlcnZpY2UuXG4gICAqXG4gICAqIExlZnQgdW5zZXQsIGEgZnVuY3Rpb24gcmVwb3J0cyBhcyBpdHMgZXhwbGljaXRseS1zZXQgcGh5c2ljYWwgbmFtZSBpZiBpdCBoYXMgb25lLCBhbmQgb3RoZXJ3aXNlIGFzXG4gICAqIGl0cyBjb25zdHJ1Y3QgaWQuIEl0IGRlbGliZXJhdGVseSBkb2VzIG5vdCBkZWZhdWx0IHRvIHRoZSBnZW5lcmF0ZWQgcGh5c2ljYWwgbmFtZTogdGhhdCB2YWx1ZSBpcyBhXG4gICAqIGBSZWZgIHRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGFuZCBhIGZ1bmN0aW9uIHJlZmVyZW5jaW5nIGl0c2VsZiBpbiBpdHMgb3duIGVudmlyb25tZW50IGlzIGFcbiAgICogQ2xvdWRGb3JtYXRpb24gZGVwZW5kZW5jeSBjeWNsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZnVuY3Rpb24ncyBwaHlzaWNhbCBuYW1lIGlmIGV4cGxpY2l0bHkgc2V0LCBvdGhlcndpc2UgaXRzIGNvbnN0cnVjdCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJhaXNlIGluLWZ1bmN0aW9uIE9wZW5UZWxlbWV0cnkgdmVyYm9zaXR5IChgT1RFTF9MT0dfTEVWRUw9ZGVidWdgKS5cbiAgICpcbiAgICogVGhlIFNESyBhbmQgY29sbGVjdG9yIGNhbiB0aGVuIGVtaXQgYWRkaXRpb25hbCBPVExQLWV4cG9ydCBkaWFnbm9zdGljcyBpbnRvIHRoZSBmdW5jdGlvbidzIENsb3VkV2F0Y2hcbiAgICogbG9nIGdyb3VwLiBVc2VmdWwgd2hpbGUgd2lyaW5nIHVwIGEgZGVzdGluYXRpb24sIGV4cGVuc2l2ZSB0byBsZWF2ZSBvbi5cbiAgICpcbiAgICogSGFzIG5vIGVmZmVjdCBpbiB3ZWItc2VydmVyIG1vZGUsIG1hdGNoaW5nIHRoZSBjb25uZWN0b3IsIHdoaWNoIG5ldmVyIHNldHMgYSBsb2cgbGV2ZWwgdGhlcmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF0dGFjaCB0aGlzIGxheWVyIGluc3RlYWQgb2YgcmVzb2x2aW5nIG9uZS4gT3ZlcnJpZGVzIGBsYXllclNvdXJjZWAgZW50aXJlbHkuXG4gICAqXG4gICAqIFRoZSBlc2NhcGUgaGF0Y2ggZm9yIGEgbGF5ZXIgbWlycm9yZWQgaW50byBhIHByaXZhdGUgcmVnaXN0cnkgb3IgYW4gaW50ZXJuYWwgYWNjb3VudC4gVGhlIGxheWVyIG11c3RcbiAgICogaGF2ZSB0aGUgc2FtZSBjb250ZW50cyBhcyB0aGUgT2RpZ29zIG9uZSDigJQgdGhlIGVudmlyb25tZW50IHNldCBoZXJlIGFzc3VtZXMgaXRzIGV4YWN0IHNjcmlwdCBsYXlvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcmVzb2x2ZWQgZnJvbSBsYXllclNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF5ZXJWZXJzaW9uPzogbGFtYmRhLklMYXllclZlcnNpb247XG5cbiAgLyoqXG4gICAqIEFyY2hpdGVjdHVyZS1tYXRjaGVkIGNvbGxlY3RvciBsYXllciB3aGVuIHN1cHBseWluZyBhIGN1c3RvbSBBRE9UIFNESyBsYXllci5cbiAgICogVXBzdHJlYW0gU0RLIGxheWVycyBhbHJlYWR5IGluY2x1ZGUgdGhlaXIgY29sbGVjdG9yIGFuZCBkbyBub3QgdXNlIHRoaXMgb3B0aW9uLlxuICAgKiBAZGVmYXVsdCAtIHJlc29sdmVkIGZyb20gbGF5ZXJTb3VyY2UgZm9yIEFET1RcbiAgICovXG4gIHJlYWRvbmx5IGNvbGxlY3RvckxheWVyVmVyc2lvbj86IGxhbWJkYS5JTGF5ZXJWZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdGhlIGZ1bmN0aW9uIGFscmVhZHkgbmVlZHMgaW4gaXRzIGxhbmd1YWdlIGxvYWRlciB2YXJpYWJsZSAoYE5PREVfT1BUSU9OU2AsXG4gICAqIGBKQVZBX1RPT0xfT1BUSU9OU2Agb3IgYFBZVEhPTlBBVEhgKSwgd2hpY2ggdGhlIE9kaWdvcyBsb2FkZXIgaXMgam9pbmVkIHRvIHJhdGhlciB0aGFuIHJlcGxhY2luZy5cbiAgICpcbiAgICogT25seSB1c2VkIGluIHdlYi1zZXJ2ZXIgbW9kZS4gVGhlIGxhdW5jaGVyIHByZXNlcnZlcyB0aGUgZnVuY3Rpb24ncyBleGlzdGluZyBsb2FkZXIgYXQgc3RhcnR1cDtcbiAgICogdGhpcyBvcHRpb25hbCB2YWx1ZSBvdmVycmlkZXMgdGhlIGN1c3RvbWVyJ3Mgc2F2ZWQgbG9hZGVyIHNldHRpbmcgYmVmb3JlIGluc3RydW1lbnRhdGlvbiBpcyBhZGRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcmVzZXJ2ZSB0aGUgZnVuY3Rpb24ncyBleGlzdGluZyBsb2FkZXIgdmFyaWFibGVcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nTG9hZGVyVmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNraXAgZnVuY3Rpb25zIHdob3NlIHJ1bnRpbWUgaGFzIG5vIE9wZW5UZWxlbWV0cnkgTGFtYmRhIGxheWVyIGluc3RlYWQgb2YgdGhyb3dpbmcuXG4gICAqXG4gICAqIGBkb3RuZXQqYCBhbmQgYHByb3ZpZGVkLipgIChHbywgY3VzdG9tIHJ1bnRpbWVzKSBoYXZlIG5vIGxhbmd1YWdlIGxheWVyIHVwc3RyZWFtLiBFeHBsaWNpdGx5XG4gICAqIGluc3RydW1lbnRpbmcgb25lIGlzIGEgbWlzdGFrZSB3b3J0aCBmYWlsaW5nIG9uOyBzd2VlcGluZyBhIHdob2xlIHN0YWNrIHdpdGggdGhlIGFzcGVjdCBhbmQgaGl0dGluZ1xuICAgKiBvbmUgaXMgbm90LCB3aGljaCBpcyB3aHkgdGhlIGFzcGVjdCBkZWZhdWx0cyB0aGlzIHRvIGB0cnVlYCBhbmQgdGhlIGNvbnN0cnVjdCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFVuc3VwcG9ydGVkUnVudGltZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9ufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZGlnb3NMYW1iZGFJbnN0cnVtZW50YXRpb25Qcm9wcyBleHRlbmRzIE9kaWdvc0luc3RydW1lbnRhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogRnVuY3Rpb25zIHRvIGluc3RydW1lbnQgb24gY29uc3RydWN0aW9uLiBNb3JlIGNhbiBiZSBhZGRlZCB3aXRoIGBpbnN0cnVtZW50KClgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9ucz86IGxhbWJkYS5GdW5jdGlvbltdO1xufVxuXG4vKipcbiAqIEluc3RydW1lbnRzIEFXUyBMYW1iZGEgZnVuY3Rpb25zIHdpdGggdGhlIE9kaWdvcyBPcGVuVGVsZW1ldHJ5IGxheWVyLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBvZGlnb3MgPSBuZXcgT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uKHRoaXMsICdPZGlnb3MnLCB7XG4gKiAgIGRlc3RpbmF0aW9uOiB7IGVuZHBvaW50OiAnb3RscC5leGFtcGxlLmNvbTo0MzE3JyB9LFxuICogICBmdW5jdGlvbnM6IFthcGlGbiwgd29ya2VyRm5dLFxuICogfSk7XG4gKiBvZGlnb3MuaW5zdHJ1bWVudChhbm90aGVyRm4pO1xuICogYGBgXG4gKlxuICogV2hhdCBpdCBkb2VzIHRvIGVhY2ggZnVuY3Rpb246IGF0dGFjaGVzIHRoZSBsYXllciBmb3IgdGhlIGZ1bmN0aW9uJ3MgbGFuZ3VhZ2UgYW5kIGFyY2hpdGVjdHVyZSwgc2V0c1xuICogYEFXU19MQU1CREFfRVhFQ19XUkFQUEVSYCBhbmQgY29tcGFjdCBgT0RJR09TX0xBTUJEQV9DT05GSUdgLiBUaGUgbGF5ZXIgYnVpbGRzIHRoZSBTREsgZW52aXJvbm1lbnQgYW5kXG4gKiBjb2xsZWN0b3IgcGlwZWxpbmVzIGF0IHN0YXJ0dXA7IG93bmVyc2hpcCBhbmQgZXhhY3QgbGF5ZXIgYXR0cmlidXRpb24gYXJlIHJlY29yZGVkIGluIHJlc291cmNlIHRhZ3MuXG4gKlxuICogVGhlIGZ1bmN0aW9uJ3MgU0RLIGV4cG9ydHMgdG8gdGhlIGNvbGxlY3RvciBvbiBsb2NhbGhvc3QsIG5vdCB0byB5b3VyIGRlc3RpbmF0aW9uLiBUaGUgY29sbGVjdG9yXG4gKiBmb3J3YXJkcyBhZnRlciB0aGUgaGFuZGxlciBoYXMgYWxyZWFkeSByZXR1cm5lZCwgc28gYSBzbG93IGRlc3RpbmF0aW9uIGNvc3RzIGJpbGxlZCBkdXJhdGlvbiByYXRoZXJcbiAqIHRoYW4gY2FsbGVyIGxhdGVuY3kuXG4gKlxuICogIyMgRG8gbm90IGFsc28gaW5zdHJ1bWVudCB0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGUgY29ubmVjdG9yXG4gKlxuICogVGhlIE9kaWdvcyBBV1MgY29ubmVjdG9yIGluc3RydW1lbnRzIGxpdmUgZnVuY3Rpb25zIGJ5IG11dGF0aW5nIHRoZW0sIGFuZCByZWNvbmNpbGVzIHRoZW0gYmFjayB0byBpdHNcbiAqIG93biBkZXNpcmVkIHN0YXRlIG9uIGV2ZXJ5IHBhc3MuIEEgZnVuY3Rpb24gaW5zdHJ1bWVudGVkIGhlcmUgYW5kIGFsc28gZW5hYmxlZCBhcyBhIGNvbm5lY3RvciBzb3VyY2VcbiAqIGVuZHMgdXAgb3duZWQgYnkgYm90aDogZWFjaCBgY2RrIGRlcGxveWAgcmVhc3NlcnRzIHRoZSBDREsncyBlbnZpcm9ubWVudCwgZWFjaCByZWNvbmNpbGUgcmVhc3NlcnRzIHRoZVxuICogY29ubmVjdG9yJ3MsIGFuZCBldmVyeSByb3VuZCB0cmlwIHB1Ymxpc2hlcyBhIG5ldyBmdW5jdGlvbiB2ZXJzaW9uLlxuICpcbiAqIENob29zZSBvbmUgcGVyIGZ1bmN0aW9uLiBUaGlzIGNvbnN0cnVjdCB3cml0ZXMgYG9kaWdvczppYWNgIHJlc291cmNlIHRhZ3MgYW5kIG5ldmVyIHRoZSBjb25uZWN0b3IncyBgb2RpZ29zOm1hbmFnZWRgXG4gKiBvd25lcnNoaXAgdGFnLCBzbyBhbiBJYUMtaW5zdHJ1bWVudGVkIGZ1bmN0aW9uIHJlcG9ydHMgYXMgaW5zdHJ1bWVudGVkIGJ1dCBpcyBub3Qgb25lIHRoZSBjb25uZWN0b3JcbiAqIHdpbGwgcm9sbCBiYWNrIOKAlCB0aG91Z2ggaXQgd2lsbCBoYXBwaWx5IHRha2UgaXQgb3ZlciBpZiB5b3UgZW5hYmxlIGl0IGFzIGEgc291cmNlLlxuICovXG5leHBvcnQgY2xhc3MgT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBPZGlnb3NJbnN0cnVtZW50YXRpb25PcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVycyA9IG5ldyBNYXA8U3RhY2ssIE9kaWdvc0xheWVyUmVzb2x2ZXI+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5zdHJ1bWVudGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE9kaWdvc0xhbWJkYUluc3RydW1lbnRhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHByb3BzO1xuXG4gICAgLy8gUmVuZGVyZWQgb25jZS4gSXQgZGVwZW5kcyBvbmx5IG9uIHRoZSBkZXN0aW5hdGlvbiwgYW5kIHJlbmRlcmluZyBpdCBwZXIgZnVuY3Rpb24gd291bGQgbWFrZSBhblxuICAgIC8vIGFjY2lkZW50YWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBmdW5jdGlvbnMgcG9zc2libGUuXG4gICAgcmVuZGVyQ29sbGVjdG9yQ29uZmlnKHByb3BzLmRlc3RpbmF0aW9uKTtcblxuICAgIC8vIEEgd2FybmluZyByYXRoZXIgdGhhbiBhbiBlcnJvciwgYmVjYXVzZSBhIGNvbGxlY3RvciBDQU4gYmUgcmVhY2hlZCBvdmVyIGdSUEMgb24gYSBub24tc3RhbmRhcmQgcG9ydCDigJRcbiAgICAvLyBidXQgdGhlIG92ZXJ3aGVsbWluZ2x5IGxpa2VsaWVyIHJlYWRpbmcgb2YgYGVuZHBvaW50OiBcImhvc3Q6NDMxOFwiYCBpcyBhbiBPVExQL0hUVFAgZW5kcG9pbnQgcGFzc2VkIHRvXG4gICAgLy8gdGhlIGdSUEMgZXhwb3J0ZXIsIHdoaWNoIGJ1aWxkcywgc3RhcnRzLCBhbmQgdGhlbiBuZXZlciBkZWxpdmVycyBhIGJhdGNoLiBTaWxlbnQgZm9yIHRoZSBjYWxsZXIgd2hvXG4gICAgLy8gbWVhbnQgaXQ7IGxvdWQgZm9yIHRoZSBvbmUgd2hvIGRpZCBub3QuXG4gICAgaWYgKHByb3BzLmRlc3RpbmF0aW9uLmVuZHBvaW50Py5lbmRzV2l0aCgnOjQzMTgnKSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQG9kaWdvcy9hd3MtY2RrOnByb2JhYmxlSHR0cEVuZHBvaW50JyxcbiAgICAgICAgYE9kaWdvczogZGVzdGluYXRpb24gZW5kcG9pbnQgXCIke3Byb3BzLmRlc3RpbmF0aW9uLmVuZHBvaW50fVwiIGlzIG9uIDQzMTgsIHRoZSBPVExQL0hUVFAgcG9ydCwgYnV0IGAgK1xuICAgICAgICAgICdgZW5kcG9pbnRgIGNvbmZpZ3VyZXMgdGhlIGdSUEMgZXhwb3J0ZXIgKGNvbnZlbnRpb25hbGx5IDQzMTcpLiBJZiB0aGF0IGlzIGFuIE9UTFAvSFRUUCBjb2xsZWN0b3IsICcgK1xuICAgICAgICAgICdwYXNzIGl0IGFzIGBodHRwRW5kcG9pbnQ6IFwiaHR0cDovL2hvc3Q6NDMxOFwiYCBpbnN0ZWFkIOKAlCB0aGUgZ1JQQyBleHBvcnRlciB3aWxsIGV4cG9ydCBub3RoaW5nIHRvIGl0LicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZGVzdGluYXRpb24uaHR0cEVuZHBvaW50Py5lbmRzV2l0aCgnOjQzMTcnKSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQG9kaWdvcy9hd3MtY2RrOnByb2JhYmxlR3JwY0VuZHBvaW50JyxcbiAgICAgICAgYE9kaWdvczogZGVzdGluYXRpb24gaHR0cEVuZHBvaW50IFwiJHtwcm9wcy5kZXN0aW5hdGlvbi5odHRwRW5kcG9pbnR9XCIgaXMgb24gNDMxNywgdGhlIE9UTFAvZ1JQQyBwb3J0LCBgICtcbiAgICAgICAgICAnYnV0IGBodHRwRW5kcG9pbnRgIGNvbmZpZ3VyZXMgdGhlIEhUVFAgZXhwb3J0ZXIgKGNvbnZlbnRpb25hbGx5IDQzMTgpLiBJZiB0aGF0IGlzIGEgZ1JQQyBjb2xsZWN0b3IsICcgK1xuICAgICAgICAgICdwYXNzIGl0IGFzIGBlbmRwb2ludDogXCJob3N0OjQzMTdcImAgaW5zdGVhZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZuIG9mIHByb3BzLmZ1bmN0aW9ucyA/PyBbXSkge1xuICAgICAgdGhpcy5pbnN0cnVtZW50KGZuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5zdHJ1bWVudHMgb25lIGZ1bmN0aW9uLiBJZGVtcG90ZW50IOKAlCBpbnN0cnVtZW50aW5nIHRoZSBzYW1lIGZ1bmN0aW9uIHR3aWNlIGlzIGEgbm8tb3AgcmF0aGVyIHRoYW4gYVxuICAgKiBkb3VibGVkIGxvYWRlciB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBpbnN0cnVtZW50KGZuOiBsYW1iZGEuRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBmbi5ub2RlLnBhdGg7XG4gICAgaWYgKHRoaXMuaW5zdHJ1bWVudGVkLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcnVudGltZU5hbWUgPSBmbi5ydW50aW1lLm5hbWU7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZUZyb21SdW50aW1lKHJ1bnRpbWVOYW1lKTtcbiAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgYE9kaWdvczogcnVudGltZSBcIiR7cnVudGltZU5hbWV9XCIgaGFzIG5vIE9wZW5UZWxlbWV0cnkgTGFtYmRhIGxheWVyIGAgK1xuICAgICAgICAnKHVwc3RyZWFtIHB1Ymxpc2hlcyBsYXllcnMgZm9yIHB5dGhvbiwgbm9kZWpzLCBqYXZhIGFuZCBydWJ5IG9ubHkpLCBzbyB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSBpbnN0cnVtZW50ZWQuJztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2tpcFVuc3VwcG9ydGVkUnVudGltZXMpIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2YoZm4pLmFkZFdhcm5pbmdWMignQG9kaWdvcy9hd3MtY2RrOnVuc3VwcG9ydGVkUnVudGltZScsIGAke21lc3NhZ2V9IFNraXBwaW5nLmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX0gU2V0IHNraXBVbnN1cHBvcnRlZFJ1bnRpbWVzOiB0cnVlIHRvIHNraXAgaXQgaW5zdGVhZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGUgPSBkaXN0cmlidXRpb25SZWNpcGUobGFuZ3VhZ2UsIHRoaXMub3B0aW9ucy5kaXN0cm8sIHJ1bnRpbWVOYW1lKTtcbiAgICBkaXN0cmlidXRpb25XcmFwcGVyKGxhbmd1YWdlLCB0aGlzLm9wdGlvbnMuZGlzdHJvLCB0aGlzLm9wdGlvbnMuamF2YUhhbmRsZXJEaXN0cm8sIHRoaXMub3B0aW9ucy5tb2RlID09PSBPZGlnb3NJbnN0cnVtZW50YXRpb25Nb2RlLldFQl9TRVJWRVIpO1xuICAgIGlmIChyZWNpcGUuYXBwbGljYXRpb25TaWduYWxzICYmICghcmVzb2x2ZWRTaWduYWxzKHRoaXMub3B0aW9ucy5kZXN0aW5hdGlvbikudHJhY2VzIHx8ICFyZXNvbHZlZFNpZ25hbHModGhpcy5vcHRpb25zLmRlc3RpbmF0aW9uKS5tZXRyaWNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBRE9UICsgQXBwbGljYXRpb24gU2lnbmFscyByZXF1aXJlcyB0cmFjZXMgYW5kIG1ldHJpY3MgdG8gYmUgZW5hYmxlZCBmb3IgdGhlIGRlc3RpbmF0aW9uLicpO1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKGZuKTtcbiAgICBsZXQgcmVzb2x2ZXIgPSB0aGlzLnJlc29sdmVycy5nZXQoc3RhY2spO1xuICAgIGlmICghcmVzb2x2ZXIpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5ub2RlLnNjb3Blcy5pbmNsdWRlcyhzdGFjaykgPyB0aGlzIDogbmV3IENvbnN0cnVjdChzdGFjaywgYE9kaWdvc0xheWVycyR7dGhpcy5ub2RlLmFkZHJ9YCk7XG4gICAgICByZXNvbHZlciA9IG5ldyBPZGlnb3NMYXllclJlc29sdmVyKHNjb3BlLCB0aGlzLm9wdGlvbnMubGF5ZXJTb3VyY2UgPz8gT2RpZ29zTGF5ZXJTb3VyY2UuT0RJR09TX1BVQkxJQyk7XG4gICAgICB0aGlzLnJlc29sdmVycy5zZXQoc3RhY2ssIHJlc29sdmVyKTtcbiAgICB9XG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlID0gZm4uYXJjaGl0ZWN0dXJlLm5hbWU7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLm9wdGlvbnMubGF5ZXJWZXJzaW9uID8/IHJlc29sdmVyLnJlc29sdmUocmVjaXBlLmFydGlmYWN0ID8/IGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpO1xuICAgIGNvbnN0IGNvbGxlY3RvckxheWVyID0gcmVjaXBlLmFydGlmYWN0ID8gKHRoaXMub3B0aW9ucy5jb2xsZWN0b3JMYXllclZlcnNpb24gPz8gcmVzb2x2ZXIucmVzb2x2ZSgnYWRvdC1jb2xsZWN0b3InLCBhcmNoaXRlY3R1cmUpKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsYXllcnMgPSBjb2xsZWN0b3JMYXllciA/IFtsYXllciwgY29sbGVjdG9yTGF5ZXJdIDogW2xheWVyXTtcbiAgICBmb3IgKGNvbnN0IGF0dGFjaGVkIG9mIGxheWVycykge1xuICAgICAgY29uc3QgYXJuID0gYXR0YWNoZWQubGF5ZXJWZXJzaW9uQXJuO1xuICAgICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoYXJuKSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHN0YWNrLnJlZ2lvbikgJiYgYXJuLnNwbGl0KCc6JylbM10gIT09IHN0YWNrLnJlZ2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9kaWdvczogbGF5ZXIgJHthcm59IGlzIG5vdCBpbiB0aGUgZnVuY3Rpb24ncyByZWdpb24gJHtzdGFjay5yZWdpb259LiBTdXBwbHkgYSBsYXllciBwdWJsaXNoZWQgaW4gdGhlIGZ1bmN0aW9uJ3MgcmVnaW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHRoaXMuZW52aXJvbm1lbnRGb3IoZm4sIGxhbmd1YWdlLCBsYXllci5sYXllclZlcnNpb25Bcm4sIGNvbGxlY3RvckxheWVyPy5sYXllclZlcnNpb25Bcm4pO1xuICAgIGlmIChyZWNpcGUuYXBwbGljYXRpb25TaWduYWxzKSB7XG4gICAgICBmbi5yb2xlPy5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQ2xvdWRXYXRjaExhbWJkYUFwcGxpY2F0aW9uU2lnbmFsc0V4ZWN1dGlvblJvbGVQb2xpY3knKSk7XG4gICAgICBBbm5vdGF0aW9ucy5vZihmbikuYWRkV2FybmluZ1YyKCdAb2RpZ29zL2F3cy1jZGs6YXBwbGljYXRpb25TaWduYWxzJyxcbiAgICAgICAgJ0VuYWJsZSBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIFNpZ25hbHMgc2VydmljZSBkaXNjb3Zlcnkgb25jZSBpbiB0aGlzIEFXUyBhY2NvdW50IGFuZCByZWdpb24uIElmIHRoZSBMYW1iZGEgcm9sZSBpcyBpbXBvcnRlZCBhcyBpbW11dGFibGUsIGF0dGFjaCBDbG91ZFdhdGNoTGFtYmRhQXBwbGljYXRpb25TaWduYWxzRXhlY3V0aW9uUm9sZVBvbGljeSBzZXBhcmF0ZWx5LiBBcHBsaWNhdGlvbiBTaWduYWxzIGFsc28gc2VuZHMgQVdTIHNlcnZpY2UgdGVsZW1ldHJ5IHRocm91Z2ggdGhlIExhbWJkYSBlbWJlZGRlZCBhZ2VudC4nKTtcbiAgICB9XG4gICAgY29uc3QgcmVzb3VyY2UgPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG4gICAgcmVzb3VyY2UuYWRkUHJvcGVydHlEZWxldGlvbk92ZXJyaWRlKCdFbnZpcm9ubWVudC5WYXJpYWJsZXMuT0RJR09TX01BTkFHRUQnKTtcbiAgICByZXNvdXJjZS5hZGRQcm9wZXJ0eURlbGV0aW9uT3ZlcnJpZGUoJ0Vudmlyb25tZW50LlZhcmlhYmxlcy5PRElHT1NfSUFDJyk7XG4gICAgZm4uYWRkTGF5ZXJzKC4uLmxheWVycyk7XG5cbiAgICAvLyBUaGUgQVJOLCBub3QgdGhlIGNvbnN0cnVjdDogdGhlIG1hcmtlciBoYXMgdG8gbmFtZSB0aGUgZXhhY3QgbGF5ZXIgdmVyc2lvbiB0aGUgZnVuY3Rpb24gY2FycmllcywgYW5kXG4gICAgLy8gaW4gSU5fQUNDT1VOVCBtb2RlIHRoYXQgaXMgYSBuZXN0ZWQtc3RhY2sgb3V0cHV0IHJlZmVyZW5jZSByZXNvbHZlZCBhdCBkZXBsb3kgdGltZS5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW52aXJvbm1lbnQpKSB7XG4gICAgICBmbi5hZGRFbnZpcm9ubWVudChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuaW5zdHJ1bWVudGVkLmFkZChrZXkpO1xuICB9XG5cbiAgLyoqIEluc3RydW1lbnRzIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZSBsaXN0LiAqL1xuICBwdWJsaWMgaW5zdHJ1bWVudEFsbChmdW5jdGlvbnM6IGxhbWJkYS5GdW5jdGlvbltdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgIHRoaXMuaW5zdHJ1bWVudChmbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBhcHBsaWVkIHRvIG9uZSBmdW5jdGlvbi5cbiAgICpcbiAgICogTWlycm9ycyBgYXBwbHlIYW5kbGVyRW52YCAvIGBhcHBseVdlYlNlcnZlckVudmAgaW4gdGhlIGNvbm5lY3RvciwgaW5jbHVkaW5nIHdoYXQgaXMgZGVsaWJlcmF0ZWx5IE5PVFxuICAgKiBzZXQ6IGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIHN0YXlzIHVuc2V0IHNvIHRoZSBTREsga2VlcHMgZXhwb3J0aW5nIHRvIHRoZSBpbi1MYW1iZGEgY29sbGVjdG9yXG4gICAqIG9uIGxvY2FsaG9zdCByYXRoZXIgdGhhbiBibG9ja2luZyB0aGUgaW52b2NhdGlvbiBvbiB0aGUgcmVtb3RlIGRlc3RpbmF0aW9uLCBhbmQgZXZlcnkgc2lnbmFsIGV4cG9ydGVyIGlzIHNlbGVjdGVkIGV4cGxpY2l0bHkuXG4gICAqL1xuICBwcml2YXRlIGVudmlyb25tZW50Rm9yKGZuOiBsYW1iZGEuRnVuY3Rpb24sIGxhbmd1YWdlOiBzdHJpbmcsIGxheWVyQXJuOiBzdHJpbmcsIGNvbGxlY3RvckxheWVyQXJuPzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgeyBkZXN0aW5hdGlvbiwgbW9kZSwgZGVidWcsIHNlcnZpY2VOYW1lLCBqYXZhSGFuZGxlckRpc3RybywgZGlzdHJvLCBleGlzdGluZ0xvYWRlclZhbHVlIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3Qgd2ViU2VydmVyID0gbW9kZSA9PT0gT2RpZ29zSW5zdHJ1bWVudGF0aW9uTW9kZS5XRUJfU0VSVkVSO1xuXG4gICAgY29uc3QgcmVjaXBlID0gZGlzdHJpYnV0aW9uUmVjaXBlKGxhbmd1YWdlLCBkaXN0cm8sIGZuLnJ1bnRpbWUubmFtZSk7XG4gICAgY29uc3Qgc2lnbmFscyA9IHJlc29sdmVkU2lnbmFscyhkZXN0aW5hdGlvbik7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG4gICAgY29uc3QgY3VycmVudCA9IFN0YWNrLm9mKGZuKS5yZXNvbHZlKHJlc291cmNlLmVudmlyb25tZW50KSBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb24uRW52aXJvbm1lbnRQcm9wZXJ0eSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB3cmFwcGVyVmFsdWUgPSAoY3VycmVudD8udmFyaWFibGVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQpPy5BV1NfTEFNQkRBX0VYRUNfV1JBUFBFUjtcbiAgICBjb25zdCBvcmlnaW5hbFdyYXBwZXIgPSB3cmFwcGVyVmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogVG9rZW4uYXNTdHJpbmcod3JhcHBlclZhbHVlKTtcbiAgICBpZiAod2ViU2VydmVyICYmIG9yaWdpbmFsV3JhcHBlciA9PT0gJy9vcHQvb2RpZ29zLXdlYnNlcnZlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2RpZ29zOiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgdXNlcyB0aGUgT2RpZ29zIHdlYi1zZXJ2ZXIgd3JhcHBlci4gUmV1c2UgaXRzIG9yaWdpbmFsIGluc3RydW1lbnRhdGlvbiBjb25zdHJ1Y3QuJyk7XG4gICAgfVxuICAgIGNvbnN0IGV4ZWNXcmFwcGVyID0gd2ViU2VydmVyID8gJy9vcHQvb2RpZ29zLXdlYnNlcnZlcicgOiBkaXN0cmlidXRpb25XcmFwcGVyKGxhbmd1YWdlLCBkaXN0cm8sIGphdmFIYW5kbGVyRGlzdHJvLCBmYWxzZSk7XG4gICAgY29uc3QgZnVuY3Rpb25Mb2dzID0gc2lnbmFscy5sb2dzICYmICF3ZWJTZXJ2ZXIgJiYgKGxhbmd1YWdlID09PSAncnVieScgfHwgKGxhbmd1YWdlID09PSAnamF2YScgJiZcbiAgICAgIFsnL29wdC9vdGVsLWhhbmRsZXInLCAnL29wdC9vdGVsLXByb3h5LWhhbmRsZXInLCAnL29wdC9vdGVsLXNxcy1oYW5kbGVyJywgJy9vcHQvb3RlbC1zdHJlYW0taGFuZGxlciddLmluY2x1ZGVzKGV4ZWNXcmFwcGVyKSkpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIHZlcnNpb246IDIsXG4gICAgICBzZXJ2aWNlOiBzZXJ2aWNlTmFtZSA/PyBkZWZhdWx0U2VydmljZU5hbWUoZm4pLFxuICAgICAgc2lnbmFsczogWyd0cmFjZXMnLCAnbWV0cmljcycsICdsb2dzJ10uZmlsdGVyKHNpZ25hbCA9PiBzaWduYWxzW3NpZ25hbCBhcyBrZXlvZiB0eXBlb2Ygc2lnbmFsc10pLFxuICAgICAgZW5kcG9pbnQ6IGRlc3RpbmF0aW9uLmVuZHBvaW50ID8/IGRlc3RpbmF0aW9uLmh0dHBFbmRwb2ludCxcbiAgICAgIC4uLihkZXN0aW5hdGlvbi5odHRwRW5kcG9pbnQgPyB7IGh0dHA6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihkZXN0aW5hdGlvbi5lbmRwb2ludCAmJiBkZXN0aW5hdGlvbi5pbnNlY3VyZSA/IHsgaW5zZWN1cmU6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihkZXN0aW5hdGlvbi5oZWFkZXJzICYmIE9iamVjdC5rZXlzKGRlc3RpbmF0aW9uLmhlYWRlcnMpLmxlbmd0aCA/IHsgaGVhZGVyczogZGVzdGluYXRpb24uaGVhZGVycyB9IDoge30pLFxuICAgICAgLi4uKHJlY2lwZS5hcHBsaWNhdGlvblNpZ25hbHMgPyB7IGFwcGxpY2F0aW9uU2lnbmFsczogdHJ1ZSB9IDoge30pLFxuICAgICAgLi4uKGZ1bmN0aW9uTG9ncyA/IHsgZnVuY3Rpb25Mb2dzOiB0cnVlIH0gOiB7fSksXG4gICAgICAuLi4oZGVidWcgJiYgIXdlYlNlcnZlciA/IHsgZGVidWc6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLih3ZWJTZXJ2ZXIgPyB7IHdlYldyYXBwZXI6IG9yaWdpbmFsV3JhcHBlciB9IDoge30pLFxuICAgIH07XG4gICAgY29uc3QgZW52OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgW0VOVl9FWEVDX1dSQVBQRVJdOiBleGVjV3JhcHBlcixcbiAgICAgIFtFTlZfTEFNQkRBX0NPTkZJR106IFN0YWNrLm9mKGZuKS50b0pzb25TdHJpbmcoY29uZmlnKSxcbiAgICB9O1xuICAgIFRhZ3Mub2YoZm4pLmFkZCgnb2RpZ29zOmlhYycsICd2MScpO1xuICAgIFRhZ3Mub2YoZm4pLmFkZCgnb2RpZ29zOnNkay1sYXllcicsIGxheWVyQXJuKTtcbiAgICBpZiAoY29sbGVjdG9yTGF5ZXJBcm4pIFRhZ3Mub2YoZm4pLmFkZCgnb2RpZ29zOmNvbGxlY3Rvci1sYXllcicsIGNvbGxlY3RvckxheWVyQXJuKTtcbiAgICAvLyBFeHBsaWNpdCBjdXN0b21lciBsb2FkZXIgb3B0aW9ucyByZW1haW4gb3JkaW5hcnkgY3VzdG9tZXIgZW52aXJvbm1lbnQgdmFsdWVzLlxuICAgIGlmICh3ZWJTZXJ2ZXIgJiYgZXhpc3RpbmdMb2FkZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsb2FkZXJLZXkgPSB7IGphdmE6ICdKQVZBX1RPT0xfT1BUSU9OUycsIG5vZGVqczogJ05PREVfT1BUSU9OUycsIHB5dGhvbjogJ1BZVEhPTlBBVEgnIH1bbGFuZ3VhZ2VdO1xuICAgICAgaWYgKGxvYWRlcktleSkgZW52W2xvYWRlcktleV0gPSBleGlzdGluZ0xvYWRlclZhbHVlO1xuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT09ICdydWJ5JyAmJiBzaWduYWxzLm1ldHJpY3MpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKGZuKS5hZGRXYXJuaW5nVjIoJ0BvZGlnb3MvYXdzLWNkazpydWJ5U2lnbmFsc1Vuc3VwcG9ydGVkJyxcbiAgICAgICAgJ1RoZSBidW5kbGVkIFJ1YnkgTGFtYmRhIFNESyBjYW5ub3QgZ2VuZXJhdGUgT1RMUCBtZXRyaWNzLiBGdW5jdGlvbiBzdGRvdXQvc3RkZXJyIGxvZ3MgYXJlIGNvbGxlY3RlZCBieSB0aGUgTGFtYmRhIGNvbGxlY3RvciB3aGVuIGxvZ3MgYXJlIHNlbGVjdGVkLicpO1xuICAgIH1cbiAgICBpZiAoZGVzdGluYXRpb24ucHJvZmlsZXMpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKGZuKS5hZGRXYXJuaW5nVjIoJ0BvZGlnb3MvYXdzLWNkazpwcm9maWxlc1Vuc3VwcG9ydGVkJyxcbiAgICAgICAgJ1RoZSBidW5kbGVkIExhbWJkYSBsYW5ndWFnZSBhZ2VudHMgZG8gbm90IGdlbmVyYXRlIE9UTFAgcHJvZmlsZXMuIE90aGVyIHNlbGVjdGVkIHNpZ25hbHMgcmVtYWluIGVuYWJsZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBlbnY7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9kaWdvc0luc3RydW1lbnRhdGlvbkFzcGVjdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0UHJvcHMgZXh0ZW5kcyBPZGlnb3NJbnN0cnVtZW50YXRpb25PcHRpb25zIHt9XG5cbi8qKlxuICogQXBwbGllcyBPZGlnb3MgaW5zdHJ1bWVudGF0aW9uIHRvIGV2ZXJ5IGBsYW1iZGEuRnVuY3Rpb25gIGluIGEgc2NvcGUuXG4gKlxuICogYGBgdHNcbiAqIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0KHN0YWNrLCB7XG4gKiAgIGRlc3RpbmF0aW9uOiB7IGVuZHBvaW50OiAnb3RscC5leGFtcGxlLmNvbTo0MzE3JyB9LFxuICogfSkpO1xuICogYGBgXG4gKlxuICogYHNraXBVbnN1cHBvcnRlZFJ1bnRpbWVzYCBkZWZhdWx0cyB0byBgdHJ1ZWAgaGVyZSwgdW5saWtlIHRoZSBjb25zdHJ1Y3Q6IGFuIGFzcGVjdCB2aXNpdHMgZXZlcnkgZnVuY3Rpb25cbiAqIGluIHRoZSBzY29wZSwgaW5jbHVkaW5nIG9uZXMgd2hvc2UgcnVudGltZSBoYXMgbm8gT3BlblRlbGVtZXRyeSBsYXllciwgYW5kIGZhaWxpbmcgdGhlIHdob2xlIHN5bnRoXG4gKiBiZWNhdXNlIGEgc3RhY2sgaGFwcGVucyB0byBjb250YWluIG9uZSBHbyBmdW5jdGlvbiBpcyBub3QgdXNlZnVsLiBFYWNoIHNraXAgaXMgcmVwb3J0ZWQgYXMgYSBzeW50aFxuICogd2FybmluZywgc28gaXQgaXMgdmlzaWJsZSByYXRoZXIgdGhhbiBzaWxlbnQuXG4gKlxuICogVGhlIGFzcGVjdCBpbnN0cnVtZW50cyB3aGF0IGV4aXN0cyBpbiB0aGUgdHJlZSB3aGVuIGl0IHJ1bnMuIEEgZnVuY3Rpb24gYWRkZWQgYnkgYSBsYXRlciBhc3BlY3QgaXMgbm90XG4gKiB2aXNpdGVkOyB1c2UgdGhlIGNvbnN0cnVjdCBkaXJlY3RseSBmb3IgdGhvc2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBPZGlnb3NJbnN0cnVtZW50YXRpb25Bc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnN0cnVtZW50YXRpb246IE9kaWdvc0xhbWJkYUluc3RydW1lbnRhdGlvbjtcblxuICAvKipcbiAgICogQHBhcmFtIHNjb3BlIHdoZXJlIHRoZSBzaGFyZWQgbGF5ZXIgY29uc3RydWN0cyBhcmUgY3JlYXRlZC4gVXN1YWxseSB0aGUgc2FtZSBzY29wZSB0aGUgYXNwZWN0IGlzXG4gICAqIGFwcGxpZWQgdG8uIEl0IGlzIGEgc2VwYXJhdGUgYXJndW1lbnQgZnJvbSB0aGUgdmlzaXRlZCBub2RlcyBiZWNhdXNlIHRoZSBsYXllciAoYW5kLCBpbiBgSU5fQUNDT1VOVGBcbiAgICogbW9kZSwgdGhlIG5lc3RlZCBTQVIgYXBwbGljYXRpb24pIGlzIGNyZWF0ZWQgb25jZSBhbmQgc2hhcmVkIGJ5IGV2ZXJ5IGZ1bmN0aW9uIHRoZSBhc3BlY3QgdmlzaXRzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IE9kaWdvc0luc3RydW1lbnRhdGlvbkFzcGVjdFByb3BzKSB7XG4gICAgdGhpcy5pbnN0cnVtZW50YXRpb24gPSBuZXcgT2RpZ29zTGFtYmRhSW5zdHJ1bWVudGF0aW9uKHNjb3BlLCAnT2RpZ29zSW5zdHJ1bWVudGF0aW9uQXNwZWN0Jywge1xuICAgICAgc2tpcFVuc3VwcG9ydGVkUnVudGltZXM6IHRydWUsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBsYW1iZGEuRnVuY3Rpb24pIHtcbiAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uLmluc3RydW1lbnQobm9kZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/lib/layer-resolver.js
CHANGED
|
@@ -48,7 +48,7 @@ class OdigosLayerResolver {
|
|
|
48
48
|
if (aws_cdk_lib_1.Token.isUnresolved(region)) {
|
|
49
49
|
throw new Error('Odigos: OdigosLayerSource.ODIGOS_PUBLIC needs a concrete region to look up the layer ARN, but ' +
|
|
50
50
|
'this stack is environment-agnostic. Set `env: { region: "..." }` on the stack, or use ' +
|
|
51
|
-
'OdigosLayerSource.IN_ACCOUNT, which resolves the layer at deploy time
|
|
51
|
+
'OdigosLayerSource.IN_ACCOUNT, which resolves the layer at deploy time in supported commercial AWS regions.');
|
|
52
52
|
}
|
|
53
53
|
const arn = layers_1.LAYER_ARNS[`${region}/${language}/${architecture}`];
|
|
54
54
|
if (!arn) {
|
|
@@ -71,6 +71,10 @@ class OdigosLayerResolver {
|
|
|
71
71
|
* `cdk deploy` of unchanged code pick up a different layer.
|
|
72
72
|
*/
|
|
73
73
|
fromSar(language, architecture) {
|
|
74
|
+
const region = aws_cdk_lib_1.Stack.of(this.scope).region;
|
|
75
|
+
if (!aws_cdk_lib_1.Token.isUnresolved(region) && /^(us-gov-|us-iso|cn-)/.test(region)) {
|
|
76
|
+
throw new Error('Odigos: the public SAR applications are available in the commercial AWS partition only. Supply a compatible layerVersion from this partition instead.');
|
|
77
|
+
}
|
|
74
78
|
const applicationId = layers_1.SAR_APPLICATIONS[`${language}/${architecture}`];
|
|
75
79
|
if (!applicationId) {
|
|
76
80
|
throw new Error(`Odigos: no SAR application published for ${language}/${architecture} ` +
|
|
@@ -115,4 +119,4 @@ function odigosLayerName(language, architecture) {
|
|
|
115
119
|
function functionScopeId(fn) {
|
|
116
120
|
return aws_cdk_lib_1.Names.nodeUniqueId(fn.node);
|
|
117
121
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGF5ZXItcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBdUlBLDBDQUVDO0FBR0QsMENBRUM7QUE5SUQsNkNBQWtEO0FBQ2xELGlEQUFpRDtBQUNqRCwyQ0FBMkM7QUFFM0MsK0NBQXdHO0FBQ3hHLHVDQUF5QztBQUN6QyxtQ0FBNEM7QUFFNUM7Ozs7R0FJRztBQUNILE1BQWEsbUJBQW1CO0lBRzlCLFlBQ21CLEtBQWdCLEVBQ2hCLE1BQXlCO1FBRHpCLFVBQUssR0FBTCxLQUFLLENBQVc7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFKM0IsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBSzlELENBQUM7SUFFRyxPQUFPLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtRQUNuRCxNQUFNLEdBQUcsR0FBRyxHQUFHLFFBQVEsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxNQUFNLEtBQUsseUJBQWlCLENBQUMsVUFBVTtZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssYUFBYSxDQUFDLFFBQWdCLEVBQUUsWUFB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LEVBQUUsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRCxzR0FBc0c7SUFDOUYsZUFBZSxDQUFDLFFBQWdCLEVBQUUsWUFBb0I7UUFDNUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sR0FBRyxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0NBQ0Y7QUEvR0Qsa0RBK0dDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixlQUFlLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtJQUNwRSxPQUFPLElBQUEsc0JBQVksRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELDRGQUE0RjtBQUM1RixTQUFnQixlQUFlLENBQUMsRUFBYTtJQUMzQyxPQUFPLG1CQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmFtZXMsIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIHNhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2FtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTEFZRVJfQVJOUywgT0RJR09TX1ZFUlNJT04sIFNBUl9BUFBMSUNBVElPTlMsIFNBUl9TRU1BTlRJQ19WRVJTSU9OIH0gZnJvbSAnLi9nZW5lcmF0ZWQvbGF5ZXJzJztcbmltcG9ydCB7IGxheWVyTmFtZUZvciB9IGZyb20gJy4vcnVudGltZSc7XG5pbXBvcnQgeyBPZGlnb3NMYXllclNvdXJjZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBPZGlnb3MgbGF5ZXIgZm9yIGEgKGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpIHRvIGFuIGBJTGF5ZXJWZXJzaW9uYCwgYW5kIGNhY2hlcyBpdCBzbyBOXG4gKiBmdW5jdGlvbnMgb2YgdGhlIHNhbWUgbGFuZ3VhZ2UgYW5kIGFyY2hpdGVjdHVyZSBzaGFyZSBvbmUgbGF5ZXIgY29uc3RydWN0IOKAlCBhbmQsIGluIGBJTl9BQ0NPVU5UYCBtb2RlLFxuICogb25lIG5lc3RlZCBTQVIgYXBwbGljYXRpb24gcmF0aGVyIHRoYW4gTiBjb3BpZXMgb2YgdGhlIHNhbWUgbGF5ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBPZGlnb3NMYXllclJlc29sdmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBsYW1iZGEuSUxheWVyVmVyc2lvbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2U6IE9kaWdvc0xheWVyU291cmNlLFxuICApIHt9XG5cbiAgcHVibGljIHJlc29sdmUobGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBsYW1iZGEuSUxheWVyVmVyc2lvbiB7XG4gICAgY29uc3Qga2V5ID0gYCR7bGFuZ3VhZ2V9LyR7YXJjaGl0ZWN0dXJlfWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCBsYXllciA9XG4gICAgICB0aGlzLnNvdXJjZSA9PT0gT2RpZ29zTGF5ZXJTb3VyY2UuSU5fQUNDT1VOVFxuICAgICAgICA/IHRoaXMuZnJvbVNhcihsYW5ndWFnZSwgYXJjaGl0ZWN0dXJlKVxuICAgICAgICA6IHRoaXMuZnJvbVB1YmxpY0FybihsYW5ndWFnZSwgYXJjaGl0ZWN0dXJlKTtcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIGxheWVyKTtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHB1YmxpYyBsYXllciB2ZXJzaW9uIE9kaWdvcyBwdWJsaXNoZWQgaW4gdGhpcyBzdGFjaydzIHJlZ2lvbiwgcmVzb2x2ZWQgZnJvbSB0aGUgdGFibGUgYmFrZWQgaW50b1xuICAgKiB0aGlzIHBhY2thZ2UgYXQgYnVpbGQgdGltZS5cbiAgICpcbiAgICogQSByZWdpb24gd2l0aCBubyBlbnRyeSB0aHJvd3MgcmF0aGVyIHRoYW4gZmFsbGluZyBiYWNrIHRvIGFub3RoZXIgcmVnaW9uJ3MgQVJOLCB3aGljaCB3b3VsZCBub3RcbiAgICogcmVzb2x2ZSwgb3IgdG8gbm8gbGF5ZXIsIHdoaWNoIHdvdWxkIGxlYXZlIHRoZSBmdW5jdGlvbiByZXBvcnRpbmcgaGVhbHRoeSBhbmQgZXhwb3J0aW5nIG5vdGhpbmcuXG4gICAqL1xuICBwcml2YXRlIGZyb21QdWJsaWNBcm4obGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBsYW1iZGEuSUxheWVyVmVyc2lvbiB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzLnNjb3BlKTtcbiAgICBjb25zdCByZWdpb24gPSBzdGFjay5yZWdpb247XG5cbiAgICAvLyBBbiBlbnZpcm9ubWVudC1hZ25vc3RpYyBzdGFjayBoYXMgYSB0b2tlbiBmb3IgaXRzIHJlZ2lvbiwgc28gdGhlcmUgaXMgbm8gdGFibGUgbG9va3VwIHRvIGRvLiBUaGlzXG4gICAgLy8gaXMgd29ydGggY2F0Y2hpbmcgZXhwbGljaXRseTogdGhlIGFsdGVybmF0aXZlIG1lc3NhZ2Ugd291bGQgYmUgYWJvdXQgYSByZWdpb24gbGl0ZXJhbGx5IG5hbWVkXG4gICAgLy8gXCIke1Rva2VuW0FXUy5SZWdpb24uNl19XCIsIHdoaWNoIHNlbmRzIHBlb3BsZSBsb29raW5nIGluIHRoZSB3cm9uZyBwbGFjZSBlbnRpcmVseS5cbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHJlZ2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ09kaWdvczogT2RpZ29zTGF5ZXJTb3VyY2UuT0RJR09TX1BVQkxJQyBuZWVkcyBhIGNvbmNyZXRlIHJlZ2lvbiB0byBsb29rIHVwIHRoZSBsYXllciBBUk4sIGJ1dCAnICtcbiAgICAgICAgICAndGhpcyBzdGFjayBpcyBlbnZpcm9ubWVudC1hZ25vc3RpYy4gU2V0IGBlbnY6IHsgcmVnaW9uOiBcIi4uLlwiIH1gIG9uIHRoZSBzdGFjaywgb3IgdXNlICcgK1xuICAgICAgICAgICdPZGlnb3NMYXllclNvdXJjZS5JTl9BQ0NPVU5ULCB3aGljaCByZXNvbHZlcyB0aGUgbGF5ZXIgYXQgZGVwbG95IHRpbWUgYW5kIHdvcmtzIGFueXdoZXJlLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFybiA9IExBWUVSX0FSTlNbYCR7cmVnaW9ufS8ke2xhbmd1YWdlfS8ke2FyY2hpdGVjdHVyZX1gXTtcbiAgICBpZiAoIWFybikge1xuICAgICAgY29uc3Qga25vd24gPSBuZXcgU2V0KE9iamVjdC5rZXlzKExBWUVSX0FSTlMpLm1hcCgoaykgPT4gay5zcGxpdCgnLycpWzBdKSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBPZGlnb3M6IG5vIHB1YmxpYyAke2xhbmd1YWdlfS8ke2FyY2hpdGVjdHVyZX0gbGF5ZXIgcHVibGlzaGVkIGluICR7cmVnaW9ufSBgICtcbiAgICAgICAgICBgKEBvZGlnb3MvYXdzLWNkayAke09ESUdPU19WRVJTSU9OIHx8ICd1bnJlbGVhc2VkJ30pLiBgICtcbiAgICAgICAgICAoa25vd24uc2l6ZSA9PT0gMFxuICAgICAgICAgICAgPyAnVGhpcyBidWlsZCBvZiB0aGUgcGFja2FnZSBoYXMgYW4gZW1wdHkgbGF5ZXIgdGFibGUg4oCUIGl0IHdhcyBidWlsdCBiZWZvcmUgdGhlIGZpcnN0IHJlbGVhc2UuJ1xuICAgICAgICAgICAgOiBgUHVibGlzaGVkIHJlZ2lvbnM6ICR7Wy4uLmtub3duXS5zb3J0KCkuam9pbignLCAnKX0uYCkgK1xuICAgICAgICAgICcgVXNlIE9kaWdvc0xheWVyU291cmNlLklOX0FDQ09VTlQgdG8gZGVwbG95IHRoZSBsYXllciBpbnRvIHlvdXIgb3duIGFjY291bnQgaW5zdGVhZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFtYmRhLkxheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxuICAgICAgdGhpcy5zY29wZSxcbiAgICAgIGBPZGlnb3NMYXllciR7dGhpcy5jb25zdHJ1Y3RTdWZmaXgobGFuZ3VhZ2UsIGFyY2hpdGVjdHVyZSl9YCxcbiAgICAgIGFybixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGxveXMgdGhlIE9kaWdvcyBTQVIgYXBwbGljYXRpb24gaW50byB0aGlzIGFjY291bnQgYXMgYSBuZXN0ZWQgc3RhY2sgYW5kIGF0dGFjaGVzIHRoZSBsYXllciBpdFxuICAgKiBjcmVhdGVzLlxuICAgKlxuICAgKiBQaW5uaW5nIGBzZW1hbnRpY1ZlcnNpb25gIGlzIHdoYXQgbWFrZXMgdGhpcyByZXByb2R1Y2libGU6IGEgU0FSIGFwcGxpY2F0aW9uIHZlcnNpb24gaXMgaW1tdXRhYmxlLCBzb1xuICAgKiB0aGUgcGlubmVkIHZlcnNpb24gcmVzb2x2ZXMgdG8gdGhlIHNhbWUgbGF5ZXIgYnl0ZXMgZm9yZXZlci4gTGVhdmluZyBpdCB1bnBpbm5lZCB3b3VsZCBsZXQgYSBsYXRlclxuICAgKiBgY2RrIGRlcGxveWAgb2YgdW5jaGFuZ2VkIGNvZGUgcGljayB1cCBhIGRpZmZlcmVudCBsYXllci5cbiAgICovXG4gIHByaXZhdGUgZnJvbVNhcihsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IGxhbWJkYS5JTGF5ZXJWZXJzaW9uIHtcbiAgICBjb25zdCBhcHBsaWNhdGlvbklkID0gU0FSX0FQUExJQ0FUSU9OU1tgJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9YF07XG4gICAgaWYgKCFhcHBsaWNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBPZGlnb3M6IG5vIFNBUiBhcHBsaWNhdGlvbiBwdWJsaXNoZWQgZm9yICR7bGFuZ3VhZ2V9LyR7YXJjaGl0ZWN0dXJlfSBgICtcbiAgICAgICAgICBgKEBvZGlnb3MvYXdzLWNkayAke09ESUdPU19WRVJTSU9OIHx8ICd1bnJlbGVhc2VkJ30pLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIVNBUl9TRU1BTlRJQ19WRVJTSU9OKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdPZGlnb3M6IHRoaXMgYnVpbGQgb2YgQG9kaWdvcy9hd3MtY2RrIGhhcyBubyBTQVIgc2VtYW50aWMgdmVyc2lvbiBiYWtlZCBpbiwgc28gdGhlIGFwcGxpY2F0aW9uICcgK1xuICAgICAgICAgICdjb3VsZCBvbmx5IGJlIGRlcGxveWVkIHVucGlubmVkLiBVc2UgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENmbkFwcGxpY2F0aW9uIGlzIGEgU0FNIHJlc291cmNlLCBzbyB0aGUgc3RhY2sgbmVlZHMgdGhlIFNlcnZlcmxlc3MgdHJhbnNmb3JtLiBhZGRUcmFuc2Zvcm0gaXNcbiAgICAvLyBpZGVtcG90ZW50LCBzbyBkZWNsYXJpbmcgaXQgaGVyZSBpcyBzYWZlIHdoZXRoZXIgb3Igbm90IHRoZSBhcHAgYWxyZWFkeSB1c2VzIFNBTSBlbHNld2hlcmUuXG4gICAgU3RhY2sub2YodGhpcy5zY29wZSkuYWRkVHJhbnNmb3JtKCdBV1M6OlNlcnZlcmxlc3MtMjAxNi0xMC0zMScpO1xuXG4gICAgY29uc3Qgc3VmZml4ID0gdGhpcy5jb25zdHJ1Y3RTdWZmaXgobGFuZ3VhZ2UsIGFyY2hpdGVjdHVyZSk7XG4gICAgY29uc3QgYXBwID0gbmV3IHNhbS5DZm5BcHBsaWNhdGlvbih0aGlzLnNjb3BlLCBgT2RpZ29zTGF5ZXJBcHAke3N1ZmZpeH1gLCB7XG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICBhcHBsaWNhdGlvbklkLFxuICAgICAgICBzZW1hbnRpY1ZlcnNpb246IFNBUl9TRU1BTlRJQ19WRVJTSU9OLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBsYW1iZGEuTGF5ZXJWZXJzaW9uLmZyb21MYXllclZlcnNpb25Bcm4oXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgYE9kaWdvc0xheWVyJHtzdWZmaXh9YCxcbiAgICAgIGFwcC5nZXRBdHQoJ091dHB1dHMuTGF5ZXJWZXJzaW9uQXJuJykudG9TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgLyoqIGBQeXRob25fWDg2NjRgIOKAlCBhIGNvbnN0cnVjdC1pZC1zYWZlIHN1ZmZpeCB0aGF0IGtlZXBzIGlkcyBzdGFibGUgYW5kIHJlYWRhYmxlIGluIHRoZSB0ZW1wbGF0ZS4gKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RTdWZmaXgobGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRpdGxlZCA9IGxhbmd1YWdlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbGFuZ3VhZ2Uuc2xpY2UoMSk7XG4gICAgcmV0dXJuIGAke3RpdGxlZH0ke2FyY2hpdGVjdHVyZS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgJycpfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgbGF5ZXIgbmFtZSB0aGlzIHBhY2thZ2UgYXR0YWNoZXMsIGV4cG9zZWQgc28gYSBzdGFjayBjYW4gYXNzZXJ0IG9uIGl0IG9yIGJ1aWxkIGFuIGFsbG93bGlzdC5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgaWRlbnRpY2FsIHRvIHRoZSBuYW1lIHRoZSBjb25uZWN0b3IgcHVibGlzaGVzIGludG8gYW4gYWNjb3VudFxuICogKGBzdG9yZS5PZGlnb3NMYXllck5hbWVQcmVmaXhgICsgbGFuZ3VhZ2UgKyBcIi1cIiArIGFyY2hpdGVjdHVyZSkuIFRoYXQgaXMgd2hhdCBsZXRzIGEgZnVuY3Rpb25cbiAqIGluc3RydW1lbnRlZCBoZXJlIGFuZCBsYXRlciBlbmFibGVkIGFzIGEgY29ubmVjdG9yIHNvdXJjZSBjb252ZXJnZTogdGhlIGNvbm5lY3RvciBzZWVzIHRoZSBzYW1lIGxheWVyXG4gKiBOQU1FLCBzd2FwcyBpdHMgb3duIHZlcnNpb24gaW4gcmF0aGVyIHRoYW4gYXR0YWNoaW5nIGEgc2Vjb25kIE9wZW5UZWxlbWV0cnkgbGF5ZXIsIGFuZCByZWNvZ25pc2VzIHRoZVxuICogbGF5ZXIgYXMgb25lIGl0IG1heSBtYW5hZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZGlnb3NMYXllck5hbWUobGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbGF5ZXJOYW1lRm9yKGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpO1xufVxuXG4vKiogU3RhYmxlLCBodW1hbi1yZWFkYWJsZSBjb25zdHJ1Y3QgaWQgZnJhZ21lbnQgZm9yIGEgZnVuY3Rpb24uIEV4cG9ydGVkIGZvciB0aGUgYXNwZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uU2NvcGVJZChmbjogQ29uc3RydWN0KTogc3RyaW5nIHtcbiAgcmV0dXJuIE5hbWVzLm5vZGVVbmlxdWVJZChmbi5ub2RlKTtcbn1cbiJdfQ==
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGF5ZXItcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMklBLDBDQUVDO0FBR0QsMENBRUM7QUFsSkQsNkNBQWtEO0FBQ2xELGlEQUFpRDtBQUNqRCwyQ0FBMkM7QUFFM0MsK0NBQXdHO0FBQ3hHLHVDQUF5QztBQUN6QyxtQ0FBNEM7QUFFNUM7Ozs7R0FJRztBQUNILE1BQWEsbUJBQW1CO0lBRzlCLFlBQ21CLEtBQWdCLEVBQ2hCLE1BQXlCO1FBRHpCLFVBQUssR0FBTCxLQUFLLENBQVc7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFKM0IsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBSzlELENBQUM7SUFFRyxPQUFPLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtRQUNuRCxNQUFNLEdBQUcsR0FBRyxHQUFHLFFBQVEsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUNULElBQUksQ0FBQyxNQUFNLEtBQUsseUJBQWlCLENBQUMsVUFBVTtZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssYUFBYSxDQUFDLFFBQWdCLEVBQUUsWUFB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LEVBQUUsaUJBQWlCLE1BQU0sRUFBRSxFQUFFO1lBQ3hFLFFBQVEsRUFBRTtnQkFDUixhQUFhO2dCQUNiLGVBQWUsRUFBRSw2QkFBb0I7YUFDdEM7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQzVDLElBQUksQ0FBQyxLQUFLLEVBQ1YsY0FBYyxNQUFNLEVBQUUsRUFDdEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUVELHNHQUFzRztJQUM5RixlQUFlLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtRQUM1RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsT0FBTyxHQUFHLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQW5IRCxrREFtSEM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxRQUFnQixFQUFFLFlBQW9CO0lBQ3BFLE9BQU8sSUFBQSxzQkFBWSxFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsNEZBQTRGO0FBQzVGLFNBQWdCLGVBQWUsQ0FBQyxFQUFhO0lBQzNDLE9BQU8sbUJBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYW1lcywgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgc2FtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBMQVlFUl9BUk5TLCBPRElHT1NfVkVSU0lPTiwgU0FSX0FQUExJQ0FUSU9OUywgU0FSX1NFTUFOVElDX1ZFUlNJT04gfSBmcm9tICcuL2dlbmVyYXRlZC9sYXllcnMnO1xuaW1wb3J0IHsgbGF5ZXJOYW1lRm9yIH0gZnJvbSAnLi9ydW50aW1lJztcbmltcG9ydCB7IE9kaWdvc0xheWVyU291cmNlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIE9kaWdvcyBsYXllciBmb3IgYSAobGFuZ3VhZ2UsIGFyY2hpdGVjdHVyZSkgdG8gYW4gYElMYXllclZlcnNpb25gLCBhbmQgY2FjaGVzIGl0IHNvIE5cbiAqIGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBsYW5ndWFnZSBhbmQgYXJjaGl0ZWN0dXJlIHNoYXJlIG9uZSBsYXllciBjb25zdHJ1Y3Qg4oCUIGFuZCwgaW4gYElOX0FDQ09VTlRgIG1vZGUsXG4gKiBvbmUgbmVzdGVkIFNBUiBhcHBsaWNhdGlvbiByYXRoZXIgdGhhbiBOIGNvcGllcyBvZiB0aGUgc2FtZSBsYXllci5cbiAqL1xuZXhwb3J0IGNsYXNzIE9kaWdvc0xheWVyUmVzb2x2ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNvdXJjZTogT2RpZ29zTGF5ZXJTb3VyY2UsXG4gICkge31cblxuICBwdWJsaWMgcmVzb2x2ZShsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IGxhbWJkYS5JTGF5ZXJWZXJzaW9uIHtcbiAgICBjb25zdCBrZXkgPSBgJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9YDtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIGNvbnN0IGxheWVyID1cbiAgICAgIHRoaXMuc291cmNlID09PSBPZGlnb3NMYXllclNvdXJjZS5JTl9BQ0NPVU5UXG4gICAgICAgID8gdGhpcy5mcm9tU2FyKGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpXG4gICAgICAgIDogdGhpcy5mcm9tUHVibGljQXJuKGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgbGF5ZXIpO1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHVibGljIGxheWVyIHZlcnNpb24gT2RpZ29zIHB1Ymxpc2hlZCBpbiB0aGlzIHN0YWNrJ3MgcmVnaW9uLCByZXNvbHZlZCBmcm9tIHRoZSB0YWJsZSBiYWtlZCBpbnRvXG4gICAqIHRoaXMgcGFja2FnZSBhdCBidWlsZCB0aW1lLlxuICAgKlxuICAgKiBBIHJlZ2lvbiB3aXRoIG5vIGVudHJ5IHRocm93cyByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2sgdG8gYW5vdGhlciByZWdpb24ncyBBUk4sIHdoaWNoIHdvdWxkIG5vdFxuICAgKiByZXNvbHZlLCBvciB0byBubyBsYXllciwgd2hpY2ggd291bGQgbGVhdmUgdGhlIGZ1bmN0aW9uIHJlcG9ydGluZyBoZWFsdGh5IGFuZCBleHBvcnRpbmcgbm90aGluZy5cbiAgICovXG4gIHByaXZhdGUgZnJvbVB1YmxpY0FybihsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IGxhbWJkYS5JTGF5ZXJWZXJzaW9uIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMuc2NvcGUpO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHN0YWNrLnJlZ2lvbjtcblxuICAgIC8vIEFuIGVudmlyb25tZW50LWFnbm9zdGljIHN0YWNrIGhhcyBhIHRva2VuIGZvciBpdHMgcmVnaW9uLCBzbyB0aGVyZSBpcyBubyB0YWJsZSBsb29rdXAgdG8gZG8uIFRoaXNcbiAgICAvLyBpcyB3b3J0aCBjYXRjaGluZyBleHBsaWNpdGx5OiB0aGUgYWx0ZXJuYXRpdmUgbWVzc2FnZSB3b3VsZCBiZSBhYm91dCBhIHJlZ2lvbiBsaXRlcmFsbHkgbmFtZWRcbiAgICAvLyBcIiR7VG9rZW5bQVdTLlJlZ2lvbi42XX1cIiwgd2hpY2ggc2VuZHMgcGVvcGxlIGxvb2tpbmcgaW4gdGhlIHdyb25nIHBsYWNlIGVudGlyZWx5LlxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnT2RpZ29zOiBPZGlnb3NMYXllclNvdXJjZS5PRElHT1NfUFVCTElDIG5lZWRzIGEgY29uY3JldGUgcmVnaW9uIHRvIGxvb2sgdXAgdGhlIGxheWVyIEFSTiwgYnV0ICcgK1xuICAgICAgICAgICd0aGlzIHN0YWNrIGlzIGVudmlyb25tZW50LWFnbm9zdGljLiBTZXQgYGVudjogeyByZWdpb246IFwiLi4uXCIgfWAgb24gdGhlIHN0YWNrLCBvciB1c2UgJyArXG4gICAgICAgICAgJ09kaWdvc0xheWVyU291cmNlLklOX0FDQ09VTlQsIHdoaWNoIHJlc29sdmVzIHRoZSBsYXllciBhdCBkZXBsb3kgdGltZSBpbiBzdXBwb3J0ZWQgY29tbWVyY2lhbCBBV1MgcmVnaW9ucy4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcm4gPSBMQVlFUl9BUk5TW2Ake3JlZ2lvbn0vJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9YF07XG4gICAgaWYgKCFhcm4pIHtcbiAgICAgIGNvbnN0IGtub3duID0gbmV3IFNldChPYmplY3Qua2V5cyhMQVlFUl9BUk5TKS5tYXAoKGspID0+IGsuc3BsaXQoJy8nKVswXSkpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgT2RpZ29zOiBubyBwdWJsaWMgJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9IGxheWVyIHB1Ymxpc2hlZCBpbiAke3JlZ2lvbn0gYCArXG4gICAgICAgICAgYChAb2RpZ29zL2F3cy1jZGsgJHtPRElHT1NfVkVSU0lPTiB8fCAndW5yZWxlYXNlZCd9KS4gYCArXG4gICAgICAgICAgKGtub3duLnNpemUgPT09IDBcbiAgICAgICAgICAgID8gJ1RoaXMgYnVpbGQgb2YgdGhlIHBhY2thZ2UgaGFzIGFuIGVtcHR5IGxheWVyIHRhYmxlIOKAlCBpdCB3YXMgYnVpbHQgYmVmb3JlIHRoZSBmaXJzdCByZWxlYXNlLidcbiAgICAgICAgICAgIDogYFB1Ymxpc2hlZCByZWdpb25zOiAke1suLi5rbm93bl0uc29ydCgpLmpvaW4oJywgJyl9LmApICtcbiAgICAgICAgICAnIFVzZSBPZGlnb3NMYXllclNvdXJjZS5JTl9BQ0NPVU5UIHRvIGRlcGxveSB0aGUgbGF5ZXIgaW50byB5b3VyIG93biBhY2NvdW50IGluc3RlYWQuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhbWJkYS5MYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybihcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBgT2RpZ29zTGF5ZXIke3RoaXMuY29uc3RydWN0U3VmZml4KGxhbmd1YWdlLCBhcmNoaXRlY3R1cmUpfWAsXG4gICAgICBhcm4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBsb3lzIHRoZSBPZGlnb3MgU0FSIGFwcGxpY2F0aW9uIGludG8gdGhpcyBhY2NvdW50IGFzIGEgbmVzdGVkIHN0YWNrIGFuZCBhdHRhY2hlcyB0aGUgbGF5ZXIgaXRcbiAgICogY3JlYXRlcy5cbiAgICpcbiAgICogUGlubmluZyBgc2VtYW50aWNWZXJzaW9uYCBpcyB3aGF0IG1ha2VzIHRoaXMgcmVwcm9kdWNpYmxlOiBhIFNBUiBhcHBsaWNhdGlvbiB2ZXJzaW9uIGlzIGltbXV0YWJsZSwgc29cbiAgICogdGhlIHBpbm5lZCB2ZXJzaW9uIHJlc29sdmVzIHRvIHRoZSBzYW1lIGxheWVyIGJ5dGVzIGZvcmV2ZXIuIExlYXZpbmcgaXQgdW5waW5uZWQgd291bGQgbGV0IGEgbGF0ZXJcbiAgICogYGNkayBkZXBsb3lgIG9mIHVuY2hhbmdlZCBjb2RlIHBpY2sgdXAgYSBkaWZmZXJlbnQgbGF5ZXIuXG4gICAqL1xuICBwcml2YXRlIGZyb21TYXIobGFuZ3VhZ2U6IHN0cmluZywgYXJjaGl0ZWN0dXJlOiBzdHJpbmcpOiBsYW1iZGEuSUxheWVyVmVyc2lvbiB7XG4gICAgY29uc3QgcmVnaW9uID0gU3RhY2sub2YodGhpcy5zY29wZSkucmVnaW9uO1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHJlZ2lvbikgJiYgL14odXMtZ292LXx1cy1pc298Y24tKS8udGVzdChyZWdpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09kaWdvczogdGhlIHB1YmxpYyBTQVIgYXBwbGljYXRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIGNvbW1lcmNpYWwgQVdTIHBhcnRpdGlvbiBvbmx5LiBTdXBwbHkgYSBjb21wYXRpYmxlIGxheWVyVmVyc2lvbiBmcm9tIHRoaXMgcGFydGl0aW9uIGluc3RlYWQuJyk7XG4gICAgfVxuICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBTQVJfQVBQTElDQVRJT05TW2Ake2xhbmd1YWdlfS8ke2FyY2hpdGVjdHVyZX1gXTtcbiAgICBpZiAoIWFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE9kaWdvczogbm8gU0FSIGFwcGxpY2F0aW9uIHB1Ymxpc2hlZCBmb3IgJHtsYW5ndWFnZX0vJHthcmNoaXRlY3R1cmV9IGAgK1xuICAgICAgICAgIGAoQG9kaWdvcy9hd3MtY2RrICR7T0RJR09TX1ZFUlNJT04gfHwgJ3VucmVsZWFzZWQnfSkuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghU0FSX1NFTUFOVElDX1ZFUlNJT04pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ09kaWdvczogdGhpcyBidWlsZCBvZiBAb2RpZ29zL2F3cy1jZGsgaGFzIG5vIFNBUiBzZW1hbnRpYyB2ZXJzaW9uIGJha2VkIGluLCBzbyB0aGUgYXBwbGljYXRpb24gJyArXG4gICAgICAgICAgJ2NvdWxkIG9ubHkgYmUgZGVwbG95ZWQgdW5waW5uZWQuIFVzZSBhIHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ2ZuQXBwbGljYXRpb24gaXMgYSBTQU0gcmVzb3VyY2UsIHNvIHRoZSBzdGFjayBuZWVkcyB0aGUgU2VydmVybGVzcyB0cmFuc2Zvcm0uIGFkZFRyYW5zZm9ybSBpc1xuICAgIC8vIGlkZW1wb3RlbnQsIHNvIGRlY2xhcmluZyBpdCBoZXJlIGlzIHNhZmUgd2hldGhlciBvciBub3QgdGhlIGFwcCBhbHJlYWR5IHVzZXMgU0FNIGVsc2V3aGVyZS5cbiAgICBTdGFjay5vZih0aGlzLnNjb3BlKS5hZGRUcmFuc2Zvcm0oJ0FXUzo6U2VydmVybGVzcy0yMDE2LTEwLTMxJyk7XG5cbiAgICBjb25zdCBzdWZmaXggPSB0aGlzLmNvbnN0cnVjdFN1ZmZpeChsYW5ndWFnZSwgYXJjaGl0ZWN0dXJlKTtcbiAgICBjb25zdCBhcHAgPSBuZXcgc2FtLkNmbkFwcGxpY2F0aW9uKHRoaXMuc2NvcGUsIGBPZGlnb3NMYXllckFwcCR7c3VmZml4fWAsIHtcbiAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgICAgIHNlbWFudGljVmVyc2lvbjogU0FSX1NFTUFOVElDX1ZFUlNJT04sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxhbWJkYS5MYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybihcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBgT2RpZ29zTGF5ZXIke3N1ZmZpeH1gLFxuICAgICAgYXBwLmdldEF0dCgnT3V0cHV0cy5MYXllclZlcnNpb25Bcm4nKS50b1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICAvKiogYFB5dGhvbl9YODY2NGAg4oCUIGEgY29uc3RydWN0LWlkLXNhZmUgc3VmZml4IHRoYXQga2VlcHMgaWRzIHN0YWJsZSBhbmQgcmVhZGFibGUgaW4gdGhlIHRlbXBsYXRlLiAqL1xuICBwcml2YXRlIGNvbnN0cnVjdFN1ZmZpeChsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdGl0bGVkID0gbGFuZ3VhZ2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBsYW5ndWFnZS5zbGljZSgxKTtcbiAgICByZXR1cm4gYCR7dGl0bGVkfSR7YXJjaGl0ZWN0dXJlLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCAnJyl9YDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsYXllciBuYW1lIHRoaXMgcGFja2FnZSBhdHRhY2hlcywgZXhwb3NlZCBzbyBhIHN0YWNrIGNhbiBhc3NlcnQgb24gaXQgb3IgYnVpbGQgYW4gYWxsb3dsaXN0LlxuICpcbiAqIERlbGliZXJhdGVseSBpZGVudGljYWwgdG8gdGhlIG5hbWUgdGhlIGNvbm5lY3RvciBwdWJsaXNoZXMgaW50byBhbiBhY2NvdW50XG4gKiAoYHN0b3JlLk9kaWdvc0xheWVyTmFtZVByZWZpeGAgKyBsYW5ndWFnZSArIFwiLVwiICsgYXJjaGl0ZWN0dXJlKS4gVGhhdCBpcyB3aGF0IGxldHMgYSBmdW5jdGlvblxuICogaW5zdHJ1bWVudGVkIGhlcmUgYW5kIGxhdGVyIGVuYWJsZWQgYXMgYSBjb25uZWN0b3Igc291cmNlIGNvbnZlcmdlOiB0aGUgY29ubmVjdG9yIHNlZXMgdGhlIHNhbWUgbGF5ZXJcbiAqIE5BTUUsIHN3YXBzIGl0cyBvd24gdmVyc2lvbiBpbiByYXRoZXIgdGhhbiBhdHRhY2hpbmcgYSBzZWNvbmQgT3BlblRlbGVtZXRyeSBsYXllciwgYW5kIHJlY29nbmlzZXMgdGhlXG4gKiBsYXllciBhcyBvbmUgaXQgbWF5IG1hbmFnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9kaWdvc0xheWVyTmFtZShsYW5ndWFnZTogc3RyaW5nLCBhcmNoaXRlY3R1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsYXllck5hbWVGb3IobGFuZ3VhZ2UsIGFyY2hpdGVjdHVyZSk7XG59XG5cbi8qKiBTdGFibGUsIGh1bWFuLXJlYWRhYmxlIGNvbnN0cnVjdCBpZCBmcmFnbWVudCBmb3IgYSBmdW5jdGlvbi4gRXhwb3J0ZWQgZm9yIHRoZSBhc3BlY3QuICovXG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25TY29wZUlkKGZuOiBDb25zdHJ1Y3QpOiBzdHJpbmcge1xuICByZXR1cm4gTmFtZXMubm9kZVVuaXF1ZUlkKGZuLm5vZGUpO1xufVxuIl19
|