@odigos/aws-cdk 0.0.17 → 0.0.18

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 CHANGED
@@ -3887,7 +3887,7 @@
3887
3887
  "abstract": true,
3888
3888
  "docs": {
3889
3889
  "default": "- no headers",
3890
- "remarks": "These are rendered into `OPENTELEMETRY_COLLECTOR_CONFIG_URI`, which is a plain Lambda environment\nvariable: readable by anyone with `lambda:GetFunctionConfiguration` and visible in the console. For a\nlong-lived credential prefer a destination that authenticates by network position, or terminate at a\ncollector you control.\n\nOn ECS Fargate they are rendered into `OTEL_EXPORTER_OTLP_HEADERS` on the instrumented container,\nwith the same exposure — `ecs:DescribeTaskDefinition` and the console. Note that the connector does\nNOT set that variable when it instruments a Fargate task itself, and does not compare it, so this is\nneither reconciled nor reported as drift either way: it is here because an authenticated destination\nis otherwise unreachable from a task, which has no collector of its own to hold the credential.",
3890
+ "remarks": "These are included in compact `ODIGOS_LAMBDA_CONFIG`, which is a plain Lambda environment\nvariable: readable by anyone with `lambda:GetFunctionConfiguration` and visible in the console. For a\nlong-lived credential prefer a destination that authenticates by network position, or terminate at a\ncollector you control.\n\nOn ECS Fargate they are rendered into `OTEL_EXPORTER_OTLP_HEADERS` on the instrumented container,\nwith the same exposure — `ecs:DescribeTaskDefinition` and the console. Note that the connector does\nNOT set that variable when it instruments a Fargate task itself, and does not compare it, so this is\nneither reconciled nor reported as drift either way: it is here because an authenticated destination\nis otherwise unreachable from a task, which has no collector of its own to hold the credential.",
3891
3891
  "stability": "stable",
3892
3892
  "summary": "Per-request headers, in practice the destination's credential."
3893
3893
  },
@@ -3982,6 +3982,25 @@
3982
3982
  "primitive": "boolean"
3983
3983
  }
3984
3984
  },
3985
+ {
3986
+ "abstract": true,
3987
+ "docs": {
3988
+ "default": "false",
3989
+ "remarks": "Current language bundles do not generate OTLP profiles;\nenabling this emits a warning and does not activate a profiler.",
3990
+ "stability": "stable",
3991
+ "summary": "Retains profiling intent."
3992
+ },
3993
+ "immutable": true,
3994
+ "locationInModule": {
3995
+ "filename": "src/types.ts",
3996
+ "line": 244
3997
+ },
3998
+ "name": "profiles",
3999
+ "optional": true,
4000
+ "type": {
4001
+ "primitive": "boolean"
4002
+ }
4003
+ },
3985
4004
  {
3986
4005
  "abstract": true,
3987
4006
  "docs": {
@@ -4019,7 +4038,7 @@
4019
4038
  },
4020
4039
  "locationInModule": {
4021
4040
  "filename": "src/fargate.ts",
4022
- "line": 277
4041
+ "line": 274
4023
4042
  },
4024
4043
  "parameters": [
4025
4044
  {
@@ -4045,7 +4064,7 @@
4045
4064
  "kind": "class",
4046
4065
  "locationInModule": {
4047
4066
  "filename": "src/fargate.ts",
4048
- "line": 271
4067
+ "line": 268
4049
4068
  },
4050
4069
  "methods": [
4051
4070
  {
@@ -4056,7 +4075,7 @@
4056
4075
  },
4057
4076
  "locationInModule": {
4058
4077
  "filename": "src/fargate.ts",
4059
- "line": 303
4078
+ "line": 300
4060
4079
  },
4061
4080
  "name": "instrument",
4062
4081
  "parameters": [
@@ -4075,7 +4094,7 @@
4075
4094
  },
4076
4095
  "locationInModule": {
4077
4096
  "filename": "src/fargate.ts",
4078
- "line": 341
4097
+ "line": 338
4079
4098
  },
4080
4099
  "name": "instrumentAll",
4081
4100
  "parameters": [
@@ -4107,7 +4126,7 @@
4107
4126
  "kind": "interface",
4108
4127
  "locationInModule": {
4109
4128
  "filename": "src/fargate.ts",
4110
- "line": 91
4129
+ "line": 88
4111
4130
  },
4112
4131
  "name": "OdigosFargateInstrumentationOptions",
4113
4132
  "properties": [
@@ -4121,7 +4140,7 @@
4121
4140
  "immutable": true,
4122
4141
  "locationInModule": {
4123
4142
  "filename": "src/fargate.ts",
4124
- "line": 99
4143
+ "line": 96
4125
4144
  },
4126
4145
  "name": "destination",
4127
4146
  "type": {
@@ -4139,7 +4158,7 @@
4139
4158
  "immutable": true,
4140
4159
  "locationInModule": {
4141
4160
  "filename": "src/fargate.ts",
4142
- "line": 117
4161
+ "line": 114
4143
4162
  },
4144
4163
  "name": "agentsImage",
4145
4164
  "optional": true,
@@ -4158,7 +4177,7 @@
4158
4177
  "immutable": true,
4159
4178
  "locationInModule": {
4160
4179
  "filename": "src/fargate.ts",
4161
- "line": 128
4180
+ "line": 125
4162
4181
  },
4163
4182
  "name": "debug",
4164
4183
  "optional": true,
@@ -4183,7 +4202,7 @@
4183
4202
  "kind": "interface",
4184
4203
  "locationInModule": {
4185
4204
  "filename": "src/fargate.ts",
4186
- "line": 201
4205
+ "line": 198
4187
4206
  },
4188
4207
  "name": "OdigosFargateInstrumentationProps",
4189
4208
  "properties": [
@@ -4198,7 +4217,7 @@
4198
4217
  "immutable": true,
4199
4218
  "locationInModule": {
4200
4219
  "filename": "src/fargate.ts",
4201
- "line": 207
4220
+ "line": 204
4202
4221
  },
4203
4222
  "name": "targets",
4204
4223
  "optional": true,
@@ -4289,7 +4308,7 @@
4289
4308
  "kind": "interface",
4290
4309
  "locationInModule": {
4291
4310
  "filename": "src/fargate.ts",
4292
- "line": 134
4311
+ "line": 131
4293
4312
  },
4294
4313
  "name": "OdigosFargateTarget",
4295
4314
  "properties": [
@@ -4303,7 +4322,7 @@
4303
4322
  "immutable": true,
4304
4323
  "locationInModule": {
4305
4324
  "filename": "src/fargate.ts",
4306
- "line": 139
4325
+ "line": 136
4307
4326
  },
4308
4327
  "name": "container",
4309
4328
  "type": {
@@ -4320,7 +4339,7 @@
4320
4339
  "immutable": true,
4321
4340
  "locationInModule": {
4322
4341
  "filename": "src/fargate.ts",
4323
- "line": 147
4342
+ "line": 144
4324
4343
  },
4325
4344
  "name": "language",
4326
4345
  "type": {
@@ -4338,7 +4357,7 @@
4338
4357
  "immutable": true,
4339
4358
  "locationInModule": {
4340
4359
  "filename": "src/fargate.ts",
4341
- "line": 195
4360
+ "line": 192
4342
4361
  },
4343
4362
  "name": "existingLoaderValue",
4344
4363
  "optional": true,
@@ -4357,7 +4376,7 @@
4357
4376
  "immutable": true,
4358
4377
  "locationInModule": {
4359
4378
  "filename": "src/fargate.ts",
4360
- "line": 182
4379
+ "line": 179
4361
4380
  },
4362
4381
  "name": "runtimeVersion",
4363
4382
  "optional": true,
@@ -4376,7 +4395,7 @@
4376
4395
  "immutable": true,
4377
4396
  "locationInModule": {
4378
4397
  "filename": "src/fargate.ts",
4379
- "line": 172
4398
+ "line": 169
4380
4399
  },
4381
4400
  "name": "service",
4382
4401
  "optional": true,
@@ -4395,7 +4414,7 @@
4395
4414
  "immutable": true,
4396
4415
  "locationInModule": {
4397
4416
  "filename": "src/fargate.ts",
4398
- "line": 161
4417
+ "line": 158
4399
4418
  },
4400
4419
  "name": "serviceName",
4401
4420
  "optional": true,
@@ -4420,7 +4439,7 @@
4420
4439
  },
4421
4440
  "locationInModule": {
4422
4441
  "filename": "src/instrumentation.ts",
4423
- "line": 392
4442
+ "line": 385
4424
4443
  },
4425
4444
  "parameters": [
4426
4445
  {
@@ -4447,7 +4466,7 @@
4447
4466
  "kind": "class",
4448
4467
  "locationInModule": {
4449
4468
  "filename": "src/instrumentation.ts",
4450
- "line": 384
4469
+ "line": 377
4451
4470
  },
4452
4471
  "methods": [
4453
4472
  {
@@ -4457,7 +4476,7 @@
4457
4476
  },
4458
4477
  "locationInModule": {
4459
4478
  "filename": "src/instrumentation.ts",
4460
- "line": 399
4479
+ "line": 392
4461
4480
  },
4462
4481
  "name": "visit",
4463
4482
  "overrides": "aws-cdk-lib.IAspect",
@@ -4488,7 +4507,7 @@
4488
4507
  "kind": "interface",
4489
4508
  "locationInModule": {
4490
4509
  "filename": "src/instrumentation.ts",
4491
- "line": 365
4510
+ "line": 358
4492
4511
  },
4493
4512
  "name": "OdigosInstrumentationAspectProps",
4494
4513
  "symbolId": "src/instrumentation:OdigosInstrumentationAspectProps"
@@ -4538,7 +4557,7 @@
4538
4557
  "kind": "interface",
4539
4558
  "locationInModule": {
4540
4559
  "filename": "src/instrumentation.ts",
4541
- "line": 85
4560
+ "line": 54
4542
4561
  },
4543
4562
  "name": "OdigosInstrumentationOptions",
4544
4563
  "properties": [
@@ -4551,13 +4570,32 @@
4551
4570
  "immutable": true,
4552
4571
  "locationInModule": {
4553
4572
  "filename": "src/instrumentation.ts",
4554
- "line": 89
4573
+ "line": 58
4555
4574
  },
4556
4575
  "name": "destination",
4557
4576
  "type": {
4558
4577
  "fqn": "@odigos/aws-cdk.OdigosDestination"
4559
4578
  }
4560
4579
  },
4580
+ {
4581
+ "abstract": true,
4582
+ "docs": {
4583
+ "default": "- resolved from layerSource for ADOT",
4584
+ "remarks": "Upstream SDK layers already include their collector and do not use this option.",
4585
+ "stability": "stable",
4586
+ "summary": "Architecture-matched collector layer when supplying a custom ADOT SDK layer."
4587
+ },
4588
+ "immutable": true,
4589
+ "locationInModule": {
4590
+ "filename": "src/instrumentation.ts",
4591
+ "line": 132
4592
+ },
4593
+ "name": "collectorLayerVersion",
4594
+ "optional": true,
4595
+ "type": {
4596
+ "fqn": "aws-cdk-lib.aws_lambda.ILayerVersion"
4597
+ }
4598
+ },
4561
4599
  {
4562
4600
  "abstract": true,
4563
4601
  "docs": {
@@ -4569,7 +4607,7 @@
4569
4607
  "immutable": true,
4570
4608
  "locationInModule": {
4571
4609
  "filename": "src/instrumentation.ts",
4572
- "line": 146
4610
+ "line": 115
4573
4611
  },
4574
4612
  "name": "debug",
4575
4613
  "optional": true,
@@ -4587,7 +4625,7 @@
4587
4625
  "immutable": true,
4588
4626
  "locationInModule": {
4589
4627
  "filename": "src/instrumentation.ts",
4590
- "line": 113
4628
+ "line": 82
4591
4629
  },
4592
4630
  "name": "distro",
4593
4631
  "optional": true,
@@ -4606,7 +4644,7 @@
4606
4644
  "immutable": true,
4607
4645
  "locationInModule": {
4608
4646
  "filename": "src/instrumentation.ts",
4609
- "line": 168
4647
+ "line": 144
4610
4648
  },
4611
4649
  "name": "existingLoaderValue",
4612
4650
  "optional": true,
@@ -4624,7 +4662,7 @@
4624
4662
  "immutable": true,
4625
4663
  "locationInModule": {
4626
4664
  "filename": "src/instrumentation.ts",
4627
- "line": 119
4665
+ "line": 88
4628
4666
  },
4629
4667
  "name": "javaHandlerDistro",
4630
4668
  "optional": true,
@@ -4642,7 +4680,7 @@
4642
4680
  "immutable": true,
4643
4681
  "locationInModule": {
4644
4682
  "filename": "src/instrumentation.ts",
4645
- "line": 96
4683
+ "line": 65
4646
4684
  },
4647
4685
  "name": "layerSource",
4648
4686
  "optional": true,
@@ -4661,7 +4699,7 @@
4661
4699
  "immutable": true,
4662
4700
  "locationInModule": {
4663
4701
  "filename": "src/instrumentation.ts",
4664
- "line": 156
4702
+ "line": 125
4665
4703
  },
4666
4704
  "name": "layerVersion",
4667
4705
  "optional": true,
@@ -4680,7 +4718,7 @@
4680
4718
  "immutable": true,
4681
4719
  "locationInModule": {
4682
4720
  "filename": "src/instrumentation.ts",
4683
- "line": 107
4721
+ "line": 76
4684
4722
  },
4685
4723
  "name": "mode",
4686
4724
  "optional": true,
@@ -4699,7 +4737,7 @@
4699
4737
  "immutable": true,
4700
4738
  "locationInModule": {
4701
4739
  "filename": "src/instrumentation.ts",
4702
- "line": 134
4740
+ "line": 103
4703
4741
  },
4704
4742
  "name": "serviceName",
4705
4743
  "optional": true,
@@ -4718,7 +4756,7 @@
4718
4756
  "immutable": true,
4719
4757
  "locationInModule": {
4720
4758
  "filename": "src/instrumentation.ts",
4721
- "line": 179
4759
+ "line": 155
4722
4760
  },
4723
4761
  "name": "skipUnsupportedRuntimes",
4724
4762
  "optional": true,
@@ -4780,7 +4818,7 @@
4780
4818
  "assembly": "@odigos/aws-cdk",
4781
4819
  "base": "constructs.Construct",
4782
4820
  "docs": {
4783
- "remarks": "```ts\nconst odigos = new OdigosLambdaInstrumentation(this, 'Odigos', {\n destination: { endpoint: 'otlp.example.com:4317' },\n functions: [apiFn, workerFn],\n});\nodigos.instrument(anotherFn);\n```\n\nWhat it does to each function: attaches the layer for the function's language and architecture, sets\n`AWS_LAMBDA_EXEC_WRAPPER` so the layer loads the SDK, sets `OTEL_SERVICE_NAME`, and hands the in-Lambda\ncollector its entire configuration inline through `OPENTELEMETRY_COLLECTOR_CONFIG_URI`.\n\nThe function's SDK exports to the collector on localhost, not to your destination. The collector\nforwards after the handler has already returned, so a slow destination costs billed duration rather\nthan caller latency.\n\n## Do not also instrument these functions with the connector\n\nThe Odigos AWS connector instruments live functions by mutating them, and reconciles them back to its\nown desired state on every pass. A function instrumented here and also enabled as a connector source\nends up owned by both: each `cdk deploy` reasserts the CDK's environment, each reconcile reasserts the\nconnector's, and every round trip publishes a new function version.\n\nChoose one per function. This construct writes `ODIGOS_IAC` and never the connector's `ODIGOS_MANAGED`\nownership marker, so an IaC-instrumented function reports as instrumented but is not one the connector\nwill roll back — though it will happily take it over if you enable it as a source.",
4821
+ "remarks": "```ts\nconst odigos = new OdigosLambdaInstrumentation(this, 'Odigos', {\n destination: { endpoint: 'otlp.example.com:4317' },\n functions: [apiFn, workerFn],\n});\nodigos.instrument(anotherFn);\n```\n\nWhat it does to each function: attaches the layer for the function's language and architecture, sets\n`AWS_LAMBDA_EXEC_WRAPPER` and compact `ODIGOS_LAMBDA_CONFIG`. The layer builds the SDK environment and\ncollector pipelines at startup; ownership and exact layer attribution are recorded in resource tags.\n\nThe function's SDK exports to the collector on localhost, not to your destination. The collector\nforwards after the handler has already returned, so a slow destination costs billed duration rather\nthan caller latency.\n\n## Do not also instrument these functions with the connector\n\nThe Odigos AWS connector instruments live functions by mutating them, and reconciles them back to its\nown desired state on every pass. A function instrumented here and also enabled as a connector source\nends up owned by both: each `cdk deploy` reasserts the CDK's environment, each reconcile reasserts the\nconnector's, and every round trip publishes a new function version.\n\nChoose one per function. This construct writes `odigos:iac` resource tags and never the connector's `odigos:managed`\nownership tag, so an IaC-instrumented function reports as instrumented but is not one the connector\nwill roll back — though it will happily take it over if you enable it as a source.",
4784
4822
  "stability": "stable",
4785
4823
  "summary": "Instruments AWS Lambda functions with the Odigos OpenTelemetry layer."
4786
4824
  },
@@ -4791,7 +4829,7 @@
4791
4829
  },
4792
4830
  "locationInModule": {
4793
4831
  "filename": "src/instrumentation.ts",
4794
- "line": 230
4832
+ "line": 205
4795
4833
  },
4796
4834
  "parameters": [
4797
4835
  {
@@ -4817,7 +4855,7 @@
4817
4855
  "kind": "class",
4818
4856
  "locationInModule": {
4819
4857
  "filename": "src/instrumentation.ts",
4820
- "line": 224
4858
+ "line": 200
4821
4859
  },
4822
4860
  "methods": [
4823
4861
  {
@@ -4828,7 +4866,7 @@
4828
4866
  },
4829
4867
  "locationInModule": {
4830
4868
  "filename": "src/instrumentation.ts",
4831
- "line": 270
4869
+ "line": 245
4832
4870
  },
4833
4871
  "name": "instrument",
4834
4872
  "parameters": [
@@ -4847,7 +4885,7 @@
4847
4885
  },
4848
4886
  "locationInModule": {
4849
4887
  "filename": "src/instrumentation.ts",
4850
- "line": 303
4888
+ "line": 293
4851
4889
  },
4852
4890
  "name": "instrumentAll",
4853
4891
  "parameters": [
@@ -4882,7 +4920,7 @@
4882
4920
  "kind": "interface",
4883
4921
  "locationInModule": {
4884
4922
  "filename": "src/instrumentation.ts",
4885
- "line": 185
4923
+ "line": 161
4886
4924
  },
4887
4925
  "name": "OdigosLambdaInstrumentationProps",
4888
4926
  "properties": [
@@ -4897,7 +4935,7 @@
4897
4935
  "immutable": true,
4898
4936
  "locationInModule": {
4899
4937
  "filename": "src/instrumentation.ts",
4900
- "line": 191
4938
+ "line": 167
4901
4939
  },
4902
4940
  "name": "functions",
4903
4941
  "optional": true,
@@ -4947,6 +4985,6 @@
4947
4985
  "symbolId": "src/types:OdigosLayerSource"
4948
4986
  }
4949
4987
  },
4950
- "version": "0.0.17",
4951
- "fingerprint": "W6W0CDchIZ2OIjURy12NC17MTtc/JPOWkRU9H6IS2Dw="
4988
+ "version": "0.0.18",
4989
+ "fingerprint": "5/xKYOxxDpKywcwlm/8NYunPMm8n0M9yKWyb2VKFn3Q="
4952
4990
  }
@@ -1,6 +1,6 @@
1
1
  import { OdigosDestination } from './types';
2
2
  /**
3
- * Renders the in-Lambda collector's complete configuration as an inline
3
+ * Renders the legacy in-Lambda collector configuration for validation and parity tests as an inline
4
4
  * `OPENTELEMETRY_COLLECTOR_CONFIG_URI` value.
5
5
  *
6
6
  * This is a PORT of `renderCollectorConfig` in the connector
@@ -59,8 +59,7 @@ export declare function signalEnabled(value: boolean | undefined, defaultEnabled
59
59
  * almost every destination accepts and what almost everyone instruments for; the other two are a
60
60
  * deliberate choice about the destination, so they are made deliberately.
61
61
  *
62
- * Turning one on is `metrics: true`. Enabling a signal also drops the `OTEL_*_EXPORTER=none` override, so
63
- * the SDK starts producing it again.
62
+ * Turning one on is `metrics: true`. Enabling a signal sets `OTEL_*_EXPORTER=otlp` explicitly.
64
63
  */
65
64
  export declare const SIGNAL_DEFAULTS: {
66
65
  traces: boolean;
@@ -79,18 +78,21 @@ export declare function resolvedSignals(dest: OdigosDestination): {
79
78
  * different endpoint grammars, so this is a genuine branch.
80
79
  */
81
80
  export declare function exporterNameFor(dest: OdigosDestination): string;
82
- /**
83
- * Returns the value a signal's `OTEL_*_EXPORTER` must hold: `none` to suppress a signal the destination
84
- * does not accept, or `undefined` meaning the variable must be ABSENT because the SDK's own default is
85
- * already what we want.
86
- *
87
- * Only the "none" side is written, because `otlp` is already every OpenTelemetry SDK's default for all
88
- * three signals — setting it would restate the default in three variables on every function.
89
- */
90
- export declare function exporterOverrideFor(supported: boolean): string | undefined;
81
+ /** Explicit exporter selectors mirror the base connector policy; SDK defaults vary. */
82
+ export declare function exporterOverrideFor(enabled: boolean): string;
83
+ /** Per-signal transport overrides bypass the destination and must not coexist with it. */
84
+ export declare function signalTransportOverrides(): string[];
85
+ /** Language-specific SDK activation, shared by Lambda and Fargate. */
86
+ export declare function signalActivation(language: string, dest: OdigosDestination): {
87
+ [key: string]: string;
88
+ };
91
89
  /**
92
90
  * Renders the complete collector configuration for one destination.
93
91
  *
94
92
  * @throws if the destination names neither transport, both transports, or no signals at all.
95
93
  */
96
94
  export declare function renderCollectorConfig(dest: OdigosDestination): string;
95
+ /** The Lambda Node layer registers only dns/http/net unless explicitly configured. */
96
+ export declare function lambdaSignalActivation(language: string, dest: OdigosDestination): {
97
+ [key: string]: string;
98
+ };
@@ -5,9 +5,12 @@ exports.signalEnabled = signalEnabled;
5
5
  exports.resolvedSignals = resolvedSignals;
6
6
  exports.exporterNameFor = exporterNameFor;
7
7
  exports.exporterOverrideFor = exporterOverrideFor;
8
+ exports.signalTransportOverrides = signalTransportOverrides;
9
+ exports.signalActivation = signalActivation;
8
10
  exports.renderCollectorConfig = renderCollectorConfig;
11
+ exports.lambdaSignalActivation = lambdaSignalActivation;
9
12
  /**
10
- * Renders the in-Lambda collector's complete configuration as an inline
13
+ * Renders the legacy in-Lambda collector configuration for validation and parity tests as an inline
11
14
  * `OPENTELEMETRY_COLLECTOR_CONFIG_URI` value.
12
15
  *
13
16
  * This is a PORT of `renderCollectorConfig` in the connector
@@ -88,8 +91,7 @@ function signalEnabled(value, defaultEnabled) {
88
91
  * almost every destination accepts and what almost everyone instruments for; the other two are a
89
92
  * deliberate choice about the destination, so they are made deliberately.
90
93
  *
91
- * Turning one on is `metrics: true`. Enabling a signal also drops the `OTEL_*_EXPORTER=none` override, so
92
- * the SDK starts producing it again.
94
+ * Turning one on is `metrics: true`. Enabling a signal sets `OTEL_*_EXPORTER=otlp` explicitly.
93
95
  */
94
96
  exports.SIGNAL_DEFAULTS = { traces: true, metrics: false, logs: false };
95
97
  /** The three signals resolved against their defaults — the single place that pairing is decided. */
@@ -177,16 +179,27 @@ function renderPipelines(dest, exporterName) {
177
179
  }
178
180
  return parts.length === 0 ? '' : `{${parts.join(', ')}}`;
179
181
  }
180
- /**
181
- * Returns the value a signal's `OTEL_*_EXPORTER` must hold: `none` to suppress a signal the destination
182
- * does not accept, or `undefined` meaning the variable must be ABSENT because the SDK's own default is
183
- * already what we want.
184
- *
185
- * Only the "none" side is written, because `otlp` is already every OpenTelemetry SDK's default for all
186
- * three signals — setting it would restate the default in three variables on every function.
187
- */
188
- function exporterOverrideFor(supported) {
189
- return supported ? undefined : exports.EXPORTER_NONE;
182
+ /** Explicit exporter selectors mirror the base connector policy; SDK defaults vary. */
183
+ function exporterOverrideFor(enabled) {
184
+ return enabled ? 'otlp' : exports.EXPORTER_NONE;
185
+ }
186
+ /** Per-signal transport overrides bypass the destination and must not coexist with it. */
187
+ function signalTransportOverrides() {
188
+ return ['TRACES', 'METRICS', 'LOGS'].flatMap((signal) => ['ENDPOINT', 'PROTOCOL', 'HEADERS', 'INSECURE'].map((setting) => `OTEL_EXPORTER_OTLP_${signal}_${setting}`));
189
+ }
190
+ /** Language-specific SDK activation, shared by Lambda and Fargate. */
191
+ function signalActivation(language, dest) {
192
+ const enabled = resolvedSignals(dest);
193
+ const env = {
194
+ OTEL_SDK_DISABLED: 'false',
195
+ [exports.ENV_TRACES_EXPORTER]: exporterOverrideFor(enabled.traces),
196
+ [exports.ENV_METRICS_EXPORTER]: exporterOverrideFor(enabled.metrics),
197
+ [exports.ENV_LOGS_EXPORTER]: exporterOverrideFor(enabled.logs),
198
+ };
199
+ if (language === 'python') {
200
+ env.OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED = String(enabled.logs);
201
+ }
202
+ return env;
190
203
  }
191
204
  /**
192
205
  * Renders the complete collector configuration for one destination.
@@ -230,4 +243,13 @@ function renderCollectorConfig(dest) {
230
243
  pipelines +
231
244
  '}}');
232
245
  }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdG9yLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0b3ItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStFQSxzQ0FFQztBQWlCRCwwQ0FNQztBQW1CRCwwQ0FFQztBQXlFRCxrREFFQztBQU9ELHNEQWlEQztBQTlQRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSDs7Ozs7O0dBTUc7QUFDVSxRQUFBLHdCQUF3QixHQUFHLG9DQUFvQyxDQUFDO0FBRTdFOzs7O0dBSUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sb0JBQW9CLEdBQ3hCLDJGQUEyRjtJQUMzRixnRUFBZ0UsQ0FBQztBQUVuRSxpRUFBaUU7QUFDcEQsUUFBQSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBRXBDLHFGQUFxRjtBQUN4RSxRQUFBLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDO0FBQzdDLFFBQUEsb0JBQW9CLEdBQUcsdUJBQXVCLENBQUM7QUFDL0MsUUFBQSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztBQUV0RDs7Ozs7R0FLRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxLQUEwQixFQUFFLGNBQXVCO0lBQy9FLE9BQU8sS0FBSyxJQUFJLGNBQWMsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDVSxRQUFBLGVBQWUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFFN0Usb0dBQW9HO0FBQ3BHLFNBQWdCLGVBQWUsQ0FBQyxJQUF1QjtJQUNyRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHVCQUFlLENBQUMsTUFBTSxDQUFDO1FBQzFELE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSx1QkFBZSxDQUFDLE9BQU8sQ0FBQztRQUM3RCxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsdUJBQWUsQ0FBQyxJQUFJLENBQUM7S0FDckQsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxVQUFVLENBQUMsQ0FBUztJQUMzQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixlQUFlLENBQUMsSUFBdUI7SUFDckQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUM3QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsYUFBYSxDQUFDLE9BQW1DO0lBQ3hELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNGLE9BQU8sZUFBZSxRQUFRLEdBQUcsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBdUI7SUFDN0MsSUFBSSxHQUFXLENBQUM7SUFDaEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsbUdBQW1HO1FBQ25HLEdBQUcsR0FBRyxxQkFBcUIsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxHQUFHLENBQUM7SUFDckcsQ0FBQztTQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLEdBQUcsR0FBRyx5QkFBeUIsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ2pFLENBQUM7U0FBTSxDQUFDO1FBQ04sNkZBQTZGO1FBQzdGLDJGQUEyRjtRQUMzRixNQUFNLElBQUksS0FBSyxDQUNiLHdGQUF3RjtZQUN0RiwwREFBMEQsQ0FDN0QsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEdBQUcsR0FBRyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUF1QixFQUFFLFlBQW9CO0lBQ3BFLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsTUFBTSxPQUFPLEdBQTZCO1FBQ3hDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDMUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO0tBQ3ZCLENBQUM7SUFDRixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsU0FBUztRQUNYLENBQUM7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUNSLEdBQUcsSUFBSSxvRkFBb0YsWUFBWSxJQUFJLENBQzVHLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFNBQWtCO0lBQ3BELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHFCQUFhLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxJQUF1QjtJQUMzRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0ZBQXNGO1lBQ3BGLHdFQUF3RSxDQUMzRSxDQUFDO0lBQ0osQ0FBQztJQUVELHlHQUF5RztJQUN6Ryx5R0FBeUc7SUFDekcsdUdBQXVHO0lBQ3ZHLG9DQUFvQztJQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLElBQUksS0FBSyxDQUNiLHVDQUF1QyxJQUFJLENBQUMsUUFBUSxnREFBZ0Q7WUFDbEcscUVBQXFFLENBQ3hFLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNqRSxNQUFNLElBQUksS0FBSyxDQUNiLDJDQUEyQyxJQUFJLENBQUMsWUFBWSx3Q0FBd0M7WUFDbEcsdUZBQXVGLENBQzFGLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsSUFBSSxTQUFTLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYixvR0FBb0c7WUFDbEcsb0dBQW9HO1lBQ3BHLG9GQUFvRixDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FDTCx1QkFBdUI7UUFDdkIsaUNBQWlDO1FBQ2pDLHFHQUFxRztRQUNyRyx1RUFBdUU7UUFDdkUsOEVBQThFO1FBQzlFLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLFFBQVE7UUFDUiw4REFBOEQ7UUFDOUQsU0FBUztRQUNULElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9kaWdvc0Rlc3RpbmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgaW4tTGFtYmRhIGNvbGxlY3RvcidzIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gYXMgYW4gaW5saW5lXG4gKiBgT1BFTlRFTEVNRVRSWV9DT0xMRUNUT1JfQ09ORklHX1VSSWAgdmFsdWUuXG4gKlxuICogVGhpcyBpcyBhIFBPUlQgb2YgYHJlbmRlckNvbGxlY3RvckNvbmZpZ2AgaW4gdGhlIGNvbm5lY3RvclxuICogKGNvbm5lY3RvcnMvcHJvdmlkZXJzL2F3cy9wa2cvd29ya2xvYWQvaW5zdHJ1bWVudG9yL2NvbGxlY3Rvcl9jb25maWcuZ28pIGFuZCBpcyBkZWxpYmVyYXRlbHlcbiAqIGJ5dGUtZm9yLWJ5dGUgY29tcGF0aWJsZSB3aXRoIGl0LiBUaGF0IGVxdWl2YWxlbmNlIGlzIG5vdCBjb3NtZXRpYzogYSBmdW5jdGlvbiBpbnN0cnVtZW50ZWQgaGVyZSBhbmRcbiAqIGxhdGVyIGVuYWJsZWQgYXMgYSBjb25uZWN0b3Igc291cmNlIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGNvbm5lY3RvcidzIHJlbmRlcmluZyB0byBkZWNpZGUgd2hldGhlciBpdFxuICogbmVlZHMgY29udmVyZ2luZy4gQSBzdHJheSBzcGFjZSB3b3VsZCBtYWtlIGV2ZXJ5IHJlY29uY2lsZSBzZWUgZHJpZnQgYW5kIGNodXJuIGEgbmV3IGZ1bmN0aW9uIHZlcnNpb25cbiAqIGZvcmV2ZXIuXG4gKlxuICogV0hZIFRIRSBXSE9MRSBET0NVTUVOVCwgUkFUSEVSIFRIQU4gQSBGRVcgVkFSSUFCTEVTLiBUaGUgbGF5ZXIgc2hpcHMgYSBiYWtlZFxuICogL29wdC9jb2xsZWN0b3ItY29uZmlnL2NvbmZpZy55YW1sLCBidXQgdGhhdCBmaWxlIGlzIE9ORSBkb2N1bWVudCBzaGFyZWQgYnkgZXZlcnkgZnVuY3Rpb24sIHNvIGl0IGNhblxuICogb25seSByZWFjaCBhIGRlc3RpbmF0aW9uIHRocm91Z2ggZW52IGluZGlyZWN0aW9uIOKAlCBgJHtlbnY6U09NRVRISU5HfWAuIFRoYXQgbWFkZSB0aHJlZSB0aGluZ3NcbiAqIGltcG9zc2libGUgYXQgb25jZTpcbiAqXG4gKiAgIC0gQVVUSC4gQSBjcmVkZW50aWFsIGlzIGEgaGVhZGVycyBtYXAsIG5vdCBhIHNjYWxhci4gQSBiYWtlZCBmaWxlIGNhbiBzdWJzdGl0dXRlIGEgdmFsdWUgYnV0IGNhbm5vdFxuICogICAgIGNvbmRpdGlvbmFsbHkgZ3JvdyBhIGBoZWFkZXJzOmAgYmxvY2ssIHNvIGFuIGF1dGhlbnRpY2F0ZWQgZGVzdGluYXRpb24gd2FzIHVucmVhY2hhYmxlLlxuICogICAtIE9UTFAvSFRUUCBERVNUSU5BVElPTlMuIFRoZSBiYWtlZCBmaWxlIGhhcmRjb2RlcyBhIGdSUEMgYG90bHBgIGV4cG9ydGVyLiBBbiBvdGxwaHR0cC1vbmx5XG4gKiAgICAgZGVzdGluYXRpb24gcmVzb2x2ZXMgd2l0aCBhbiBlbXB0eSBnUlBDIGVuZHBvaW50LCBhbmQgdGhlIGNvbGxlY3RvciBkb2VzIG5vdCBkZWdyYWRlIOKAlCBpdCBmYWlscyB0b1xuICogICAgIGJ1aWxkIHRoZSBwaXBlbGluZSBhbmQgZXhpdHMsIHNvIHRoZSBmdW5jdGlvbiBpcyBpbnN0cnVtZW50ZWQsIGxvb2tzIGhlYWx0aHksIGFuZCBleHBvcnRzIG5vdGhpbmcuXG4gKiAgIC0gUEVSLVNJR05BTCBQSVBFTElORVMuIFRoZSBiYWtlZCBmaWxlIGRlY2xhcmVzIGFsbCB0aHJlZSBwaXBlbGluZXMgdW5jb25kaXRpb25hbGx5LCBzbyBhIHNpZ25hbCB0aGVcbiAqICAgICBkZXN0aW5hdGlvbiBkb2VzIG5vdCBhY2NlcHQgaXMgcmVjZWl2ZWQgYW5kIHRoZW4gZmFpbHMgb24gZXhwb3J0IHJhdGhlciB0aGFuIG5ldmVyIGJlaW5nIGJ1aWx0LlxuICpcbiAqIEZMT1cgU1RZTEUgSVMgTE9BRC1CRUFSSU5HLiBUaGUgZG9jdW1lbnQgaXMgZW1pdHRlZCBvbiBhIHNpbmdsZSBsaW5lIGJlY2F1c2UgaXQgaGFzIHRvIHN1cnZpdmUgYXMgYW5cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlLiBJbiBhIFlBTUwgZmxvdyBtYXBwaW5nIGEgY29sb24gbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlLCBvciB0aGUgcGFyc2VyXG4gKiByZWFkcyBgYTpiYCBhcyB0aGUgcGxhaW4gc2NhbGFyIGBcImE6YlwiYCByYXRoZXIgdGhhbiBhIG1hcHBpbmcuIFdyaXR0ZW4gd2l0aG91dCB0aGUgc3BhY2VzIHRoZSBjb2xsZWN0b3JcbiAqIGFjY2VwdHMgdGhlIHZhcmlhYmxlLCByZXBvcnRzIHRoZSBVUkkgaXQgcmVhZCwgYW5kIHRoZW4gZmFpbHMgdG8gc3RhcnQgd2l0aCBhIGJhcmVcbiAqIGBvdGVsY29sIHN0YXRlIGlzIENsb3NlZGAg4oCUIG5vIHBhcnNlIGVycm9yLCBubyBtZW50aW9uIG9mIHRoZSBjb25maWcuIEV2ZXJ5IGA6IGAgYmVsb3cgZWFybnMgaXRzIHBsYWNlLlxuICovXG5cbi8qKlxuICogVGhlIGNvbGxlY3RvciBsYXllcidzIG93biBjb25maWctc291cmNlIHZhcmlhYmxlIOKAlCB1cHN0cmVhbSdzIG5hbWUsIG5vdCBvdXJzLiBQb2ludGVkIGF0IGEgYHlhbWw6YCBVUklcbiAqIGl0IGNhcnJpZXMgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIGlubGluZSwgc28gbm8gc2Vjb25kIHZhcmlhYmxlIGlzIG5lZWRlZCB0byBob2xkIGl0LlxuICpcbiAqIFVwc3RyZWFtIGFsc28gcmVhZHMgdGhlIG9sZGVyIGBPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfRklMRWAgYW5kIGxvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvclxuICogaXQ7IHRoaXMgaXMgdGhlIGN1cnJlbnQgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVOVl9DT0xMRUNUT1JfQ09ORklHX1VSSSA9ICdPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfVVJJJztcblxuLyoqXG4gKiBUaGUgY29uZm1hcCBwcm92aWRlciB0aGF0IHJlYWRzIGEgY29uZmlndXJhdGlvbiBvdXQgb2YgdGhlIFVSSSBpdHNlbGYuIFRoZSBjb2xsZWN0b3IgcmVnaXN0ZXJzXG4gKiBlbnYvZmlsZS95YW1sL2h0dHAvaHR0cHMvczMgcHJvdmlkZXJzOyBgeWFtbDpgIGlzIHRoZSBvbmx5IG9uZSB0aGF0IG5lZWRzIG5vIHNlY29uZCB2YXJpYWJsZSBhbmQgbm9cbiAqIG5ldHdvcmsgcmVhZCBvbiBhIGNvbGQgc3RhcnQuXG4gKi9cbmNvbnN0IENPTExFQ1RPUl9DT05GSUdfU0NIRU1FID0gJ3lhbWw6JztcblxuLyoqXG4gKiBNaXJyb3JzIHRoZSBiYWtlZCBjb25maWcncyBwcm9jZXNzb3Igc2V0LCBhbmQgdGhlIE9SREVSIGlzIHRoZSBjb250cmFjdDpcbiAqXG4gKiAgIC0gYG1lbW9yeV9saW1pdGVyYCBmaXJzdCwgc28gYW4gZXhwb3J0IGJhY2tsb2cgaXMgc2hlZCBiZWZvcmUgaXQgaXMgY2hhcmdlZCB0byB0aGUgc2FtZSBtZW1vcnkgYnVkZ2V0XG4gKiAgICAgdGhlIGN1c3RvbWVyJ3MgaGFuZGxlciBhbGxvY2F0ZXMgZnJvbS4gUGVyY2VudGFnZXMsIG5vdCBgbGltaXRfbWliYCwgYmVjYXVzZSBvbmUgbGF5ZXIgc2VydmVzXG4gKiAgICAgZnVuY3Rpb25zIGZyb20gMTI4TUIgdG8gMTBHQi5cbiAqICAgLSBgZGVjb3VwbGVgIExBU1QuIExhbWJkYSBmcmVlemVzIHRoZSBzYW5kYm94IG9uY2UgdGhlIGhhbmRsZXIgcmV0dXJucyBhbmQgZXZlcnkgZXh0ZW5zaW9uIGhhcyBjYWxsZWRcbiAqICAgICAvbmV4dDsgYSBmcm96ZW4gc2FuZGJveCBydW5zIG5vIHRpbWVycywgc28gYSBiYXRjaCBzaXR0aW5nIGJlaGluZCBpdHMgdGltZW91dCBpcyBmbHVzaGVkIG9uIGEgbGF0ZXJcbiAqICAgICBpbnZvY2F0aW9uIG9yIGRyb3BwZWQgd2hlbiB0aGUgc2FuZGJveCBpcyByZWFwZWQuIGBkZWNvdXBsZWAgYWNrbm93bGVkZ2VzIHRoZSByZWNlaXZlIHBhdGhcbiAqICAgICBpbW1lZGlhdGVseSBhbmQgdHJhY2tzIGluLWZsaWdodCBleHBvcnRzLCB3aGljaCBpcyB3aGF0IGxldHMgdGhlIGV4dGVuc2lvbiBob2xkIC9uZXh0IG9wZW4gdW50aWwgdGhlXG4gKiAgICAgcXVldWUgZHJhaW5zIOKAlCBhZnRlciB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIGl0cyByZXNwb25zZS5cbiAqL1xuY29uc3QgQ09MTEVDVE9SX1BST0NFU1NPUlMgPVxuICAne21lbW9yeV9saW1pdGVyOiB7Y2hlY2tfaW50ZXJ2YWw6IDFzLCBsaW1pdF9wZXJjZW50YWdlOiA1MCwgc3Bpa2VfbGltaXRfcGVyY2VudGFnZTogMjB9LCAnICtcbiAgJ2JhdGNoOiB7c2VuZF9iYXRjaF9zaXplOiA1MTIsIHRpbWVvdXQ6IDIwMG1zfSwgZGVjb3VwbGU6IG51bGx9JztcblxuLyoqIFZhbHVlIGFuIHVuc3VwcG9ydGVkIHNpZ25hbCdzIGBPVEVMXypfRVhQT1JURVJgIGlzIHNldCB0by4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRFUl9OT05FID0gJ25vbmUnO1xuXG4vKiogVGhlIHRocmVlIGBPVEVMXypfRVhQT1JURVJgIHZhcmlhYmxlcywgaW4gdGhlIG9yZGVyIHRoZSBjb25uZWN0b3Igd3JpdGVzIHRoZW0uICovXG5leHBvcnQgY29uc3QgRU5WX1RSQUNFU19FWFBPUlRFUiA9ICdPVEVMX1RSQUNFU19FWFBPUlRFUic7XG5leHBvcnQgY29uc3QgRU5WX01FVFJJQ1NfRVhQT1JURVIgPSAnT1RFTF9NRVRSSUNTX0VYUE9SVEVSJztcbmV4cG9ydCBjb25zdCBFTlZfTE9HU19FWFBPUlRFUiA9ICdPVEVMX0xPR1NfRVhQT1JURVInO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBzaWduYWwgaXMgZW5hYmxlZCwgZ2l2ZW4gdGhlIGNhbGxlcidzIHZhbHVlIGFuZCB0aGUgc2lnbmFsJ3Mgb3duIGRlZmF1bHQuXG4gKlxuICogVGhlIGRlZmF1bHRzIGFyZSBOT1QgdW5pZm9ybTogdHJhY2VzIGFyZSBvbiwgbWV0cmljcyBhbmQgbG9ncyBhcmUgb2ZmIChzZWUgYFNJR05BTF9ERUZBVUxUU2ApLiBTbyB0aGVcbiAqIGRlZmF1bHQgaGFzIHRvIHRyYXZlbCB3aXRoIHRoZSBzaWduYWwgcmF0aGVyIHRoYW4gYmVpbmcgZm9sZGVkIGludG8gb25lIFwidW5zZXQgbWVhbnMgb25cIiBydWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbmFsRW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCwgZGVmYXVsdEVuYWJsZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID8/IGRlZmF1bHRFbmFibGVkO1xufVxuXG4vKipcbiAqIFdoaWNoIHNpZ25hbHMgYSBkZXN0aW5hdGlvbiBjYXJyaWVzIHdoZW4gdGhlIGNhbGxlciBzYXlzIG5vdGhpbmcuXG4gKlxuICogVFJBQ0VTIE9OTFkuIE1ldHJpY3MgYW5kIGxvZ3MgYXJlIG9wdC1pbiBiZWNhdXNlIHRoZSBjb3N0IG9mIGhhdmluZyB0aGVtIG9uIGJ5IGRlZmF1bHQgZmFsbHMgb24gcGVvcGxlXG4gKiB3aG8gbmV2ZXIgYXNrZWQgZm9yIHRoZW06IGEgZGVzdGluYXRpb24gdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgYSBzaWduYWwgcmVmdXNlcyBldmVyeSBiYXRjaCBvZiBpdCwgYW5kXG4gKiB0aGUgaW4tTGFtYmRhIGNvbGxlY3RvciB0aGVuIHJldHJpZXMgb24gYW4gZXhwb25lbnRpYWwgYmFja29mZiBpbnNpZGUgYmlsbGVkIGR1cmF0aW9uLiBUcmFjZXMgYXJlIHdoYXRcbiAqIGFsbW9zdCBldmVyeSBkZXN0aW5hdGlvbiBhY2NlcHRzIGFuZCB3aGF0IGFsbW9zdCBldmVyeW9uZSBpbnN0cnVtZW50cyBmb3I7IHRoZSBvdGhlciB0d28gYXJlIGFcbiAqIGRlbGliZXJhdGUgY2hvaWNlIGFib3V0IHRoZSBkZXN0aW5hdGlvbiwgc28gdGhleSBhcmUgbWFkZSBkZWxpYmVyYXRlbHkuXG4gKlxuICogVHVybmluZyBvbmUgb24gaXMgYG1ldHJpY3M6IHRydWVgLiBFbmFibGluZyBhIHNpZ25hbCBhbHNvIGRyb3BzIHRoZSBgT1RFTF8qX0VYUE9SVEVSPW5vbmVgIG92ZXJyaWRlLCBzb1xuICogdGhlIFNESyBzdGFydHMgcHJvZHVjaW5nIGl0IGFnYWluLlxuICovXG5leHBvcnQgY29uc3QgU0lHTkFMX0RFRkFVTFRTID0geyB0cmFjZXM6IHRydWUsIG1ldHJpY3M6IGZhbHNlLCBsb2dzOiBmYWxzZSB9O1xuXG4vKiogVGhlIHRocmVlIHNpZ25hbHMgcmVzb2x2ZWQgYWdhaW5zdCB0aGVpciBkZWZhdWx0cyDigJQgdGhlIHNpbmdsZSBwbGFjZSB0aGF0IHBhaXJpbmcgaXMgZGVjaWRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlZFNpZ25hbHMoZGVzdDogT2RpZ29zRGVzdGluYXRpb24pOiB7IHRyYWNlczogYm9vbGVhbjsgbWV0cmljczogYm9vbGVhbjsgbG9nczogYm9vbGVhbiB9IHtcbiAgcmV0dXJuIHtcbiAgICB0cmFjZXM6IHNpZ25hbEVuYWJsZWQoZGVzdC50cmFjZXMsIFNJR05BTF9ERUZBVUxUUy50cmFjZXMpLFxuICAgIG1ldHJpY3M6IHNpZ25hbEVuYWJsZWQoZGVzdC5tZXRyaWNzLCBTSUdOQUxfREVGQVVMVFMubWV0cmljcyksXG4gICAgbG9nczogc2lnbmFsRW5hYmxlZChkZXN0LmxvZ3MsIFNJR05BTF9ERUZBVUxUUy5sb2dzKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgZG91YmxlLXF1b3RlZCBZQU1MIHNjYWxhci5cbiAqXG4gKiBRdW90aW5nIHVuY29uZGl0aW9uYWxseSBpcyB3aGF0IGtlZXBzIGEgdmFsdWUgc3VjaCBhcyBhIGJhcmUgYGhvc3Q6NDMxN2AgZnJvbSBiZWluZyByZS1yZWFkIGFzIGEgbmVzdGVkXG4gKiBtYXBwaW5nIGluIGZsb3cgY29udGV4dC4gYEpTT04uc3RyaW5naWZ5YCBpcyB0aGUgVHlwZVNjcmlwdCBlcXVpdmFsZW50IG9mIHRoZSBjb25uZWN0b3Inc1xuICogYHN0cmNvbnYuUXVvdGVgIGZvciB0aGUgdm9jYWJ1bGFyeSB0aGF0IG1hdHRlcnMgaGVyZSAoYFxcXCJgIGFuZCBgXFxcXGApOyBib3RoIHByb2R1Y2UgdGhlIHNhbWUgb3V0cHV0IGZvclxuICogdGhlIEFTQ0lJIGVuZHBvaW50cywgaGVhZGVyIG5hbWVzIGFuZCBjcmVkZW50aWFscyB0aGlzIGV2ZXIgc2Vlcy5cbiAqL1xuZnVuY3Rpb24geWFtbFN0cmluZyhzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocyk7XG59XG5cbi8qKlxuICogUGlja3MgdGhlIGV4cG9ydGVyIGJ5IHRoZSB0cmFuc3BvcnQgdGhlIGRlc3RpbmF0aW9uIGNvbmZpZ3VyZWQuIEEgZGVzdGluYXRpb24gY2FycmllcyBhIGdSUEMgZW5kcG9pbnRcbiAqICh0eXBlIGBvdGxwYCkgb3IgYW4gT1RMUC9IVFRQIG9uZSAodHlwZSBgb3RscGh0dHBgKTsgdGhlIHR3byBhcmUgZGlmZmVyZW50IGNvbGxlY3RvciBjb21wb25lbnRzIHdpdGhcbiAqIGRpZmZlcmVudCBlbmRwb2ludCBncmFtbWFycywgc28gdGhpcyBpcyBhIGdlbnVpbmUgYnJhbmNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0ZXJOYW1lRm9yKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGRlc3QuZW5kcG9pbnQgPyAnb3RscCcgOiAnb3RscGh0dHAnO1xufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBkZXN0aW5hdGlvbidzIHBlci1yZXF1ZXN0IGhlYWRlcnMg4oCUIGluIHByYWN0aWNlIGl0cyBjcmVkZW50aWFsLiBFbXB0eSB3aGVuIHRoZSBkZXN0aW5hdGlvblxuICogbmVlZHMgbm9uZSwgc28gbm8gaGVhZGVyIGJsb2NrIGlzIHdyaXR0ZW4gYXQgYWxsIHJhdGhlciB0aGFuIGFuIGVtcHR5IG9uZS5cbiAqXG4gKiBLZXlzIGFyZSBzb3J0ZWQgc28gdGhlIHJlbmRlcmVkIGNvbmZpZyBpcyBieXRlLWlkZW50aWNhbCBhY3Jvc3Mgc3ludGhzLiBUaGUgc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3RcbiAqIHRoZSBsaXZlIGZ1bmN0aW9uJ3MgZW52aXJvbm1lbnQgdG8gZGVjaWRlIHdoZXRoZXIgYW4gdXBkYXRlIGlzIG5lZWRlZCwgYW5kIG1hcCBvcmRlciB3b3VsZCBvdGhlcndpc2VcbiAqIG1ha2UgZXZlcnkgZGVwbG95IGxvb2sgbGlrZSBhIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVySGVhZGVycyhoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gIGlmICghaGVhZGVycykge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycykuc29ydCgpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcmVuZGVyZWQgPSBrZXlzLm1hcCgoaykgPT4gYCR7eWFtbFN0cmluZyhrKX06ICR7eWFtbFN0cmluZyhoZWFkZXJzW2tdKX1gKS5qb2luKCcsICcpO1xuICByZXR1cm4gYCwgaGVhZGVyczogeyR7cmVuZGVyZWR9fWA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckV4cG9ydGVyKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgbGV0IG91dDogc3RyaW5nO1xuICBpZiAoZGVzdC5lbmRwb2ludCkge1xuICAgIC8vIHRscy5pbnNlY3VyZSBhcHBsaWVzIHRvIHRoZSBnUlBDIGV4cG9ydGVyIG9ubHk7IHRoZSBIVFRQIGV4cG9ydGVyIHRha2VzIHRoZSBzY2hlbWUgZnJvbSB0aGUgVVJMLlxuICAgIG91dCA9IGB7b3RscDoge2VuZHBvaW50OiAke3lhbWxTdHJpbmcoZGVzdC5lbmRwb2ludCl9LCB0bHM6IHtpbnNlY3VyZTogJHtkZXN0Lmluc2VjdXJlID09PSB0cnVlfX1gO1xuICB9IGVsc2UgaWYgKGRlc3QuaHR0cEVuZHBvaW50KSB7XG4gICAgb3V0ID0gYHtvdGxwaHR0cDoge2VuZHBvaW50OiAke3lhbWxTdHJpbmcoZGVzdC5odHRwRW5kcG9pbnQpfWA7XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVhY2hlZCB3aGVuIGEgZGVzdGluYXRpb24gY2FycmllcyBuZWl0aGVyIHRyYW5zcG9ydC4gRmFpbGluZyBoZXJlIGlzIHRoZSB3aG9sZSBwb2ludDogdGhlXG4gICAgLy8gYWx0ZXJuYXRpdmUgaXMgYSBjb2xsZWN0b3IgdGhhdCBleGl0cyBvbiBzdGFydHVwIHdoaWxlIHRoZSBmdW5jdGlvbiBpcyByZXBvcnRlZCBoZWFsdGh5LlxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdPZGlnb3MgZGVzdGluYXRpb24gaGFzIG5laXRoZXIgYGVuZHBvaW50YCAoT1RMUC9nUlBDKSBub3IgYGh0dHBFbmRwb2ludGAgKE9UTFAvSFRUUCksICcgK1xuICAgICAgICAnc28gdGhlIGluLUxhbWJkYSBjb2xsZWN0b3Igd291bGQgaGF2ZSBub3doZXJlIHRvIGV4cG9ydC4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGAke291dH0ke3JlbmRlckhlYWRlcnMoZGVzdC5oZWFkZXJzKX19fWA7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgcGlwZWxpbmUgb25seSBmb3IgdGhlIHNpZ25hbHMgdGhlIGRlc3RpbmF0aW9uIGFjY2VwdHMuIEEgc2lnbmFsIHdpdGggbm8gcGlwZWxpbmUgaXMgcmVmdXNlZCBhdFxuICogdGhlIHJlY2VpdmVyLCB3aGljaCBpcyB0aGUgYmVoYXZpb3VyIHdlIHdhbnQ6IHRoZSBTREsgaXMgdG9sZCBub3QgdG8gcHJvZHVjZSBpdCBlaXRoZXIgKHNlZVxuICogYGV4cG9ydGVyT3ZlcnJpZGVGb3JgKSwgYW5kIHRoZSB0d28gdG9nZXRoZXIgbWVhbiBhbiB1bmFjY2VwdGVkIHNpZ25hbCBpcyBuZXZlciBnZW5lcmF0ZWQsIG5ldmVyXG4gKiBleHBvcnRlZCwgYW5kIG5ldmVyIGEgcGVyLWJhdGNoIGVycm9yIGFnYWluc3QgYSBiYWNrZW5kIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGl0LlxuICovXG5mdW5jdGlvbiByZW5kZXJQaXBlbGluZXMoZGVzdDogT2RpZ29zRGVzdGluYXRpb24sIGV4cG9ydGVyTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVuYWJsZWQgPSByZXNvbHZlZFNpZ25hbHMoZGVzdCk7XG4gIGNvbnN0IHNpZ25hbHM6IEFycmF5PFtzdHJpbmcsIGJvb2xlYW5dPiA9IFtcbiAgICBbJ3RyYWNlcycsIGVuYWJsZWQudHJhY2VzXSxcbiAgICBbJ21ldHJpY3MnLCBlbmFibGVkLm1ldHJpY3NdLFxuICAgIFsnbG9ncycsIGVuYWJsZWQubG9nc10sXG4gIF07XG4gIGZvciAoY29uc3QgW25hbWUsIGVuYWJsZWRdIG9mIHNpZ25hbHMpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgYCR7bmFtZX06IHtyZWNlaXZlcnM6IFtvdGxwXSwgcHJvY2Vzc29yczogW21lbW9yeV9saW1pdGVyLCBiYXRjaCwgZGVjb3VwbGVdLCBleHBvcnRlcnM6IFske2V4cG9ydGVyTmFtZX1dfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gJycgOiBgeyR7cGFydHMuam9pbignLCAnKX19YDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBhIHNpZ25hbCdzIGBPVEVMXypfRVhQT1JURVJgIG11c3QgaG9sZDogYG5vbmVgIHRvIHN1cHByZXNzIGEgc2lnbmFsIHRoZSBkZXN0aW5hdGlvblxuICogZG9lcyBub3QgYWNjZXB0LCBvciBgdW5kZWZpbmVkYCBtZWFuaW5nIHRoZSB2YXJpYWJsZSBtdXN0IGJlIEFCU0VOVCBiZWNhdXNlIHRoZSBTREsncyBvd24gZGVmYXVsdCBpc1xuICogYWxyZWFkeSB3aGF0IHdlIHdhbnQuXG4gKlxuICogT25seSB0aGUgXCJub25lXCIgc2lkZSBpcyB3cml0dGVuLCBiZWNhdXNlIGBvdGxwYCBpcyBhbHJlYWR5IGV2ZXJ5IE9wZW5UZWxlbWV0cnkgU0RLJ3MgZGVmYXVsdCBmb3IgYWxsXG4gKiB0aHJlZSBzaWduYWxzIOKAlCBzZXR0aW5nIGl0IHdvdWxkIHJlc3RhdGUgdGhlIGRlZmF1bHQgaW4gdGhyZWUgdmFyaWFibGVzIG9uIGV2ZXJ5IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0ZXJPdmVycmlkZUZvcihzdXBwb3J0ZWQ6IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc3VwcG9ydGVkID8gdW5kZWZpbmVkIDogRVhQT1JURVJfTk9ORTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb21wbGV0ZSBjb2xsZWN0b3IgY29uZmlndXJhdGlvbiBmb3Igb25lIGRlc3RpbmF0aW9uLlxuICpcbiAqIEB0aHJvd3MgaWYgdGhlIGRlc3RpbmF0aW9uIG5hbWVzIG5laXRoZXIgdHJhbnNwb3J0LCBib3RoIHRyYW5zcG9ydHMsIG9yIG5vIHNpZ25hbHMgYXQgYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ29sbGVjdG9yQ29uZmlnKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgaWYgKGRlc3QuZW5kcG9pbnQgJiYgZGVzdC5odHRwRW5kcG9pbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnT2RpZ29zIGRlc3RpbmF0aW9uIHNldHMgYm90aCBgZW5kcG9pbnRgIChPVExQL2dSUEMpIGFuZCBgaHR0cEVuZHBvaW50YCAoT1RMUC9IVFRQKTsgJyArXG4gICAgICAgICd0aGV5IHNlbGVjdCBkaWZmZXJlbnQgY29sbGVjdG9yIGV4cG9ydGVycywgc28gZXhhY3RseSBvbmUgbXVzdCBiZSBzZXQuJyxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIHR3byBmaWVsZHMgaGF2ZSBkaWZmZXJlbnQgZW5kcG9pbnQgR1JBTU1BUlMsIGFuZCBnZXR0aW5nIHRoZW0gd3JvbmcgaXMgdGhlIHdvcnN0IGZhaWx1cmUgbW9kZSB0aGlzXG4gIC8vIHBhY2thZ2UgaGFzOiB0aGUgY29sbGVjdG9yIGFjY2VwdHMgdGhlIGNvbmZpZ3VyYXRpb24sIGZhaWxzIHRvIGJ1aWxkIGl0cyBleHBvcnRlciwgYW5kIGV4aXRzIOKAlCBsZWF2aW5nXG4gIC8vIHRoZSBmdW5jdGlvbiBpbnN0cnVtZW50ZWQsIHJlcG9ydGluZyBoZWFsdGh5LCBhbmQgZXhwb3J0aW5nIG5vdGhpbmcuIEJvdGggY2hlY2tzIGFyZSB0aGVyZWZvcmUgc3ludGhcbiAgLy8gZXJyb3JzIHJhdGhlciB0aGFuIGRvY3VtZW50YXRpb24uXG4gIGlmIChkZXN0LmVuZHBvaW50ICYmIGRlc3QuZW5kcG9pbnQuaW5jbHVkZXMoJzovLycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE9kaWdvcyBkZXN0aW5hdGlvbiBcXGBlbmRwb2ludFxcYCBpcyBcIiR7ZGVzdC5lbmRwb2ludH1cIiwgYnV0IHRoZSBnUlBDIGV4cG9ydGVyIHRha2VzIGhvc3Q6cG9ydCB3aXRoIGAgK1xuICAgICAgICAnbm8gc2NoZW1lLiBVc2UgYGh0dHBFbmRwb2ludGAgZm9yIGEgc2NoZW1lLXF1YWxpZmllZCBPVExQL0hUVFAgVVJMLicsXG4gICAgKTtcbiAgfVxuICBpZiAoZGVzdC5odHRwRW5kcG9pbnQgJiYgIS9eaHR0cHM/OlxcL1xcLy8udGVzdChkZXN0Lmh0dHBFbmRwb2ludCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgT2RpZ29zIGRlc3RpbmF0aW9uIFxcYGh0dHBFbmRwb2ludFxcYCBpcyBcIiR7ZGVzdC5odHRwRW5kcG9pbnR9XCIsIGJ1dCB0aGUgT1RMUC9IVFRQIGV4cG9ydGVyIHRha2VzIGEgYCArXG4gICAgICAgICdzY2hlbWUtcXVhbGlmaWVkIFVSTCAoaHR0cDovLyBvciBodHRwczovLykuIFVzZSBgZW5kcG9pbnRgIGZvciBhIGJhcmUgZ1JQQyBob3N0OnBvcnQuJyxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0ZXIgPSByZW5kZXJFeHBvcnRlcihkZXN0KTtcbiAgY29uc3QgcGlwZWxpbmVzID0gcmVuZGVyUGlwZWxpbmVzKGRlc3QsIGV4cG9ydGVyTmFtZUZvcihkZXN0KSk7XG4gIGlmIChwaXBlbGluZXMgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09kaWdvcyBkZXN0aW5hdGlvbiBhY2NlcHRzIG5vIHRlbGVtZXRyeSBzaWduYWxzLCBzbyB0aGUgY29sbGVjdG9yIHdvdWxkIGhhdmUgbm8gcGlwZWxpbmUgdG8gYnVpbGQgJyArXG4gICAgICAgICdhbmQgd291bGQgZmFpbCB0byBzdGFydC4gTm90ZSB0aGF0IG1ldHJpY3MgYW5kIGxvZ3MgYXJlIE9GRiBieSBkZWZhdWx0IOKAlCB3aXRoIGB0cmFjZXM6IGZhbHNlYCB0aGUgJyArXG4gICAgICAgICdkZXN0aW5hdGlvbiBoYXMgbm90aGluZyBsZWZ0IHVubGVzcyB5b3UgYWxzbyBwYXNzIGBtZXRyaWNzOiB0cnVlYCBvciBgbG9nczogdHJ1ZWAuJyxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBDT0xMRUNUT1JfQ09ORklHX1NDSEVNRSArXG4gICAgJ3tyZWNlaXZlcnM6IHtvdGxwOiB7cHJvdG9jb2xzOiAnICtcbiAgICAvLyBCb3VuZCB0byBsb2NhbGhvc3Q6IHRoZSByZWNlaXZlciBleGlzdHMgb25seSBmb3IgdGhlIGluLXByb2Nlc3MgU0RLLiBCaW5kaW5nIGl0IHdpZGVyIHdvdWxkIGV4cG9zZVxuICAgIC8vIGFuIHVuYXV0aGVudGljYXRlZCBPVExQIGVuZHBvaW50IG9uIHRoZSBzYW5kYm94J3MgbmV0d29yayBpbnRlcmZhY2UuXG4gICAgJ3tncnBjOiB7ZW5kcG9pbnQ6IFwibG9jYWxob3N0OjQzMTdcIn0sIGh0dHA6IHtlbmRwb2ludDogXCJsb2NhbGhvc3Q6NDMxOFwifX19fSwgJyArXG4gICAgJ3Byb2Nlc3NvcnM6ICcgK1xuICAgIENPTExFQ1RPUl9QUk9DRVNTT1JTICtcbiAgICAnLCBleHBvcnRlcnM6ICcgK1xuICAgIGV4cG9ydGVyICtcbiAgICAnLCBzZXJ2aWNlOiB7dGVsZW1ldHJ5OiB7bWV0cmljczoge2xldmVsOiBub25lfX0sIHBpcGVsaW5lczogJyArXG4gICAgcGlwZWxpbmVzICtcbiAgICAnfX0nXG4gICk7XG59XG4iXX0=
246
+ /** The Lambda Node layer registers only dns/http/net unless explicitly configured. */
247
+ function lambdaSignalActivation(language, dest) {
248
+ const env = signalActivation(language, dest);
249
+ env.OTEL_EXPORTER_OTLP_PROTOCOL = 'http/protobuf';
250
+ if (language === 'nodejs') {
251
+ env.OTEL_NODE_ENABLED_INSTRUMENTATIONS = 'amqplib,bunyan,cassandra-driver,connect,dataloader,dns,express,fs,graphql,grpc,hapi,http,ioredis,kafkajs,knex,koa,memcached,mongodb,mongoose,mysql,mysql2,nestjs-core,net,pg,pino,redis,restify,socket.io,undici,winston';
252
+ }
253
+ return env;
254
+ }
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdG9yLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0b3ItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStFQSxzQ0FFQztBQWdCRCwwQ0FNQztBQW1CRCwwQ0FFQztBQWtFRCxrREFFQztBQUdELDREQUlDO0FBR0QsNENBWUM7QUFPRCxzREFpREM7QUFHRCx3REFPQztBQXRSRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSDs7Ozs7O0dBTUc7QUFDVSxRQUFBLHdCQUF3QixHQUFHLG9DQUFvQyxDQUFDO0FBRTdFOzs7O0dBSUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sb0JBQW9CLEdBQ3hCLDJGQUEyRjtJQUMzRixnRUFBZ0UsQ0FBQztBQUVuRSxpRUFBaUU7QUFDcEQsUUFBQSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBRXBDLHFGQUFxRjtBQUN4RSxRQUFBLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDO0FBQzdDLFFBQUEsb0JBQW9CLEdBQUcsdUJBQXVCLENBQUM7QUFDL0MsUUFBQSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztBQUV0RDs7Ozs7R0FLRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxLQUEwQixFQUFFLGNBQXVCO0lBQy9FLE9BQU8sS0FBSyxJQUFJLGNBQWMsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNVLFFBQUEsZUFBZSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUU3RSxvR0FBb0c7QUFDcEcsU0FBZ0IsZUFBZSxDQUFDLElBQXVCO0lBQ3JELE9BQU87UUFDTCxNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsdUJBQWUsQ0FBQyxNQUFN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Q2pDLHFHQUFxRztRQUNyRyx1RUFBdUU7UUFDdkUsOEVBQThFO1FBQzlFLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLFFBQVE7UUFDUiw4REFBOEQ7UUFDOUQsU0FBUztRQUNULElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQztBQUVELHNGQUFzRjtBQUN0RixTQUFnQixzQkFBc0IsQ0FBQyxRQUFnQixFQUFFLElBQXVCO0lBQzlFLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsZUFBZSxDQUFDO0lBQ2xELElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxrQ0FBa0MsR0FBRywwTkFBME4sQ0FBQztJQUN0USxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2RpZ29zRGVzdGluYXRpb24gfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBsZWdhY3kgaW4tTGFtYmRhIGNvbGxlY3RvciBjb25maWd1cmF0aW9uIGZvciB2YWxpZGF0aW9uIGFuZCBwYXJpdHkgdGVzdHMgYXMgYW4gaW5saW5lXG4gKiBgT1BFTlRFTEVNRVRSWV9DT0xMRUNUT1JfQ09ORklHX1VSSWAgdmFsdWUuXG4gKlxuICogVGhpcyBpcyBhIFBPUlQgb2YgYHJlbmRlckNvbGxlY3RvckNvbmZpZ2AgaW4gdGhlIGNvbm5lY3RvclxuICogKGNvbm5lY3RvcnMvcHJvdmlkZXJzL2F3cy9wa2cvd29ya2xvYWQvaW5zdHJ1bWVudG9yL2NvbGxlY3Rvcl9jb25maWcuZ28pIGFuZCBpcyBkZWxpYmVyYXRlbHlcbiAqIGJ5dGUtZm9yLWJ5dGUgY29tcGF0aWJsZSB3aXRoIGl0LiBUaGF0IGVxdWl2YWxlbmNlIGlzIG5vdCBjb3NtZXRpYzogYSBmdW5jdGlvbiBpbnN0cnVtZW50ZWQgaGVyZSBhbmRcbiAqIGxhdGVyIGVuYWJsZWQgYXMgYSBjb25uZWN0b3Igc291cmNlIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGNvbm5lY3RvcidzIHJlbmRlcmluZyB0byBkZWNpZGUgd2hldGhlciBpdFxuICogbmVlZHMgY29udmVyZ2luZy4gQSBzdHJheSBzcGFjZSB3b3VsZCBtYWtlIGV2ZXJ5IHJlY29uY2lsZSBzZWUgZHJpZnQgYW5kIGNodXJuIGEgbmV3IGZ1bmN0aW9uIHZlcnNpb25cbiAqIGZvcmV2ZXIuXG4gKlxuICogV0hZIFRIRSBXSE9MRSBET0NVTUVOVCwgUkFUSEVSIFRIQU4gQSBGRVcgVkFSSUFCTEVTLiBUaGUgbGF5ZXIgc2hpcHMgYSBiYWtlZFxuICogL29wdC9jb2xsZWN0b3ItY29uZmlnL2NvbmZpZy55YW1sLCBidXQgdGhhdCBmaWxlIGlzIE9ORSBkb2N1bWVudCBzaGFyZWQgYnkgZXZlcnkgZnVuY3Rpb24sIHNvIGl0IGNhblxuICogb25seSByZWFjaCBhIGRlc3RpbmF0aW9uIHRocm91Z2ggZW52IGluZGlyZWN0aW9uIOKAlCBgJHtlbnY6U09NRVRISU5HfWAuIFRoYXQgbWFkZSB0aHJlZSB0aGluZ3NcbiAqIGltcG9zc2libGUgYXQgb25jZTpcbiAqXG4gKiAgIC0gQVVUSC4gQSBjcmVkZW50aWFsIGlzIGEgaGVhZGVycyBtYXAsIG5vdCBhIHNjYWxhci4gQSBiYWtlZCBmaWxlIGNhbiBzdWJzdGl0dXRlIGEgdmFsdWUgYnV0IGNhbm5vdFxuICogICAgIGNvbmRpdGlvbmFsbHkgZ3JvdyBhIGBoZWFkZXJzOmAgYmxvY2ssIHNvIGFuIGF1dGhlbnRpY2F0ZWQgZGVzdGluYXRpb24gd2FzIHVucmVhY2hhYmxlLlxuICogICAtIE9UTFAvSFRUUCBERVNUSU5BVElPTlMuIFRoZSBiYWtlZCBmaWxlIGhhcmRjb2RlcyBhIGdSUEMgYG90bHBgIGV4cG9ydGVyLiBBbiBvdGxwaHR0cC1vbmx5XG4gKiAgICAgZGVzdGluYXRpb24gcmVzb2x2ZXMgd2l0aCBhbiBlbXB0eSBnUlBDIGVuZHBvaW50LCBhbmQgdGhlIGNvbGxlY3RvciBkb2VzIG5vdCBkZWdyYWRlIOKAlCBpdCBmYWlscyB0b1xuICogICAgIGJ1aWxkIHRoZSBwaXBlbGluZSBhbmQgZXhpdHMsIHNvIHRoZSBmdW5jdGlvbiBpcyBpbnN0cnVtZW50ZWQsIGxvb2tzIGhlYWx0aHksIGFuZCBleHBvcnRzIG5vdGhpbmcuXG4gKiAgIC0gUEVSLVNJR05BTCBQSVBFTElORVMuIFRoZSBiYWtlZCBmaWxlIGRlY2xhcmVzIGFsbCB0aHJlZSBwaXBlbGluZXMgdW5jb25kaXRpb25hbGx5LCBzbyBhIHNpZ25hbCB0aGVcbiAqICAgICBkZXN0aW5hdGlvbiBkb2VzIG5vdCBhY2NlcHQgaXMgcmVjZWl2ZWQgYW5kIHRoZW4gZmFpbHMgb24gZXhwb3J0IHJhdGhlciB0aGFuIG5ldmVyIGJlaW5nIGJ1aWx0LlxuICpcbiAqIEZMT1cgU1RZTEUgSVMgTE9BRC1CRUFSSU5HLiBUaGUgZG9jdW1lbnQgaXMgZW1pdHRlZCBvbiBhIHNpbmdsZSBsaW5lIGJlY2F1c2UgaXQgaGFzIHRvIHN1cnZpdmUgYXMgYW5cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlLiBJbiBhIFlBTUwgZmxvdyBtYXBwaW5nIGEgY29sb24gbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlLCBvciB0aGUgcGFyc2VyXG4gKiByZWFkcyBgYTpiYCBhcyB0aGUgcGxhaW4gc2NhbGFyIGBcImE6YlwiYCByYXRoZXIgdGhhbiBhIG1hcHBpbmcuIFdyaXR0ZW4gd2l0aG91dCB0aGUgc3BhY2VzIHRoZSBjb2xsZWN0b3JcbiAqIGFjY2VwdHMgdGhlIHZhcmlhYmxlLCByZXBvcnRzIHRoZSBVUkkgaXQgcmVhZCwgYW5kIHRoZW4gZmFpbHMgdG8gc3RhcnQgd2l0aCBhIGJhcmVcbiAqIGBvdGVsY29sIHN0YXRlIGlzIENsb3NlZGAg4oCUIG5vIHBhcnNlIGVycm9yLCBubyBtZW50aW9uIG9mIHRoZSBjb25maWcuIEV2ZXJ5IGA6IGAgYmVsb3cgZWFybnMgaXRzIHBsYWNlLlxuICovXG5cbi8qKlxuICogVGhlIGNvbGxlY3RvciBsYXllcidzIG93biBjb25maWctc291cmNlIHZhcmlhYmxlIOKAlCB1cHN0cmVhbSdzIG5hbWUsIG5vdCBvdXJzLiBQb2ludGVkIGF0IGEgYHlhbWw6YCBVUklcbiAqIGl0IGNhcnJpZXMgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIGlubGluZSwgc28gbm8gc2Vjb25kIHZhcmlhYmxlIGlzIG5lZWRlZCB0byBob2xkIGl0LlxuICpcbiAqIFVwc3RyZWFtIGFsc28gcmVhZHMgdGhlIG9sZGVyIGBPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfRklMRWAgYW5kIGxvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvclxuICogaXQ7IHRoaXMgaXMgdGhlIGN1cnJlbnQgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVOVl9DT0xMRUNUT1JfQ09ORklHX1VSSSA9ICdPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfVVJJJztcblxuLyoqXG4gKiBUaGUgY29uZm1hcCBwcm92aWRlciB0aGF0IHJlYWRzIGEgY29uZmlndXJhdGlvbiBvdXQgb2YgdGhlIFVSSSBpdHNlbGYuIFRoZSBjb2xsZWN0b3IgcmVnaXN0ZXJzXG4gKiBlbnYvZmlsZS95YW1sL2h0dHAvaHR0cHMvczMgcHJvdmlkZXJzOyBgeWFtbDpgIGlzIHRoZSBvbmx5IG9uZSB0aGF0IG5lZWRzIG5vIHNlY29uZCB2YXJpYWJsZSBhbmQgbm9cbiAqIG5ldHdvcmsgcmVhZCBvbiBhIGNvbGQgc3RhcnQuXG4gKi9cbmNvbnN0IENPTExFQ1RPUl9DT05GSUdfU0NIRU1FID0gJ3lhbWw6JztcblxuLyoqXG4gKiBNaXJyb3JzIHRoZSBiYWtlZCBjb25maWcncyBwcm9jZXNzb3Igc2V0LCBhbmQgdGhlIE9SREVSIGlzIHRoZSBjb250cmFjdDpcbiAqXG4gKiAgIC0gYG1lbW9yeV9saW1pdGVyYCBmaXJzdCwgc28gYW4gZXhwb3J0IGJhY2tsb2cgaXMgc2hlZCBiZWZvcmUgaXQgaXMgY2hhcmdlZCB0byB0aGUgc2FtZSBtZW1vcnkgYnVkZ2V0XG4gKiAgICAgdGhlIGN1c3RvbWVyJ3MgaGFuZGxlciBhbGxvY2F0ZXMgZnJvbS4gUGVyY2VudGFnZXMsIG5vdCBgbGltaXRfbWliYCwgYmVjYXVzZSBvbmUgbGF5ZXIgc2VydmVzXG4gKiAgICAgZnVuY3Rpb25zIGZyb20gMTI4TUIgdG8gMTBHQi5cbiAqICAgLSBgZGVjb3VwbGVgIExBU1QuIExhbWJkYSBmcmVlemVzIHRoZSBzYW5kYm94IG9uY2UgdGhlIGhhbmRsZXIgcmV0dXJucyBhbmQgZXZlcnkgZXh0ZW5zaW9uIGhhcyBjYWxsZWRcbiAqICAgICAvbmV4dDsgYSBmcm96ZW4gc2FuZGJveCBydW5zIG5vIHRpbWVycywgc28gYSBiYXRjaCBzaXR0aW5nIGJlaGluZCBpdHMgdGltZW91dCBpcyBmbHVzaGVkIG9uIGEgbGF0ZXJcbiAqICAgICBpbnZvY2F0aW9uIG9yIGRyb3BwZWQgd2hlbiB0aGUgc2FuZGJveCBpcyByZWFwZWQuIGBkZWNvdXBsZWAgYWNrbm93bGVkZ2VzIHRoZSByZWNlaXZlIHBhdGhcbiAqICAgICBpbW1lZGlhdGVseSBhbmQgdHJhY2tzIGluLWZsaWdodCBleHBvcnRzLCB3aGljaCBpcyB3aGF0IGxldHMgdGhlIGV4dGVuc2lvbiBob2xkIC9uZXh0IG9wZW4gdW50aWwgdGhlXG4gKiAgICAgcXVldWUgZHJhaW5zIOKAlCBhZnRlciB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIGl0cyByZXNwb25zZS5cbiAqL1xuY29uc3QgQ09MTEVDVE9SX1BST0NFU1NPUlMgPVxuICAne21lbW9yeV9saW1pdGVyOiB7Y2hlY2tfaW50ZXJ2YWw6IDFzLCBsaW1pdF9wZXJjZW50YWdlOiA1MCwgc3Bpa2VfbGltaXRfcGVyY2VudGFnZTogMjB9LCAnICtcbiAgJ2JhdGNoOiB7c2VuZF9iYXRjaF9zaXplOiA1MTIsIHRpbWVvdXQ6IDIwMG1zfSwgZGVjb3VwbGU6IG51bGx9JztcblxuLyoqIFZhbHVlIGFuIHVuc3VwcG9ydGVkIHNpZ25hbCdzIGBPVEVMXypfRVhQT1JURVJgIGlzIHNldCB0by4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRFUl9OT05FID0gJ25vbmUnO1xuXG4vKiogVGhlIHRocmVlIGBPVEVMXypfRVhQT1JURVJgIHZhcmlhYmxlcywgaW4gdGhlIG9yZGVyIHRoZSBjb25uZWN0b3Igd3JpdGVzIHRoZW0uICovXG5leHBvcnQgY29uc3QgRU5WX1RSQUNFU19FWFBPUlRFUiA9ICdPVEVMX1RSQUNFU19FWFBPUlRFUic7XG5leHBvcnQgY29uc3QgRU5WX01FVFJJQ1NfRVhQT1JURVIgPSAnT1RFTF9NRVRSSUNTX0VYUE9SVEVSJztcbmV4cG9ydCBjb25zdCBFTlZfTE9HU19FWFBPUlRFUiA9ICdPVEVMX0xPR1NfRVhQT1JURVInO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBzaWduYWwgaXMgZW5hYmxlZCwgZ2l2ZW4gdGhlIGNhbGxlcidzIHZhbHVlIGFuZCB0aGUgc2lnbmFsJ3Mgb3duIGRlZmF1bHQuXG4gKlxuICogVGhlIGRlZmF1bHRzIGFyZSBOT1QgdW5pZm9ybTogdHJhY2VzIGFyZSBvbiwgbWV0cmljcyBhbmQgbG9ncyBhcmUgb2ZmIChzZWUgYFNJR05BTF9ERUZBVUxUU2ApLiBTbyB0aGVcbiAqIGRlZmF1bHQgaGFzIHRvIHRyYXZlbCB3aXRoIHRoZSBzaWduYWwgcmF0aGVyIHRoYW4gYmVpbmcgZm9sZGVkIGludG8gb25lIFwidW5zZXQgbWVhbnMgb25cIiBydWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbmFsRW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCwgZGVmYXVsdEVuYWJsZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID8/IGRlZmF1bHRFbmFibGVkO1xufVxuXG4vKipcbiAqIFdoaWNoIHNpZ25hbHMgYSBkZXN0aW5hdGlvbiBjYXJyaWVzIHdoZW4gdGhlIGNhbGxlciBzYXlzIG5vdGhpbmcuXG4gKlxuICogVFJBQ0VTIE9OTFkuIE1ldHJpY3MgYW5kIGxvZ3MgYXJlIG9wdC1pbiBiZWNhdXNlIHRoZSBjb3N0IG9mIGhhdmluZyB0aGVtIG9uIGJ5IGRlZmF1bHQgZmFsbHMgb24gcGVvcGxlXG4gKiB3aG8gbmV2ZXIgYXNrZWQgZm9yIHRoZW06IGEgZGVzdGluYXRpb24gdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgYSBzaWduYWwgcmVmdXNlcyBldmVyeSBiYXRjaCBvZiBpdCwgYW5kXG4gKiB0aGUgaW4tTGFtYmRhIGNvbGxlY3RvciB0aGVuIHJldHJpZXMgb24gYW4gZXhwb25lbnRpYWwgYmFja29mZiBpbnNpZGUgYmlsbGVkIGR1cmF0aW9uLiBUcmFjZXMgYXJlIHdoYXRcbiAqIGFsbW9zdCBldmVyeSBkZXN0aW5hdGlvbiBhY2NlcHRzIGFuZCB3aGF0IGFsbW9zdCBldmVyeW9uZSBpbnN0cnVtZW50cyBmb3I7IHRoZSBvdGhlciB0d28gYXJlIGFcbiAqIGRlbGliZXJhdGUgY2hvaWNlIGFib3V0IHRoZSBkZXN0aW5hdGlvbiwgc28gdGhleSBhcmUgbWFkZSBkZWxpYmVyYXRlbHkuXG4gKlxuICogVHVybmluZyBvbmUgb24gaXMgYG1ldHJpY3M6IHRydWVgLiBFbmFibGluZyBhIHNpZ25hbCBzZXRzIGBPVEVMXypfRVhQT1JURVI9b3RscGAgZXhwbGljaXRseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNJR05BTF9ERUZBVUxUUyA9IHsgdHJhY2VzOiB0cnVlLCBtZXRyaWNzOiBmYWxzZSwgbG9nczogZmFsc2UgfTtcblxuLyoqIFRoZSB0aHJlZSBzaWduYWxzIHJlc29sdmVkIGFnYWluc3QgdGhlaXIgZGVmYXVsdHMg4oCUIHRoZSBzaW5nbGUgcGxhY2UgdGhhdCBwYWlyaW5nIGlzIGRlY2lkZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRTaWduYWxzKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogeyB0cmFjZXM6IGJvb2xlYW47IG1ldHJpY3M6IGJvb2xlYW47IGxvZ3M6IGJvb2xlYW4gfSB7XG4gIHJldHVybiB7XG4gICAgdHJhY2VzOiBzaWduYWxFbmFibGVkKGRlc3QudHJhY2VzLCBTSUdOQUxfREVGQVVMVFMudHJhY2VzKSxcbiAgICBtZXRyaWNzOiBzaWduYWxFbmFibGVkKGRlc3QubWV0cmljcywgU0lHTkFMX0RFRkFVTFRTLm1ldHJpY3MpLFxuICAgIGxvZ3M6IHNpZ25hbEVuYWJsZWQoZGVzdC5sb2dzLCBTSUdOQUxfREVGQVVMVFMubG9ncyksXG4gIH07XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGRvdWJsZS1xdW90ZWQgWUFNTCBzY2FsYXIuXG4gKlxuICogUXVvdGluZyB1bmNvbmRpdGlvbmFsbHkgaXMgd2hhdCBrZWVwcyBhIHZhbHVlIHN1Y2ggYXMgYSBiYXJlIGBob3N0OjQzMTdgIGZyb20gYmVpbmcgcmUtcmVhZCBhcyBhIG5lc3RlZFxuICogbWFwcGluZyBpbiBmbG93IGNvbnRleHQuIGBKU09OLnN0cmluZ2lmeWAgaXMgdGhlIFR5cGVTY3JpcHQgZXF1aXZhbGVudCBvZiB0aGUgY29ubmVjdG9yJ3NcbiAqIGBzdHJjb252LlF1b3RlYCBmb3IgdGhlIHZvY2FidWxhcnkgdGhhdCBtYXR0ZXJzIGhlcmUgKGBcXFwiYCBhbmQgYFxcXFxgKTsgYm90aCBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dCBmb3JcbiAqIHRoZSBBU0NJSSBlbmRwb2ludHMsIGhlYWRlciBuYW1lcyBhbmQgY3JlZGVudGlhbHMgdGhpcyBldmVyIHNlZXMuXG4gKi9cbmZ1bmN0aW9uIHlhbWxTdHJpbmcoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHMpO1xufVxuXG4vKipcbiAqIFBpY2tzIHRoZSBleHBvcnRlciBieSB0aGUgdHJhbnNwb3J0IHRoZSBkZXN0aW5hdGlvbiBjb25maWd1cmVkLiBBIGRlc3RpbmF0aW9uIGNhcnJpZXMgYSBnUlBDIGVuZHBvaW50XG4gKiAodHlwZSBgb3RscGApIG9yIGFuIE9UTFAvSFRUUCBvbmUgKHR5cGUgYG90bHBodHRwYCk7IHRoZSB0d28gYXJlIGRpZmZlcmVudCBjb2xsZWN0b3IgY29tcG9uZW50cyB3aXRoXG4gKiBkaWZmZXJlbnQgZW5kcG9pbnQgZ3JhbW1hcnMsIHNvIHRoaXMgaXMgYSBnZW51aW5lIGJyYW5jaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydGVyTmFtZUZvcihkZXN0OiBPZGlnb3NEZXN0aW5hdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBkZXN0LmVuZHBvaW50ID8gJ290bHAnIDogJ290bHBodHRwJztcbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgZGVzdGluYXRpb24ncyBwZXItcmVxdWVzdCBoZWFkZXJzIOKAlCBpbiBwcmFjdGljZSBpdHMgY3JlZGVudGlhbC4gRW1wdHkgd2hlbiB0aGUgZGVzdGluYXRpb25cbiAqIG5lZWRzIG5vbmUsIHNvIG5vIGhlYWRlciBibG9jayBpcyB3cml0dGVuIGF0IGFsbCByYXRoZXIgdGhhbiBhbiBlbXB0eSBvbmUuXG4gKlxuICogS2V5cyBhcmUgc29ydGVkIHNvIHRoZSByZW5kZXJlZCBjb25maWcgaXMgYnl0ZS1pZGVudGljYWwgYWNyb3NzIHN5bnRocy4gVGhlIHN0cmluZyBpcyBjb21wYXJlZCBhZ2FpbnN0XG4gKiB0aGUgbGl2ZSBmdW5jdGlvbidzIGVudmlyb25tZW50IHRvIGRlY2lkZSB3aGV0aGVyIGFuIHVwZGF0ZSBpcyBuZWVkZWQsIGFuZCBtYXAgb3JkZXIgd291bGQgb3RoZXJ3aXNlXG4gKiBtYWtlIGV2ZXJ5IGRlcGxveSBsb29rIGxpa2UgYSBjaGFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckhlYWRlcnMoaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBzdHJpbmcge1xuICBpZiAoIWhlYWRlcnMpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpLnNvcnQoKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHJlbmRlcmVkID0ga2V5cy5tYXAoKGspID0+IGAke3lhbWxTdHJpbmcoayl9OiAke3lhbWxTdHJpbmcoaGVhZGVyc1trXSl9YCkuam9pbignLCAnKTtcbiAgcmV0dXJuIGAsIGhlYWRlcnM6IHske3JlbmRlcmVkfX1gO1xufVxuXG5mdW5jdGlvbiByZW5kZXJFeHBvcnRlcihkZXN0OiBPZGlnb3NEZXN0aW5hdGlvbik6IHN0cmluZyB7XG4gIGxldCBvdXQ6IHN0cmluZztcbiAgaWYgKGRlc3QuZW5kcG9pbnQpIHtcbiAgICAvLyB0bHMuaW5zZWN1cmUgYXBwbGllcyB0byB0aGUgZ1JQQyBleHBvcnRlciBvbmx5OyB0aGUgSFRUUCBleHBvcnRlciB0YWtlcyB0aGUgc2NoZW1lIGZyb20gdGhlIFVSTC5cbiAgICBvdXQgPSBge290bHA6IHtlbmRwb2ludDogJHt5YW1sU3RyaW5nKGRlc3QuZW5kcG9pbnQpfSwgdGxzOiB7aW5zZWN1cmU6ICR7ZGVzdC5pbnNlY3VyZSA9PT0gdHJ1ZX19YDtcbiAgfSBlbHNlIGlmIChkZXN0Lmh0dHBFbmRwb2ludCkge1xuICAgIG91dCA9IGB7b3RscGh0dHA6IHtlbmRwb2ludDogJHt5YW1sU3RyaW5nKGRlc3QuaHR0cEVuZHBvaW50KX1gO1xuICB9IGVsc2Uge1xuICAgIC8vIFJlYWNoZWQgd2hlbiBhIGRlc3RpbmF0aW9uIGNhcnJpZXMgbmVpdGhlciB0cmFuc3BvcnQuIEZhaWxpbmcgaGVyZSBpcyB0aGUgd2hvbGUgcG9pbnQ6IHRoZVxuICAgIC8vIGFsdGVybmF0aXZlIGlzIGEgY29sbGVjdG9yIHRoYXQgZXhpdHMgb24gc3RhcnR1cCB3aGlsZSB0aGUgZnVuY3Rpb24gaXMgcmVwb3J0ZWQgaGVhbHRoeS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnT2RpZ29zIGRlc3RpbmF0aW9uIGhhcyBuZWl0aGVyIGBlbmRwb2ludGAgKE9UTFAvZ1JQQykgbm9yIGBodHRwRW5kcG9pbnRgIChPVExQL0hUVFApLCAnICtcbiAgICAgICAgJ3NvIHRoZSBpbi1MYW1iZGEgY29sbGVjdG9yIHdvdWxkIGhhdmUgbm93aGVyZSB0byBleHBvcnQuJyxcbiAgICApO1xuICB9XG4gIHJldHVybiBgJHtvdXR9JHtyZW5kZXJIZWFkZXJzKGRlc3QuaGVhZGVycyl9fX1gO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHBpcGVsaW5lIG9ubHkgZm9yIHRoZSBzaWduYWxzIHRoZSBkZXN0aW5hdGlvbiBhY2NlcHRzLiBBIHNpZ25hbCB3aXRoIG5vIHBpcGVsaW5lIGlzIHJlZnVzZWQgYXRcbiAqIHRoZSByZWNlaXZlciwgd2hpY2ggaXMgdGhlIGJlaGF2aW91ciB3ZSB3YW50OiB0aGUgU0RLIGlzIHRvbGQgbm90IHRvIHByb2R1Y2UgaXQgZWl0aGVyIChzZWVcbiAqIGBleHBvcnRlck92ZXJyaWRlRm9yYCksIGFuZCB0aGUgdHdvIHRvZ2V0aGVyIG1lYW4gYW4gdW5hY2NlcHRlZCBzaWduYWwgaXMgbmV2ZXIgZ2VuZXJhdGVkLCBuZXZlclxuICogZXhwb3J0ZWQsIGFuZCBuZXZlciBhIHBlci1iYXRjaCBlcnJvciBhZ2FpbnN0IGEgYmFja2VuZCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpdC5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyUGlwZWxpbmVzKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uLCBleHBvcnRlck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbmFibGVkID0gcmVzb2x2ZWRTaWduYWxzKGRlc3QpO1xuICBjb25zdCBzaWduYWxzOiBBcnJheTxbc3RyaW5nLCBib29sZWFuXT4gPSBbXG4gICAgWyd0cmFjZXMnLCBlbmFibGVkLnRyYWNlc10sXG4gICAgWydtZXRyaWNzJywgZW5hYmxlZC5tZXRyaWNzXSxcbiAgICBbJ2xvZ3MnLCBlbmFibGVkLmxvZ3NdLFxuICBdO1xuICBmb3IgKGNvbnN0IFtuYW1lLCBlbmFibGVkXSBvZiBzaWduYWxzKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcGFydHMucHVzaChcbiAgICAgIGAke25hbWV9OiB7cmVjZWl2ZXJzOiBbb3RscF0sIHByb2Nlc3NvcnM6IFttZW1vcnlfbGltaXRlciwgYmF0Y2gsIGRlY291cGxlXSwgZXhwb3J0ZXJzOiBbJHtleHBvcnRlck5hbWV9XX1gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMCA/ICcnIDogYHske3BhcnRzLmpvaW4oJywgJyl9fWA7XG59XG5cbi8qKiBFeHBsaWNpdCBleHBvcnRlciBzZWxlY3RvcnMgbWlycm9yIHRoZSBiYXNlIGNvbm5lY3RvciBwb2xpY3k7IFNESyBkZWZhdWx0cyB2YXJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydGVyT3ZlcnJpZGVGb3IoZW5hYmxlZDogYm9vbGVhbik6IHN0cmluZyB7XG4gIHJldHVybiBlbmFibGVkID8gJ290bHAnIDogRVhQT1JURVJfTk9ORTtcbn1cblxuLyoqIFBlci1zaWduYWwgdHJhbnNwb3J0IG92ZXJyaWRlcyBieXBhc3MgdGhlIGRlc3RpbmF0aW9uIGFuZCBtdXN0IG5vdCBjb2V4aXN0IHdpdGggaXQuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbmFsVHJhbnNwb3J0T3ZlcnJpZGVzKCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsnVFJBQ0VTJywgJ01FVFJJQ1MnLCAnTE9HUyddLmZsYXRNYXAoKHNpZ25hbCkgPT5cbiAgICBbJ0VORFBPSU5UJywgJ1BST1RPQ09MJywgJ0hFQURFUlMnLCAnSU5TRUNVUkUnXS5tYXAoKHNldHRpbmcpID0+IGBPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWx9XyR7c2V0dGluZ31gKSxcbiAgKTtcbn1cblxuLyoqIExhbmd1YWdlLXNwZWNpZmljIFNESyBhY3RpdmF0aW9uLCBzaGFyZWQgYnkgTGFtYmRhIGFuZCBGYXJnYXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hbEFjdGl2YXRpb24obGFuZ3VhZ2U6IHN0cmluZywgZGVzdDogT2RpZ29zRGVzdGluYXRpb24pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgY29uc3QgZW5hYmxlZCA9IHJlc29sdmVkU2lnbmFscyhkZXN0KTtcbiAgY29uc3QgZW52OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIE9URUxfU0RLX0RJU0FCTEVEOiAnZmFsc2UnLFxuICAgIFtFTlZfVFJBQ0VTX0VYUE9SVEVSXTogZXhwb3J0ZXJPdmVycmlkZUZvcihlbmFibGVkLnRyYWNlcyksXG4gICAgW0VOVl9NRVRSSUNTX0VYUE9SVEVSXTogZXhwb3J0ZXJPdmVycmlkZUZvcihlbmFibGVkLm1ldHJpY3MpLFxuICAgIFtFTlZfTE9HU19FWFBPUlRFUl06IGV4cG9ydGVyT3ZlcnJpZGVGb3IoZW5hYmxlZC5sb2dzKSxcbiAgfTtcbiAgaWYgKGxhbmd1YWdlID09PSAncHl0aG9uJykge1xuICAgIGVudi5PVEVMX1BZVEhPTl9MT0dHSU5HX0FVVE9fSU5TVFJVTUVOVEFUSU9OX0VOQUJMRUQgPSBTdHJpbmcoZW5hYmxlZC5sb2dzKTtcbiAgfVxuICByZXR1cm4gZW52O1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbXBsZXRlIGNvbGxlY3RvciBjb25maWd1cmF0aW9uIGZvciBvbmUgZGVzdGluYXRpb24uXG4gKlxuICogQHRocm93cyBpZiB0aGUgZGVzdGluYXRpb24gbmFtZXMgbmVpdGhlciB0cmFuc3BvcnQsIGJvdGggdHJhbnNwb3J0cywgb3Igbm8gc2lnbmFscyBhdCBhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJDb2xsZWN0b3JDb25maWcoZGVzdDogT2RpZ29zRGVzdGluYXRpb24pOiBzdHJpbmcge1xuICBpZiAoZGVzdC5lbmRwb2ludCAmJiBkZXN0Lmh0dHBFbmRwb2ludCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdPZGlnb3MgZGVzdGluYXRpb24gc2V0cyBib3RoIGBlbmRwb2ludGAgKE9UTFAvZ1JQQykgYW5kIGBodHRwRW5kcG9pbnRgIChPVExQL0hUVFApOyAnICtcbiAgICAgICAgJ3RoZXkgc2VsZWN0IGRpZmZlcmVudCBjb2xsZWN0b3IgZXhwb3J0ZXJzLCBzbyBleGFjdGx5IG9uZSBtdXN0IGJlIHNldC4nLFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgdHdvIGZpZWxkcyBoYXZlIGRpZmZlcmVudCBlbmRwb2ludCBHUkFNTUFSUywgYW5kIGdldHRpbmcgdGhlbSB3cm9uZyBpcyB0aGUgd29yc3QgZmFpbHVyZSBtb2RlIHRoaXNcbiAgLy8gcGFja2FnZSBoYXM6IHRoZSBjb2xsZWN0b3IgYWNjZXB0cyB0aGUgY29uZmlndXJhdGlvbiwgZmFpbHMgdG8gYnVpbGQgaXRzIGV4cG9ydGVyLCBhbmQgZXhpdHMg4oCUIGxlYXZpbmdcbiAgLy8gdGhlIGZ1bmN0aW9uIGluc3RydW1lbnRlZCwgcmVwb3J0aW5nIGhlYWx0aHksIGFuZCBleHBvcnRpbmcgbm90aGluZy4gQm90aCBjaGVja3MgYXJlIHRoZXJlZm9yZSBzeW50aFxuICAvLyBlcnJvcnMgcmF0aGVyIHRoYW4gZG9jdW1lbnRhdGlvbi5cbiAgaWYgKGRlc3QuZW5kcG9pbnQgJiYgZGVzdC5lbmRwb2ludC5pbmNsdWRlcygnOi8vJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgT2RpZ29zIGRlc3RpbmF0aW9uIFxcYGVuZHBvaW50XFxgIGlzIFwiJHtkZXN0LmVuZHBvaW50fVwiLCBidXQgdGhlIGdSUEMgZXhwb3J0ZXIgdGFrZXMgaG9zdDpwb3J0IHdpdGggYCArXG4gICAgICAgICdubyBzY2hlbWUuIFVzZSBgaHR0cEVuZHBvaW50YCBmb3IgYSBzY2hlbWUtcXVhbGlmaWVkIE9UTFAvSFRUUCBVUkwuJyxcbiAgICApO1xuICB9XG4gIGlmIChkZXN0Lmh0dHBFbmRwb2ludCAmJiAhL15odHRwcz86XFwvXFwvLy50ZXN0KGRlc3QuaHR0cEVuZHBvaW50KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBPZGlnb3MgZGVzdGluYXRpb24gXFxgaHR0cEVuZHBvaW50XFxgIGlzIFwiJHtkZXN0Lmh0dHBFbmRwb2ludH1cIiwgYnV0IHRoZSBPVExQL0hUVFAgZXhwb3J0ZXIgdGFrZXMgYSBgICtcbiAgICAgICAgJ3NjaGVtZS1xdWFsaWZpZWQgVVJMIChodHRwOi8vIG9yIGh0dHBzOi8vKS4gVXNlIGBlbmRwb2ludGAgZm9yIGEgYmFyZSBnUlBDIGhvc3Q6cG9ydC4nLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBleHBvcnRlciA9IHJlbmRlckV4cG9ydGVyKGRlc3QpO1xuICBjb25zdCBwaXBlbGluZXMgPSByZW5kZXJQaXBlbGluZXMoZGVzdCwgZXhwb3J0ZXJOYW1lRm9yKGRlc3QpKTtcbiAgaWYgKHBpcGVsaW5lcyA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnT2RpZ29zIGRlc3RpbmF0aW9uIGFjY2VwdHMgbm8gdGVsZW1ldHJ5IHNpZ25hbHMsIHNvIHRoZSBjb2xsZWN0b3Igd291bGQgaGF2ZSBubyBwaXBlbGluZSB0byBidWlsZCAnICtcbiAgICAgICAgJ2FuZCB3b3VsZCBmYWlsIHRvIHN0YXJ0LiBOb3RlIHRoYXQgbWV0cmljcyBhbmQgbG9ncyBhcmUgT0ZGIGJ5IGRlZmF1bHQg4oCUIHdpdGggYHRyYWNlczogZmFsc2VgIHRoZSAnICtcbiAgICAgICAgJ2Rlc3RpbmF0aW9uIGhhcyBub3RoaW5nIGxlZnQgdW5sZXNzIHlvdSBhbHNvIHBhc3MgYG1ldHJpY3M6IHRydWVgIG9yIGBsb2dzOiB0cnVlYC4nLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIENPTExFQ1RPUl9DT05GSUdfU0NIRU1FICtcbiAgICAne3JlY2VpdmVyczoge290bHA6IHtwcm90b2NvbHM6ICcgK1xuICAgIC8vIEJvdW5kIHRvIGxvY2FsaG9zdDogdGhlIHJlY2VpdmVyIGV4aXN0cyBvbmx5IGZvciB0aGUgaW4tcHJvY2VzcyBTREsuIEJpbmRpbmcgaXQgd2lkZXIgd291bGQgZXhwb3NlXG4gICAgLy8gYW4gdW5hdXRoZW50aWNhdGVkIE9UTFAgZW5kcG9pbnQgb24gdGhlIHNhbmRib3gncyBuZXR3b3JrIGludGVyZmFjZS5cbiAgICAne2dycGM6IHtlbmRwb2ludDogXCJsb2NhbGhvc3Q6NDMxN1wifSwgaHR0cDoge2VuZHBvaW50OiBcImxvY2FsaG9zdDo0MzE4XCJ9fX19LCAnICtcbiAgICAncHJvY2Vzc29yczogJyArXG4gICAgQ09MTEVDVE9SX1BST0NFU1NPUlMgK1xuICAgICcsIGV4cG9ydGVyczogJyArXG4gICAgZXhwb3J0ZXIgK1xuICAgICcsIHNlcnZpY2U6IHt0ZWxlbWV0cnk6IHttZXRyaWNzOiB7bGV2ZWw6IG5vbmV9fSwgcGlwZWxpbmVzOiAnICtcbiAgICBwaXBlbGluZXMgK1xuICAgICd9fSdcbiAgKTtcbn1cblxuLyoqIFRoZSBMYW1iZGEgTm9kZSBsYXllciByZWdpc3RlcnMgb25seSBkbnMvaHR0cC9uZXQgdW5sZXNzIGV4cGxpY2l0bHkgY29uZmlndXJlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYW1iZGFTaWduYWxBY3RpdmF0aW9uKGxhbmd1YWdlOiBzdHJpbmcsIGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gIGNvbnN0IGVudiA9IHNpZ25hbEFjdGl2YXRpb24obGFuZ3VhZ2UsIGRlc3QpO1xuICBlbnYuT1RFTF9FWFBPUlRFUl9PVExQX1BST1RPQ09MID0gJ2h0dHAvcHJvdG9idWYnO1xuICBpZiAobGFuZ3VhZ2UgPT09ICdub2RlanMnKSB7XG4gICAgZW52Lk9URUxfTk9ERV9FTkFCTEVEX0lOU1RSVU1FTlRBVElPTlMgPSAnYW1xcGxpYixidW55YW4sY2Fzc2FuZHJhLWRyaXZlcixjb25uZWN0LGRhdGFsb2FkZXIsZG5zLGV4cHJlc3MsZnMsZ3JhcGhxbCxncnBjLGhhcGksaHR0cCxpb3JlZGlzLGthZmthanMsa25leCxrb2EsbWVtY2FjaGVkLG1vbmdvZGIsbW9uZ29vc2UsbXlzcWwsbXlzcWwyLG5lc3Rqcy1jb3JlLG5ldCxwZyxwaW5vLHJlZGlzLHJlc3RpZnksc29ja2V0LmlvLHVuZGljaSx3aW5zdG9uJztcbiAgfVxuICByZXR1cm4gZW52O1xufVxuIl19