eoapi-cdk 11.1.0 → 11.1.2

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
@@ -4300,7 +4300,7 @@
4300
4300
  "kind": "interface",
4301
4301
  "locationInModule": {
4302
4302
  "filename": "lib/database/index.ts",
4303
- "line": 413
4303
+ "line": 414
4304
4304
  },
4305
4305
  "name": "DatabaseParameters",
4306
4306
  "properties": [
@@ -4313,7 +4313,7 @@
4313
4313
  "immutable": true,
4314
4314
  "locationInModule": {
4315
4315
  "filename": "lib/database/index.ts",
4316
- "line": 429
4316
+ "line": 430
4317
4317
  },
4318
4318
  "name": "effectiveCacheSize",
4319
4319
  "type": {
@@ -4329,7 +4329,7 @@
4329
4329
  "immutable": true,
4330
4330
  "locationInModule": {
4331
4331
  "filename": "lib/database/index.ts",
4332
- "line": 439
4332
+ "line": 440
4333
4333
  },
4334
4334
  "name": "maintenanceWorkMem",
4335
4335
  "type": {
@@ -4345,7 +4345,7 @@
4345
4345
  "immutable": true,
4346
4346
  "locationInModule": {
4347
4347
  "filename": "lib/database/index.ts",
4348
- "line": 417
4348
+ "line": 418
4349
4349
  },
4350
4350
  "name": "maxConnections",
4351
4351
  "type": {
@@ -4361,7 +4361,7 @@
4361
4361
  "immutable": true,
4362
4362
  "locationInModule": {
4363
4363
  "filename": "lib/database/index.ts",
4364
- "line": 444
4364
+ "line": 445
4365
4365
  },
4366
4366
  "name": "maxLocksPerTransaction",
4367
4367
  "type": {
@@ -4377,7 +4377,7 @@
4377
4377
  "immutable": true,
4378
4378
  "locationInModule": {
4379
4379
  "filename": "lib/database/index.ts",
4380
- "line": 459
4380
+ "line": 460
4381
4381
  },
4382
4382
  "name": "randomPageCost",
4383
4383
  "type": {
@@ -4393,7 +4393,7 @@
4393
4393
  "immutable": true,
4394
4394
  "locationInModule": {
4395
4395
  "filename": "lib/database/index.ts",
4396
- "line": 454
4396
+ "line": 455
4397
4397
  },
4398
4398
  "name": "seqPageCost",
4399
4399
  "type": {
@@ -4410,7 +4410,7 @@
4410
4410
  "immutable": true,
4411
4411
  "locationInModule": {
4412
4412
  "filename": "lib/database/index.ts",
4413
- "line": 424
4413
+ "line": 425
4414
4414
  },
4415
4415
  "name": "sharedBuffers",
4416
4416
  "type": {
@@ -4426,7 +4426,7 @@
4426
4426
  "immutable": true,
4427
4427
  "locationInModule": {
4428
4428
  "filename": "lib/database/index.ts",
4429
- "line": 449
4429
+ "line": 450
4430
4430
  },
4431
4431
  "name": "tempBuffers",
4432
4432
  "type": {
@@ -4442,7 +4442,7 @@
4442
4442
  "immutable": true,
4443
4443
  "locationInModule": {
4444
4444
  "filename": "lib/database/index.ts",
4445
- "line": 434
4445
+ "line": 435
4446
4446
  },
4447
4447
  "name": "workMem",
4448
4448
  "type": {
@@ -5023,7 +5023,7 @@
5023
5023
  },
5024
5024
  "locationInModule": {
5025
5025
  "filename": "lib/database/index.ts",
5026
- "line": 293
5026
+ "line": 294
5027
5027
  },
5028
5028
  "name": "getParameters",
5029
5029
  "parameters": [
@@ -5179,7 +5179,7 @@
5179
5179
  "kind": "interface",
5180
5180
  "locationInModule": {
5181
5181
  "filename": "lib/database/index.ts",
5182
- "line": 333
5182
+ "line": 334
5183
5183
  },
5184
5184
  "name": "PgStacDatabaseProps",
5185
5185
  "properties": [
@@ -5193,7 +5193,7 @@
5193
5193
  "immutable": true,
5194
5194
  "locationInModule": {
5195
5195
  "filename": "lib/database/index.ts",
5196
- "line": 367
5196
+ "line": 368
5197
5197
  },
5198
5198
  "name": "addPgbouncer",
5199
5199
  "optional": true,
@@ -5211,7 +5211,7 @@
5211
5211
  "immutable": true,
5212
5212
  "locationInModule": {
5213
5213
  "filename": "lib/database/index.ts",
5214
- "line": 391
5214
+ "line": 392
5215
5215
  },
5216
5216
  "name": "bootstrapperLambdaFunctionOptions",
5217
5217
  "optional": true,
@@ -5229,7 +5229,7 @@
5229
5229
  "immutable": true,
5230
5230
  "locationInModule": {
5231
5231
  "filename": "lib/database/index.ts",
5232
- "line": 382
5232
+ "line": 383
5233
5233
  },
5234
5234
  "name": "customResourceProperties",
5235
5235
  "optional": true,
@@ -5253,7 +5253,7 @@
5253
5253
  "immutable": true,
5254
5254
  "locationInModule": {
5255
5255
  "filename": "lib/database/index.ts",
5256
- "line": 410
5256
+ "line": 411
5257
5257
  },
5258
5258
  "name": "forceBootstrap",
5259
5259
  "optional": true,
@@ -5271,7 +5271,7 @@
5271
5271
  "immutable": true,
5272
5272
  "locationInModule": {
5273
5273
  "filename": "lib/database/index.ts",
5274
- "line": 374
5274
+ "line": 375
5275
5275
  },
5276
5276
  "name": "pgbouncerInstanceProps",
5277
5277
  "optional": true,
@@ -5289,7 +5289,7 @@
5289
5289
  "immutable": true,
5290
5290
  "locationInModule": {
5291
5291
  "filename": "lib/database/index.ts",
5292
- "line": 339
5292
+ "line": 340
5293
5293
  },
5294
5294
  "name": "pgstacDbName",
5295
5295
  "optional": true,
@@ -5307,7 +5307,7 @@
5307
5307
  "immutable": true,
5308
5308
  "locationInModule": {
5309
5309
  "filename": "lib/database/index.ts",
5310
- "line": 360
5310
+ "line": 361
5311
5311
  },
5312
5312
  "name": "pgstacUsername",
5313
5313
  "optional": true,
@@ -5325,7 +5325,7 @@
5325
5325
  "immutable": true,
5326
5326
  "locationInModule": {
5327
5327
  "filename": "lib/database/index.ts",
5328
- "line": 346
5328
+ "line": 347
5329
5329
  },
5330
5330
  "name": "pgstacVersion",
5331
5331
  "optional": true,
@@ -5343,7 +5343,7 @@
5343
5343
  "immutable": true,
5344
5344
  "locationInModule": {
5345
5345
  "filename": "lib/database/index.ts",
5346
- "line": 353
5346
+ "line": 354
5347
5347
  },
5348
5348
  "name": "secretsPrefix",
5349
5349
  "optional": true,
@@ -6476,7 +6476,7 @@
6476
6476
  },
6477
6477
  "locationInModule": {
6478
6478
  "filename": "lib/stac-loader/index.ts",
6479
- "line": 490
6479
+ "line": 513
6480
6480
  },
6481
6481
  "parameters": [
6482
6482
  {
@@ -6502,7 +6502,7 @@
6502
6502
  "kind": "class",
6503
6503
  "locationInModule": {
6504
6504
  "filename": "lib/stac-loader/index.ts",
6505
- "line": 489
6505
+ "line": 512
6506
6506
  },
6507
6507
  "name": "StacItemLoader",
6508
6508
  "symbolId": "lib/stac-loader/index:StacItemLoader"
@@ -6521,7 +6521,7 @@
6521
6521
  "kind": "interface",
6522
6522
  "locationInModule": {
6523
6523
  "filename": "lib/stac-loader/index.ts",
6524
- "line": 504
6524
+ "line": 527
6525
6525
  },
6526
6526
  "name": "StacItemLoaderProps",
6527
6527
  "symbolId": "lib/stac-loader/index:StacItemLoaderProps"
@@ -6530,7 +6530,7 @@
6530
6530
  "assembly": "eoapi-cdk",
6531
6531
  "base": "constructs.Construct",
6532
6532
  "docs": {
6533
- "remarks": "The StacLoader creates a serverless, event-driven system for loading\nSTAC (SpatioTemporal Asset Catalog) objects into a PostgreSQL database with\nthe pgstac extension. This construct supports multiple ingestion pathways\nfor flexible STAC object loading.\n\n## Architecture Overview\n\nThis construct creates the following AWS resources:\n- **SNS Topic**: Entry point for STAC objects and S3 event notifications\n- **SQS Queue**: Buffers and batches messages before processing (60-second visibility timeout)\n- **Dead Letter Queue**: Captures failed loading attempts after 5 retries\n- **Lambda Function**: Python function that processes batches and inserts objects into pgstac\n\n## Data Flow\n\nThe loader supports two primary data ingestion patterns:\n\n### Direct STAC Object Publishing\n1. STAC objects (JSON) are published directly to the SNS topic in message bodies\n2. The SQS queue collects messages and batches them (up to {batchSize} objects or 1 minute window)\n3. The Lambda function receives batches, validates objects, and inserts into pgstac\n\n### S3 Event-Driven Loading\n1. An S3 bucket is configured to send notifications to the SNS topic when json files are created\n2. STAC objects are uploaded to S3 buckets as JSON/GeoJSON files\n3. S3 event notifications are sent to the SNS topic when objects are uploaded\n4. The Lambda function receives S3 events in the SQS message batch, fetches objects from S3, and loads into pgstac\n\n## Batching Behavior\n\nThe SQS-to-Lambda integration uses intelligent batching to optimize performance:\n\n- **Batch Size**: Lambda waits to receive up to `batchSize` messages (default: 500)\n- **Batching Window**: If fewer than `batchSize` messages are available, Lambda\n triggers after `maxBatchingWindow` minutes (default: 1 minute)\n- **Trigger Condition**: Lambda executes when EITHER condition is met first\n- **Concurrency**: Limited to `maxConcurrency` concurrent executions to prevent database overload\n- **Partial Failures**: Uses `reportBatchItemFailures` to retry only failed objects\n\nThis approach balances throughput (larger batches = fewer database connections)\nwith latency (time-based triggers prevent indefinite waiting).\n\n## Error Handling and Dead Letter Queue\n\nFailed messages are sent to the dead letter queue after 5 processing attempts.\n**Important**: This construct provides NO automated handling of dead letter queue\nmessages - monitoring, inspection, and reprocessing of failed objects is the\nresponsibility of the implementing application.\n\nConsider implementing:\n- CloudWatch alarms on dead letter queue depth\n- Manual or automated reprocessing workflows\n- Logging and alerting for failed objects\n- Regular cleanup of old dead letter messages (14-day retention)\n\n## Operational Characteristics\n\n- **Scalability**: Lambda scales automatically based on queue depth\n- **Reliability**: Dead letter queue captures failures for debugging\n- **Efficiency**: Batching optimizes database operations for high throughput\n- **Security**: Database credentials accessed via AWS Secrets Manager\n- **Observability**: CloudWatch logs retained for one week\n\n## Prerequisites\n\nBefore using this construct, ensure:\n- The pgstac database has collections loaded (objects require existing collection IDs)\n- Database credentials are stored in AWS Secrets Manager\n- The pgstac extension is properly installed and configured\n\n## Usage Example\n\n```typescript\n// Create database first\nconst database = new PgStacDatabase(this, 'Database', {\n pgstacVersion: '0.9.5'\n});\n\n// Create Object loader\nconst loader = new StacLoader(this, 'StacLoader', {\n pgstacDb: database,\n batchSize: 1000, // Process up to 1000 objects per batch\n maxBatchingWindowMinutes: 1, // Wait max 1 minute to fill batch\n lambdaTimeoutSeconds: 300 // Allow up to 300 seconds for database operations\n});\n\n// The topic ARN can be used by other services to publish objects\nnew CfnOutput(this, 'LoaderTopicArn', {\n value: loader.topic.topicArn\n});\n```\n\n## Direct Object Publishing\n\nExternal services can publish STAC objects directly to the topic:\n\n```bash\naws sns publish --topic-arn $STAC_LOAD_TOPIC --message '{\n \"id\": \"example-collection\",\n \"type\": \"Collection\",\n \"title\": \"Example Collection\",\n \"description\": \"An example collection\",\n \"license\": \"proprietary\",\n \"extent\": {\n \"spatial\": {\"bbox\": [[-180, -90, 180, 90]]},\n \"temporal\": {\"interval\": [[null, null]]}\n },\n \"stac_version\": \"1.1.0\",\n \"links\": []\n}'\n\naws sns publish --topic-arn $STAC_LOAD_TOPIC --message '{\n \"type\": \"Feature\",\n \"stac_version\": \"1.0.0\",\n \"id\": \"example-item\",\n \"properties\": {\"datetime\": \"2021-01-01T00:00:00Z\"},\n \"geometry\": {\"type\": \"Polygon\", \"coordinates\": [...]},\n \"collection\": \"example-collection\"\n}'\n\n\n```\n\n## S3 Event Configuration\n\nTo enable S3 event-driven loading, configure S3 bucket notifications to send\nevents to the SNS topic when STAC objects (.json or .geojson files) are uploaded:\n\n```typescript\n// Configure S3 bucket to send notifications to the loader topic\nbucket.addEventNotification(\n s3.EventType.OBJECT_CREATED,\n new s3n.SnsDestination(loader.topic),\n { suffix: '.json' }\n);\n\nbucket.addEventNotification(\n s3.EventType.OBJECT_CREATED,\n new s3n.SnsDestination(loader.topic),\n { suffix: '.geojson' }\n);\n```\n\nWhen STAC objects are uploaded to the configured S3 bucket, the loader will:\n1. Receive S3 event notifications via SNS\n2. Fetch the STAC JSON from S3\n3. Validate and load the objects into the pgstac database\n\n## Monitoring and Troubleshooting\n\n- Monitor Lambda logs: `/aws/lambda/{FunctionName}`\n- **Dead Letter Queue**: Check for failed objects - **no automated handling provided**\n- Use batch objects failure reporting for partial batch processing\n- CloudWatch metrics available for queue depth and Lambda performance\n\n### Dead Letter Queue Management\n\nApplications must implement their own dead letter queue monitoring:\n\n```typescript\n// Example: CloudWatch alarm for dead letter queue depth\nnew cloudwatch.Alarm(this, 'DeadLetterAlarm', {\n metric: loader.deadLetterQueue.metricApproximateNumberOfVisibleMessages(),\n threshold: 1,\n evaluationPeriods: 1\n});\n\n// Example: Lambda to reprocess dead letter messages\nconst reprocessFunction = new lambda.Function(this, 'Reprocess', {\n // Implementation to fetch and republish failed messages\n});\n```",
6533
+ "remarks": "The StacLoader creates a serverless, event-driven system for loading\nSTAC (SpatioTemporal Asset Catalog) objects into a PostgreSQL database with\nthe pgstac extension. This construct supports multiple ingestion pathways\nfor flexible STAC object loading.\n\n## Architecture Overview\n\nThis construct creates the following AWS resources:\n- **SNS Topic**: Entry point for STAC objects and S3 event notifications\n- **SQS Queue**: Buffers and batches messages before processing (60-second visibility timeout)\n- **Dead Letter Queue**: Captures failed loading attempts after 5 retries\n- **Lambda Function**: Python function that processes batches and inserts objects into pgstac\n\n## Data Flow\n\nThe loader supports two primary data ingestion patterns:\n\n### Direct STAC Object Publishing\n1. STAC objects (JSON) are published directly to the SNS topic in message bodies\n2. The SQS queue collects messages and batches them (up to {batchSize} objects or 1 minute window)\n3. The Lambda function receives batches, validates objects, and inserts into pgstac\n\n### S3 Event-Driven Loading\n1. An S3 bucket is configured to send notifications to the SNS topic when json files are created\n2. STAC objects are uploaded to S3 buckets as JSON/GeoJSON files\n3. S3 event notifications are sent to the SNS topic when objects are uploaded\n4. The Lambda function receives S3 events in the SQS message batch, fetches objects from S3, and loads into pgstac\n\n## Batching Behavior\n\nThe SQS-to-Lambda integration uses intelligent batching to optimize performance:\n\n- **Batch Size**: Lambda waits to receive up to `batchSize` messages (default: 500)\n- **Batching Window**: If fewer than `batchSize` messages are available, Lambda\n triggers after `maxBatchingWindow` minutes (default: 1 minute)\n- **Trigger Condition**: Lambda executes when EITHER condition is met first\n- **Concurrency**: Limited to `maxConcurrency` concurrent executions to prevent database overload\n- **Partial Failures**: Uses `reportBatchItemFailures` to retry only failed objects\n\nThis approach balances throughput (larger batches = fewer database connections)\nwith latency (time-based triggers prevent indefinite waiting).\n\n## Message Ordering and Deduplication\n\n**Standard Queues**: This construct uses standard (non-FIFO) SNS topics and SQS queues,\nwhich means messages are **not guaranteed to arrive in order**. Multiple messages\nwith the same STAC item or collection ID may arrive in any sequence.\n\n**Timestamp-Based Deduplication**: Within each batch, the loader uses SNS timestamps\nto ensure only the newest version of each item/collection is ingested:\n\n- When multiple messages have the same item/collection ID in a batch, the loader\n compares their SNS Timestamps (automatically set when messages are published)\n- Only the message with the **newest timestamp** is kept for database insertion\n- Older versions are discarded and logged at the debug level\n- This guarantees that within a batch, the chronologically latest update wins\n\n**Important Limitations**:\n- Deduplication only occurs **within a single batch** - messages in different batches\n are not compared across batches\n- The database upsert operation will update existing records, so later batches can\n still overwrite earlier batches regardless of timestamps\n- For guaranteed ordering across all messages, consider implementing version tracking\n in your STAC metadata and database constraints\n\n## Error Handling and Dead Letter Queue\n\nFailed messages are sent to the dead letter queue after 5 processing attempts.\n**Important**: This construct provides NO automated handling of dead letter queue\nmessages - monitoring, inspection, and reprocessing of failed objects is the\nresponsibility of the implementing application.\n\nConsider implementing:\n- CloudWatch alarms on dead letter queue depth\n- Manual or automated reprocessing workflows\n- Logging and alerting for failed objects\n- Regular cleanup of old dead letter messages (14-day retention)\n\n## Operational Characteristics\n\n- **Scalability**: Lambda scales automatically based on queue depth\n- **Reliability**: Dead letter queue captures failures for debugging\n- **Efficiency**: Batching optimizes database operations for high throughput\n- **Security**: Database credentials accessed via AWS Secrets Manager\n- **Observability**: CloudWatch logs retained for one week\n\n## Prerequisites\n\nBefore using this construct, ensure:\n- The pgstac database has collections loaded (objects require existing collection IDs)\n- Database credentials are stored in AWS Secrets Manager\n- The pgstac extension is properly installed and configured\n\n## Usage Example\n\n```typescript\n// Create database first\nconst database = new PgStacDatabase(this, 'Database', {\n pgstacVersion: '0.9.5'\n});\n\n// Create Object loader\nconst loader = new StacLoader(this, 'StacLoader', {\n pgstacDb: database,\n batchSize: 1000, // Process up to 1000 objects per batch\n maxBatchingWindowMinutes: 1, // Wait max 1 minute to fill batch\n lambdaTimeoutSeconds: 300 // Allow up to 300 seconds for database operations\n});\n\n// The topic ARN can be used by other services to publish objects\nnew CfnOutput(this, 'LoaderTopicArn', {\n value: loader.topic.topicArn\n});\n```\n\n## Direct Object Publishing\n\nExternal services can publish STAC objects directly to the topic:\n\n```bash\naws sns publish --topic-arn $STAC_LOAD_TOPIC --message '{\n \"id\": \"example-collection\",\n \"type\": \"Collection\",\n \"title\": \"Example Collection\",\n \"description\": \"An example collection\",\n \"license\": \"proprietary\",\n \"extent\": {\n \"spatial\": {\"bbox\": [[-180, -90, 180, 90]]},\n \"temporal\": {\"interval\": [[null, null]]}\n },\n \"stac_version\": \"1.1.0\",\n \"links\": []\n}'\n\naws sns publish --topic-arn $STAC_LOAD_TOPIC --message '{\n \"type\": \"Feature\",\n \"stac_version\": \"1.0.0\",\n \"id\": \"example-item\",\n \"properties\": {\"datetime\": \"2021-01-01T00:00:00Z\"},\n \"geometry\": {\"type\": \"Polygon\", \"coordinates\": [...]},\n \"collection\": \"example-collection\"\n}'\n\n\n```\n\n## S3 Event Configuration\n\nTo enable S3 event-driven loading, configure S3 bucket notifications to send\nevents to the SNS topic when STAC objects (.json or .geojson files) are uploaded:\n\n```typescript\n// Configure S3 bucket to send notifications to the loader topic\nbucket.addEventNotification(\n s3.EventType.OBJECT_CREATED,\n new s3n.SnsDestination(loader.topic),\n { suffix: '.json' }\n);\n\nbucket.addEventNotification(\n s3.EventType.OBJECT_CREATED,\n new s3n.SnsDestination(loader.topic),\n { suffix: '.geojson' }\n);\n```\n\nWhen STAC objects are uploaded to the configured S3 bucket, the loader will:\n1. Receive S3 event notifications via SNS\n2. Fetch the STAC JSON from S3\n3. Validate and load the objects into the pgstac database\n\n## Monitoring and Troubleshooting\n\n- Monitor Lambda logs: `/aws/lambda/{FunctionName}`\n- **Dead Letter Queue**: Check for failed objects - **no automated handling provided**\n- Use batch objects failure reporting for partial batch processing\n- CloudWatch metrics available for queue depth and Lambda performance\n\n### Dead Letter Queue Management\n\nApplications must implement their own dead letter queue monitoring:\n\n```typescript\n// Example: CloudWatch alarm for dead letter queue depth\nnew cloudwatch.Alarm(this, 'DeadLetterAlarm', {\n metric: loader.deadLetterQueue.metricApproximateNumberOfVisibleMessages(),\n threshold: 1,\n evaluationPeriods: 1\n});\n\n// Example: Lambda to reprocess dead letter messages\nconst reprocessFunction = new lambda.Function(this, 'Reprocess', {\n // Implementation to fetch and republish failed messages\n});\n```",
6534
6534
  "stability": "experimental",
6535
6535
  "summary": "AWS CDK Construct for STAC Object Loading Infrastructure."
6536
6536
  },
@@ -6541,7 +6541,7 @@
6541
6541
  },
6542
6542
  "locationInModule": {
6543
6543
  "filename": "lib/stac-loader/index.ts",
6544
- "line": 382
6544
+ "line": 405
6545
6545
  },
6546
6546
  "parameters": [
6547
6547
  {
@@ -6567,7 +6567,7 @@
6567
6567
  "kind": "class",
6568
6568
  "locationInModule": {
6569
6569
  "filename": "lib/stac-loader/index.ts",
6570
- "line": 330
6570
+ "line": 353
6571
6571
  },
6572
6572
  "name": "StacLoader",
6573
6573
  "properties": [
@@ -6580,7 +6580,7 @@
6580
6580
  "immutable": true,
6581
6581
  "locationInModule": {
6582
6582
  "filename": "lib/stac-loader/index.ts",
6583
- "line": 367
6583
+ "line": 390
6584
6584
  },
6585
6585
  "name": "deadLetterQueue",
6586
6586
  "type": {
@@ -6596,7 +6596,7 @@
6596
6596
  "immutable": true,
6597
6597
  "locationInModule": {
6598
6598
  "filename": "lib/stac-loader/index.ts",
6599
- "line": 380
6599
+ "line": 403
6600
6600
  },
6601
6601
  "name": "lambdaFunction",
6602
6602
  "type": {
@@ -6612,7 +6612,7 @@
6612
6612
  "immutable": true,
6613
6613
  "locationInModule": {
6614
6614
  "filename": "lib/stac-loader/index.ts",
6615
- "line": 350
6615
+ "line": 373
6616
6616
  },
6617
6617
  "name": "queue",
6618
6618
  "type": {
@@ -6628,7 +6628,7 @@
6628
6628
  "immutable": true,
6629
6629
  "locationInModule": {
6630
6630
  "filename": "lib/stac-loader/index.ts",
6631
- "line": 340
6631
+ "line": 363
6632
6632
  },
6633
6633
  "name": "topic",
6634
6634
  "type": {
@@ -7929,6 +7929,6 @@
7929
7929
  "symbolId": "lib/titiler-pgstac-api/index:TitilerPgstacApiLambdaRuntimeProps"
7930
7930
  }
7931
7931
  },
7932
- "version": "11.1.0",
7933
- "fingerprint": "PB0znlqI7J9b7fcAG703zhdjxr+oQRzwN0XXBv02uJ4="
7932
+ "version": "11.1.2",
7933
+ "fingerprint": "VQA/ipYk12rrhI4y9Y/QN0T5B7EMTdiLJPbrePBAfPA="
7934
7934
  }
@@ -158,5 +158,5 @@ class BastionHost extends constructs_1.Construct {
158
158
  }
159
159
  exports.BastionHost = BastionHost;
160
160
  _a = JSII_RTTI_SYMBOL_1;
161
- BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "11.1.0" };
161
+ BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "11.1.2" };
162
162
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQU1xQjtBQUNyQiwyQ0FBdUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpR0c7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUztJQUd4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNyRCxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUscUJBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2pELFlBQVksRUFBRSxHQUFHLFNBQVMsZUFBZTtZQUN6QyxZQUFZLEVBQUUscUJBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUMvQixxQkFBRyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFDckMscUJBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0QjtZQUNELFlBQVksRUFBRSxxQkFBRyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0MsVUFBVSxFQUFFLHFCQUFHLENBQUMscUJBQXFCLENBQUMsY0FBYztnQkFDcEQsT0FBTyxFQUFFLHFCQUFHLENBQUMsa0JBQWtCLENBQUMsTUFBTTthQUN2QyxDQUFDO1lBQ0YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLHlCQUF5QixFQUFFLElBQUk7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ3BCLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLHFCQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7Z0JBQ3BDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQy9CLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFDdEMscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUNsQixvQ0FBb0MsQ0FDckMsQ0FBQztRQUVGLGtDQUFrQztRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ2pDLHFCQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDbkIscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ2pDLFlBQVksQ0FDYixDQUFDO1FBQ0osQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixPQUFPLEVBQUU7Z0JBQ1AsZUFBZTtnQkFDZiwrQkFBK0I7Z0JBQy9CLGVBQWU7YUFDaEI7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ3hDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDL0IsVUFBVSxFQUFFLEdBQUcsU0FBUyxjQUFjO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDL0MsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1lBQ3JDLFVBQVUsRUFBRSxHQUFHLFNBQVMscUJBQXFCO1NBQzlDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsaUNBQWlDLEVBQUU7WUFDckQsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCO1lBQzFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsa0JBQWtCO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBekVILGtDQTBFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFN0YWNrLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19yZHMgYXMgcmRzLFxuICBDZm5PdXRwdXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBUaGUgZGF0YWJhc2UgaXMgbG9jYXRlZCBpbiBhbiBpc29sYXRlZCBzdWJuZXQsIG1lYW5pbmcgdGhhdCBpdCBpcyBub3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBwdWJsaWMgaW50ZXJuZXQuIEFzIHN1Y2gsIHRvIGludGVyYWN0IHdpdGggdGhlIGRhdGFiYXNlIGRpcmVjdGx5LCBhIHVzZXIgbXVzdCB0dW5uZWwgdGhyb3VnaCBhIGJhc3Rpb24gaG9zdC5cbiAqXG4gKiAjIyMgQ29uZmlndXJpbmdcbiAqXG4gKiBUaGlzIGNvZGViYXNlIGNvbnRyb2xzIF93aG9fIGlzIGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGUgYmFzdGlvbiBob3N0LiBUaGlzIHJlcXVpcmVzIHR3byBzdGVwczpcbiAqXG4gKiAxLiBBZGRpbmcgdGhlIElQIGFkZHJlc3MgZnJvbSB3aGljaCB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gdGhlIGBpcHY0QWxsb3dsaXN0YCBhcnJheVxuICogMS4gQ3JlYXRpbmcgYSBiYXN0aW9uIGhvc3Qgc3lzdGVtIHVzZXIgYnkgYWRkaW5nIHRoZSB1c2VyJ3MgY29uZmlndXJhdGlvbiBpbmZvcm0gdG8gYHVzZXJkYXRhLnlhbWxgXG4gKlxuICogIyMjIyBBZGRpbmcgYW4gSVAgYWRkcmVzcyB0byB0aGUgYGlwdjRBbGxvd2xpc3RgIGFycmF5XG4gKlxuICogVGhlIGBCYXN0aW9uSG9zdGAgY29uc3RydWN0IHRha2VzIGluIGFuIGBpcHY0QWxsb3dsaXN0YCBhcnJheSBhcyBhbiBhcmd1bWVudC4gRmluZCB5b3VyIElQIGFkZHJlc3MgKGVnIGBjdXJsIGFwaS5pcGlmeS5vcmdgKSBhbmQgYWRkIHRoYXQgdG8gdGhlIGFycmF5IGFsb25nIHdpdGggdGhlIHRyYWlsaW5nIENJRFIgYmxvY2sgKGxpa2VseSBgLzMyYCB0byBpbmRpY2F0ZSB0aGF0IHlvdSBhcmUgYWRkaW5nIGEgc2luZ2xlIElQIGFkZHJlc3MpLlxuICpcbiAqICMjIyMgQ3JlYXRpbmcgYSB1c2VyIHZpYSBgdXNlcmRhdGEueWFtbGBcbiAqXG4gKiBBZGQgYW4gZW50cnkgdG8gdGhlIGB1c2Vyc2AgYXJyYXkgd2l0aCBhIHVzZXJuYW1lIChsaWtlbHkgbWF0Y2hpbmcgeW91ciBsb2NhbCBzeXN0ZW1zIHVzZXJuYW1lLCB3aGljaCB5b3UgY2FuIGdldCBieSBydW5uaW5nIHRoZSBgd2hvYW1pYCBjb21tYW5kIGluIHlvdXIgdGVybWluYWwpIGFuZCBhIHB1YmxpYyBrZXkgKGxpa2VseSB5b3VyIGRlZmF1bHQgcHVibGljIGtleSwgd2hpY2ggeW91IGNhbiBnZXQgYnkgcnVubmluZyBgY2F0IH4vLnNzaC9pZF8qLnB1YmAgaW4geW91ciB0ZXJtaW5hbCkuXG4gKlxuICogIyMjIyBUaXBzICYgVHJpY2tzIHdoZW4gdXNpbmcgdGhlIEJhc3Rpb24gSG9zdFxuICpcbiAqICoqQ29ubmVjdGluZyB0byBSRFMgSW5zdGFuY2UgdmlhIFNTTSoqXG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgXFxcbiAqIC0tZG9jdW1lbnQtbmFtZSBBV1MtU3RhcnRQb3J0Rm9yd2FyZGluZ1Nlc3Npb25Ub1JlbW90ZUhvc3QgXFxcbiAqIC0tcGFyYW1ldGVycyAne1xuICogXCJob3N0XCI6IFtcbiAqIFwiZXhhbXBsZS1kYi5jNWFiY2RlZmdoaWoudXMtd2VzdC0yLnJkcy5hbWF6b25hd3MuY29tXCJcbiAqIF0sXG4gKiBcInBvcnROdW1iZXJcIjogW1xuICogXCI1NDMyXCJcbiAqIF0sXG4gKiBcImxvY2FsUG9ydE51bWJlclwiOiBbXG4gKiBcIjk5OTlcIlxuICogXVxuICogfScgXFxcbiAqIC0tcHJvZmlsZSAkQVdTX1BST0ZJTEVcbiAqIGBgYFxuICpcbiAqIGBgYHNoXG4gKiBwc3FsIC1oIGxvY2FsaG9zdCAtcCA5OTk5ICMgY29udGludWUgYWRkaW5nIHVzZXJuYW1lICgtVSkgYW5kIGRiICgtZCkgaGVyZS4uLlxuICogYGBgXG4gKlxuICogQ29ubmVjdCBkaXJlY3RseSB0byBCYXN0aW9uIEhvc3Q6XG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgLS1wcm9maWxlICRBV1NfUFJPRklMRVxuICogYGBgXG4gKlxuICogKipTZXR0aW5nIHVwIGFuIFNTSCB0dW5uZWwqKlxuICpcbiAqIEluIHlvdXIgYH4vLnNzaC9jb25maWdgIGZpbGUsIGFkZCBhbiBlbnRyeSBsaWtlOlxuICpcbiAqIGBgYFxuICogSG9zdCBkYi10dW5uZWxcbiAqIEhvc3RuYW1lIHt0aGUtYmFzdGlvbi1ob3N0LWFkZHJlc3N9XG4gKiBMb2NhbEZvcndhcmQgOTk5OSB7dGhlLWRiLWhvc3RuYW1lfTo1NDMyXG4gKiBgYGBcbiAqXG4gKiBUaGVuIGEgdHVubmVsIGNhbiBiZSBvcGVuZWQgdmlhOlxuICpcbiAqIGBgYFxuICogc3NoIC1OIGRiLXR1bm5lbFxuICogYGBgXG4gKlxuICogQW5kIGEgY29ubmVjdGlvbiB0byB0aGUgREIgY2FuIGJlIG1hZGUgdmlhOlxuICpcbiAqIGBgYFxuICogcHNxbCAtaCAxMjcuMC4wLjEgLXAgOTk5OSAtVSB7dXNlcm5hbWV9IC1kIHtkYXRhYmFzZX1cbiAqIGBgYFxuICpcbiAqICoqSGFuZGxpbmcgYFJFTU9URSBIT1NUIElERU5USUZJQ0FUSU9OIEhBUyBDSEFOR0VEIWAgZXJyb3IqKlxuICpcbiAqIElmIHlvdSd2ZSByZWRlcGxveWVkIGEgYmFzdGlvbiBob3N0IHRoYXQgeW91J3ZlIHByZXZpb3VzbHkgY29ubmVjdGVkIHRvLCB5b3UgbWF5IHNlZSBhbiBlcnJvciBsaWtlOlxuICpcbiAqIGBgYFxuICogQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBcbiAqIEAgICAgV0FSTklORzogUkVNT1RFIEhPU1QgSURFTlRJRklDQVRJT04gSEFTIENIQU5HRUQhICAgICBAXG4gKiBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFxuICogSVQgSVMgUE9TU0lCTEUgVEhBVCBTT01FT05FIElTIERPSU5HIFNPTUVUSElORyBOQVNUWSFcbiAqIFNvbWVvbmUgY291bGQgYmUgZWF2ZXNkcm9wcGluZyBvbiB5b3UgcmlnaHQgbm93IChtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2spIVxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGEgaG9zdCBrZXkgaGFzIGp1c3QgYmVlbiBjaGFuZ2VkLlxuICogVGhlIGZpbmdlcnByaW50IGZvciB0aGUgRUNEU0Ega2V5IHNlbnQgYnkgdGhlIHJlbW90ZSBob3N0IGlzXG4gKiBTSEEyNTY6bVBueEFPWFRwYjA2UEZnSTFRYzhUTVEyZTliN2dvVTh5Mk5kUzVoeklyOC5cbiAqIFBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IuXG4gKiBBZGQgY29ycmVjdCBob3N0IGtleSBpbiAvVXNlcnMvdXNlcm5hbWUvLnNzaC9rbm93bl9ob3N0cyB0byBnZXQgcmlkIG9mIHRoaXMgbWVzc2FnZS5cbiAqIE9mZmVuZGluZyBFQ0RTQSBrZXkgaW4gL1VzZXJzL3VzZXJuYW1lLy5zc2gva25vd25faG9zdHM6MjhcbiAqIEVDRFNBIGhvc3Qga2V5IGZvciBlYzItMTItMzQtNTYtNzg5LnVzLXdlc3QtMi5jb21wdXRlLmFtYXpvbmF3cy5jb20gaGFzIGNoYW5nZWQgYW5kIHlvdSBoYXZlIHJlcXVlc3RlZCBzdHJpY3QgY2hlY2tpbmcuXG4gKiBIb3N0IGtleSB2ZXJpZmljYXRpb24gZmFpbGVkLlxuICogYGBgXG4gKlxuICogVGhpcyBpcyBkdWUgdG8gdGhlIHNlcnZlcidzIGZpbmdlcnByaW50IGNoYW5naW5nLiBXZSBjYW4gc2NydWIgdGhlIGZpbmdlcnByaW50IGZyb20gb3VyIHN5c3RlbSB3aXRoIGEgY29tbWFuZCBsaWtlOlxuICpcbiAqIGBgYFxuICogc3NoLWtleWdlbiAtUiAxMi4zNC41Ni43ODlcbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc3Rpb25Ib3N0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzdGlvbkhvc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7IHN0YWNrTmFtZSB9ID0gU3RhY2sub2YodGhpcyk7XG5cbiAgICAvLyBCdWlsZCBlYzIgaW5zdGFuY2VcbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBcImJhc3Rpb24taG9zdFwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDIH0sXG4gICAgICBpbnN0YW5jZU5hbWU6IGAke3N0YWNrTmFtZX0gYmFzdGlvbiBob3N0YCxcbiAgICAgIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZS5vZihcbiAgICAgICAgZWMyLkluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFNF9HUkFWSVRPTixcbiAgICAgICAgZWMyLkluc3RhbmNlU2l6ZS5OQU5PXG4gICAgICApLFxuICAgICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4KHtcbiAgICAgICAgZ2VuZXJhdGlvbjogZWMyLkFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BTUFaT05fTElOVVhfMixcbiAgICAgICAgY3B1VHlwZTogZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5BUk1fNjQsXG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIHVzZXJEYXRhQ2F1c2VzUmVwbGFjZW1lbnQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBBc3NpZ24gZWxhc3RpYyBJUFxuICAgIGlmIChwcm9wcy5jcmVhdGVFbGFzdGljSXAgPz8gdHJ1ZSkge1xuICAgICAgbmV3IGVjMi5DZm5FSVAodGhpcywgXCJJUFwiLCB7XG4gICAgICAgIGluc3RhbmNlSWQ6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgdGFnczogW3sga2V5OiBcIk5hbWVcIiwgdmFsdWU6IHN0YWNrTmFtZSB9XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFsbG93IGJhc3Rpb24gaG9zdCB0byBjb25uZWN0IHRvIGRiXG4gICAgdGhpcy5pbnN0YW5jZS5jb25uZWN0aW9ucy5hbGxvd1RvKFxuICAgICAgcHJvcHMuZGIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF0sXG4gICAgICBlYzIuUG9ydC50Y3AoNTQzMiksXG4gICAgICBcIkFsbG93IGNvbm5lY3Rpb24gZnJvbSBiYXN0aW9uIGhvc3RcIlxuICAgICk7XG5cbiAgICAvLyBBbGxvdyBJUCBhY2Nlc3MgdG8gYmFzdGlvbiBob3N0XG4gICAgZm9yIChjb25zdCBpcHY0IG9mIHByb3BzLmlwdjRBbGxvd2xpc3QpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgICBlYzIuUGVlci5pcHY0KGlwdjQpLFxuICAgICAgICBlYzIuUG9ydC50Y3AocHJvcHMuc3NoUG9ydCB8fCAyMiksXG4gICAgICAgIFwiU1NIIEFjY2Vzc1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEludGVncmF0ZSB3aXRoIFNTTVxuICAgIHRoaXMuaW5zdGFuY2UuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJzc21tZXNzYWdlczoqXCIsXG4gICAgICAgICAgXCJzc206VXBkYXRlSW5zdGFuY2VJbmZvcm1hdGlvblwiLFxuICAgICAgICAgIFwiZWMybWVzc2FnZXM6KlwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtaWQtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9LWluc3RhbmNlLWlkYCxcbiAgICB9KTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtcHVibGljLWlwLW91dHB1dFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0lwLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfS1pbnN0YW5jZS1wdWJsaWMtaXBgLFxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJpbnN0YW5jZS1wdWJsaWMtZG5zLW5hbWUtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0tcHVibGljLWRucy1uYW1lYCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc3Rpb25Ib3N0UHJvcHMge1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICByZWFkb25seSBkYjogcmRzLklEYXRhYmFzZUluc3RhbmNlO1xuICByZWFkb25seSB1c2VyRGF0YTogZWMyLlVzZXJEYXRhO1xuICByZWFkb25seSBpcHY0QWxsb3dsaXN0OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgc3NoUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgYW4gZWxhc3RpYyBJUCBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhlIGJhc3Rpb24gaG9zdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUVsYXN0aWNJcD86IGJvb2xlYW47XG59XG4iXX0=
@@ -40,6 +40,11 @@ export interface PgBouncerProps {
40
40
  * EC2 instance options
41
41
  */
42
42
  instanceProps?: Partial<ec2.InstanceProps>;
43
+ /**
44
+ * Optional reference to the database bootstrapper CustomResource.
45
+ * When provided, the health check will re-trigger if the database setup changes.
46
+ */
47
+ databaseBootstrapper?: CustomResource;
43
48
  }
44
49
  export declare class PgBouncer extends Construct {
45
50
  readonly instance: ec2.Instance;
@@ -138,8 +138,10 @@ class PgBouncer extends constructs_1.Construct {
138
138
  serviceToken: healthCheckFunction.functionArn,
139
139
  properties: {
140
140
  InstanceId: this.instance.instanceId,
141
- // Add timestamp to force re-execution on stack updates
142
- Timestamp: new Date().toISOString(),
141
+ // Reference the database bootstrapper to re-trigger on database changes
142
+ ...(props.databaseBootstrapper && {
143
+ DatabaseBootstrapperRef: props.databaseBootstrapper.ref,
144
+ }),
143
145
  },
144
146
  });
145
147
  // Ensure health check runs after instance is created but before secret update
@@ -160,4 +162,4 @@ class PgBouncer extends constructs_1.Construct {
160
162
  }
161
163
  }
162
164
  exports.PgBouncer = PgBouncer;
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGdCb3VuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUGdCb3VuY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQVFxQjtBQUNyQiwyQ0FBdUM7QUFFdkMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQW9EN0IsTUFBYSxTQUFVLFNBQVEsc0JBQVM7SUFPdEMsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxnRkFBZ0Y7SUFDaEYsa0NBQWtDO0lBRTFCLHlCQUF5QixDQUMvQixnQkFBd0I7UUFFeEIsNEVBQTRFO1FBQzVFLGdFQUFnRTtRQUNoRSxPQUFPO1lBQ0wsUUFBUSxFQUFFLGFBQWE7WUFDdkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLENBQUM7WUFDbEIsV0FBVyxFQUFFLENBQUM7WUFDZCxlQUFlLEVBQUUsQ0FBQztZQUNsQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLEVBQUU7WUFDdkMsa0JBQWtCLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRTtTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixrQ0FBa0M7UUFFbEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzNELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDdkIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxNQUFNLGVBQWUsR0FBbUM7WUFDdEQsR0FBRyxzQkFBc0I7WUFDekIsR0FBRyxLQUFLLENBQUMsZUFBZTtTQUN6QixDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM5QyxXQUFXLEVBQ1QsdUVBQXVFO1lBQ3pFLFNBQVMsRUFBRSxJQUFJLHFCQUFHLENB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QUE0QztRQUU1QyxNQUFNLGNBQWMsR0FBRyxxQkFBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUvQywwREFBMEQ7UUFDMUQsY0FBYyxDQUFDLFdBQVcsQ0FDeEIscUJBQXFCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUN2RCxpQkFBaUIsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUMvQyxvQkFBb0IsR0FBRyxlQUFlLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFDckQsMEJBQTBCLEdBQUcsZUFBZSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQ2hFLDRCQUE0QixHQUFHLGVBQWUsQ0FBQyxlQUFlLEdBQUcsR0FBRyxFQUNwRSx3QkFBd0IsR0FBRyxlQUFlLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFDNUQsNEJBQTRCLEdBQUcsZUFBZSxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQ3BFLCtCQUErQjtZQUM3QixlQUFlLENBQUMsa0JBQWtCO1lBQ2xDLEdBQUcsRUFDTCw2QkFBNkIsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUN0RSwrQkFBK0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUMzRSxDQUFDO1FBRUYsMEJBQTBCO1FBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUF6T0QsOEJBeU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3NfbGFtYmRhIGFzIGxhbWJkYSxcbiAgYXdzX3NlY3JldHNtYW5hZ2VyIGFzIHNlY3JldHNtYW5hZ2VyLFxuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG4gIFN0YWNrLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG4vLyB1c2VkIHRvIHBvcHVsYXRlIHBnYm91bmNlciBjb25maWc6XG4vLyBzZWUgaHR0cHM6Ly93d3cucGdib3VuY2VyLm9yZy9jb25maWcuaHRtbCBmb3IgZGV0YWlsc1xuZXhwb3J0IGludGVyZmFjZSBQZ0JvdW5jZXJDb25maWdQcm9wcyB7XG4gIHBvb2xNb2RlPzogXCJ0cmFuc2FjdGlvblwiIHwgXCJzZXNzaW9uXCIgfCBcInN0YXRlbWVudFwiO1xuICBtYXhDbGllbnRDb25uPzogbnVtYmVyO1xuICBkZWZhdWx0UG9vbFNpemU/OiBudW1iZXI7XG4gIG1pblBvb2xTaXplPzogbnVtYmVyO1xuICByZXNlcnZlUG9vbFNpemU/OiBudW1iZXI7XG4gIHJlc2VydmVQb29sVGltZW91dD86IG51bWJlcjtcbiAgbWF4RGJDb25uZWN0aW9ucz86IG51bWJlcjtcbiAgbWF4VXNlckNvbm5lY3Rpb25zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBnQm91bmNlclByb3BzIHtcbiAgLyoqXG4gICAqIFZQQyB0byBkZXBsb3kgUGdCb3VuY2VyIGludG9cbiAgICovXG4gIHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBSRFMgaW5zdGFuY2UgdG8gY29ubmVjdCB0b1xuICAgKi9cbiAgZGF0YWJhc2U6IHtcbiAgICBjb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zO1xuICAgIHNlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldDtcbiAgfTtcblxuICAvKipcbiAgICogTWF4aW11bSBjb25uZWN0aW9ucyBzZXR0aW5nIGZvciB0aGUgZGF0YWJhc2UuXG4gICAqIFBnQm91bmNlciB3aWxsIHVzZSAxMCBmZXdlciB0aGFuIHRoaXMgdmFsdWUuXG4gICAqL1xuICBkYk1heENvbm5lY3Rpb25zOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVwbG95IGluIHB1YmxpYyBzdWJuZXRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHVzZVB1YmxpY1N1Ym5ldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBnQm91bmNlciBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICovXG4gIHBnQm91bmNlckNvbmZpZz86IFBnQm91bmNlckNvbmZpZ1Byb3BzO1xuXG4gIC8qKlxuICAgKiBFQzIgaW5zdGFuY2Ugb3B0aW9uc1xuICAgKi9cbiAgaW5zdGFuY2VQcm9wcz86IFBhcnRpYWw8ZWMyLkluc3RhbmNlUHJvcHM+O1xufVxuXG5leHBvcnQgY2xhc3MgUGdCb3VuY2VyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlOiBlYzIuSW5zdGFuY2U7XG4gIHB1YmxpYyByZWFkb25seSBwZ2JvdW5jZXJTZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLlNlY3JldDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA6IGVjMi5TZWN1cml0eUdyb3VwO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0VXBkYXRlQ29tcGxldGU6IEN1c3RvbVJlc291cmNlO1xuICBwdWJsaWMgcmVhZG9ubHkgaGVhbHRoQ2hlY2s6IEN1c3RvbVJlc291cmNlO1xuXG4gIC8vIFRoZSBtYXhfY29ubmVjdGlvbnMgcGFyYW1ldGVyIGluIFBnQm91bmNlciBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZlxuICAvLyBjb25uZWN0aW9ucyB0byBvcGVuIG9uIHRoZSBhY3R1YWwgZGF0YWJhc2UgaW5zdGFuY2UuIFdlIHdhbnQgdGhhdCBudW1iZXIgdG9cbiAgLy8gYmUgc2xpZ2h0bHkgc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgbWF4X2Nvbm5lY3Rpb25zIHZhbHVlIG9uIHRoZSBSRFMgaW5zdGFuY2VcbiAgLy8gc28gd2UgcGVyZm9ybSB0aGlzIGNhbGN1bGF0aW9uLlxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFBnYm91bmNlckNvbmZpZyhcbiAgICBkYk1heENvbm5lY3Rpb25zOiBudW1iZXJcbiAgKTogUmVxdWlyZWQ8UGdCb3VuY2VyQ29uZmlnUHJvcHM+IHtcbiAgICAvLyBtYXhEYkNvbm5lY3Rpb25zIChhbmQgbWF4VXNlckNvbm5lY3Rpb25zKSBhcmUgdGhlIG9ubHkgc2V0dGluZ3MgdGhhdCBuZWVkXG4gICAgLy8gdG8gYmUgcmVzcG9uc2l2ZSB0byB0aGUgZGF0YWJhc2Ugc2l6ZS9tYXhfY29ubmVjdGlvbnMgc2V0dGluZ1xuICAgIHJldHVybiB7XG4gICAgICBwb29sTW9kZTogXCJ0cmFuc2FjdGlvblwiLFxuICAgICAgbWF4Q2xpZW50Q29ubjogMTAwMCxcbiAgICAgIGRlZmF1bHRQb29sU2l6ZTogNSxcbiAgICAgIG1pblBvb2xTaXplOiAwLFxuICAgICAgcmVzZXJ2ZVBvb2xTaXplOiA1LFxuICAgICAgcmVzZXJ2ZVBvb2xUaW1lb3V0OiA1LFxuICAgICAgbWF4RGJDb25uZWN0aW9uczogZGJNYXhDb25uZWN0aW9ucyAtIDEwLFxuICAgICAgbWF4VXNlckNvbm5lY3Rpb25zOiBkYk1heENvbm5lY3Rpb25zIC0gMTAsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQZ0JvdW5jZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdHMgZm9yIG9wdGlvbmFsIHByb3BzXG5cbiAgICBjb25zdCBkZWZhdWx0UGdib3VuY2VyQ29uZmlnID0gdGhpcy5nZXREZWZhdWx0UGdib3VuY2VyQ29uZmlnKFxuICAgICAgcHJvcHMuZGJNYXhDb25uZWN0aW9uc1xuICAgICk7XG5cbiAgICAvLyBNZXJnZSBwcm92aWRlZCBjb25maWcgd2l0aCBkZWZhdWx0c1xuICAgIGNvbnN0IHBnQm91bmNlckNvbmZpZzogUmVxdWlyZWQ8UGdCb3VuY2VyQ29uZmlnUHJvcHM+ID0ge1xuICAgICAgLi4uZGVmYXVsdFBnYm91bmNlckNvbmZpZyxcbiAgICAgIC4uLnByb3BzLnBnQm91bmNlckNvbmZpZyxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIHJvbGUgZm9yIFBnQm91bmNlciBpbnN0YW5jZSB0byBlbmFibGUgd3JpdGluZyB0byBDbG91ZFdhdGNoXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJwZ2JvdW5jZXIgaW5zdGFuY2Ugcm9sZSB3aXRoIFN5c3RlbXMgTWFuYWdlciArIENsb3VkV2F0Y2ggcGVybWlzc2lvbnNcIixcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwiQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZVwiXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcIkNsb3VkV2F0Y2hBZ2VudFNlcnZlclBvbGljeVwiXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIHBvbGljeSB0byBhbGxvdyByZWFkaW5nIFJEUyBjcmVkZW50aWFscyBmcm9tIFNlY3JldHMgTWFuYWdlclxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInNlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtwcm9wcy5kYXRhYmFzZS5zZWNyZXQuc2VjcmV0QXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIHNlY3VyaXR5IGdyb3VwIGFuZCBhbGxvdyBjb25uZWN0aW9ucyBmcm9tIHRoZSBMYW1iZGEgSVAgcmFuZ2VzIGZvciB0aGlzIHJlZ2lvblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIlBnQm91bmNlclNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTZWN1cml0eSBncm91cCBmb3IgUGdCb3VuY2VyIGluc3RhbmNlXCIsXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIFBnQm91bmNlciBpbnN0YW5jZVxuICAgIGNvbnN0IGRlZmF1bHRJbnN0YW5jZUNvbmZpZzogT21pdDxlYzIuSW5zdGFuY2VQcm9wcywgXCJ2cGNcIj4gPSB7XG4gICAgICBpbnN0YW5jZU5hbWU6IFwicGdib3VuY2VyXCIsXG4gICAgICBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGUub2YoXG4gICAgICAgIGVjMi5JbnN0YW5jZUNsYXNzLlQzLFxuICAgICAgICBlYzIuSW5zdGFuY2VTaXplLk1JQ1JPXG4gICAgICApLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBwcm9wcy51c2VQdWJsaWNTdWJuZXRcbiAgICAgICAgICA/IGVjMi5TdWJuZXRUeXBlLlBVQkxJQ1xuICAgICAgICAgIDogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICAgIH0sXG4gICAgICBtYWNoaW5lSW1hZ2U6IGVjMi5NYWNoaW5lSW1hZ2UuZnJvbVNzbVBhcmFtZXRlcihcbiAgICAgICAgXCIvYXdzL3NlcnZpY2UvY2Fub25pY2FsL3VidW50dS9zZXJ2ZXIvbm9ibGUvc3RhYmxlL2N1cnJlbnQvYW1kNjQvaHZtL2Vicy1ncDMvYW1pLWlkXCIsXG4gICAgICAgIHsgb3M6IGVjMi5PcGVyYXRpbmdTeXN0ZW1UeXBlLkxJTlVYIH1cbiAgICAgICksXG4gICAgICBibG9ja0RldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZU5hbWU6IFwiL2Rldi94dmRhXCIsXG4gICAgICAgICAgdm9sdW1lOiBlYzIuQmxvY2tEZXZpY2VWb2x1bWUuZWJzKDIwLCB7XG4gICAgICAgICAgICB2b2x1bWVUeXBlOiBlYzIuRWJzRGV2aWNlVm9sdW1lVHlwZS5HUDMsXG4gICAgICAgICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVPblRlcm1pbmF0aW9uOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHJvbGUsXG4gICAgICBzZWN1cml0eUdyb3VwOiB0aGlzLnNlY3VyaXR5R3JvdXAsXG4gICAgICB1c2VyRGF0YTogdGhpcy5sb2FkVXNlckRhdGFTY3JpcHQocGdCb3VuY2VyQ29uZmlnLCBwcm9wcy5kYXRhYmFzZSksXG4gICAgICB1c2VyRGF0YUNhdXNlc1JlcGxhY2VtZW50OiB0cnVlLFxuICAgICAgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiBwcm9wcy51c2VQdWJsaWNTdWJuZXQsXG4gICAgfTtcblxuICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsIFwiSW5zdGFuY2VcIiwge1xuICAgICAgLi4uZGVmYXVsdEluc3RhbmNlQ29uZmlnLFxuICAgICAgLi4ucHJvcHMuaW5zdGFuY2VQcm9wcyxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgIH0pO1xuXG4gICAgLy8gQWxsb3cgUGdCb3VuY2VyIHRvIGNvbm5lY3QgdG8gUkRTXG4gICAgcHJvcHMuZGF0YWJhc2UuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgdGhpcy5pbnN0YW5jZSxcbiAgICAgIGVjMi5Qb3J0LnRjcCg1NDMyKSxcbiAgICAgIFwiQWxsb3cgUGdCb3VuY2VyIHRvIGNvbm5lY3QgdG8gUkRTXCJcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHNlY3JldCBmb3IgcGdib3VuY2VyIGNvbm5lY3Rpb24gY3JlZGVudGlhbHNcbiAgICB0aGlzLnBnYm91bmNlclNlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgXCJQZ0JvdW5jZXJTZWNyZXRcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiQ29ubmVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgUGdCb3VuY2VyIGluc3RhbmNlXCIsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJkdW1teVwiLFxuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogXCJ7fVwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IHRoZSByb2xlIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgbmV3IHNlY3JldFxuICAgIHRoaXMucGdib3VuY2VyU2VjcmV0LmdyYW50UmVhZChyb2xlKTtcblxuICAgIC8vIFVwZGF0ZSBwZ2JvdW5jZXJTZWNyZXQgdG8gY29udGFpbiBwZ3N0YWNTZWNyZXQgdmFsdWVzIGJ1dCB3aXRoIG5ldyB2YWx1ZSBmb3IgaG9zdFxuICAgIGNvbnN0IHNlY3JldFVwZGF0ZXJGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgXCJTZWNyZXRVcGRhdGVyRnVuY3Rpb25cIiwge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTX0xBVEVTVCxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImxhbWJkYS9wZ2JvdW5jZXItc2VjcmV0LXVwZGF0ZXJcIilcbiAgICAgICksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTT1VSQ0VfU0VDUkVUX0FSTjogcHJvcHMuZGF0YWJhc2Uuc2VjcmV0LnNlY3JldEFybixcbiAgICAgICAgVEFSR0VUX1NFQ1JFVF9BUk46IHRoaXMucGdib3VuY2VyU2VjcmV0LnNlY3JldEFybixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBwcm9wcy5kYXRhYmFzZS5zZWNyZXQuZ3JhbnRSZWFkKHNlY3JldFVwZGF0ZXJGbik7XG4gICAgdGhpcy5wZ2JvdW5jZXJTZWNyZXQuZ3JhbnRXcml0ZShzZWNyZXRVcGRhdGVyRm4pO1xuXG4gICAgdGhpcy5zZWNyZXRVcGRhdGVDb21wbGV0ZSA9IG5ldyBDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICBcInBnYm91bmNlclNlY3JldEJvb3RzdHJhcHBlclwiLFxuICAgICAge1xuICAgICAgICBzZXJ2aWNlVG9rZW46IHNlY3JldFVwZGF0ZXJGbi5mdW5jdGlvbkFybixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGluc3RhbmNlSXA6IHByb3BzLnVzZVB1YmxpY1N1Ym5ldFxuICAgICAgICAgICAgPyB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljSXBcbiAgICAgICAgICAgIDogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVByaXZhdGVJcCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQWRkIGhlYWx0aCBjaGVjayBjdXN0b20gcmVzb3VyY2VcbiAgICBjb25zdCBoZWFsdGhDaGVja0Z1bmN0aW9uID0gbmV3IGxhbWJkYS5GdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkhlYWx0aENoZWNrRnVuY3Rpb25cIixcbiAgICAgIHtcbiAgICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTX0xBVEVTVCxcbiAgICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTApLFxuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCJsYW1iZGEvcGdib3VuY2VyLWhlYWx0aC1jaGVja1wiKVxuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJQZ0JvdW5jZXIgaGVhbHRoIGNoZWNrIGZ1bmN0aW9uXCIsXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEdyYW50IFNTTSBwZXJtaXNzaW9ucyBmb3IgaGVhbHRoIGNoZWNrXG4gICAgaGVhbHRoQ2hlY2tGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcInNzbTpTZW5kQ29tbWFuZFwiLFxuICAgICAgICAgIFwic3NtOkdldENvbW1hbmRJbnZvY2F0aW9uXCIsXG4gICAgICAgICAgXCJzc206RGVzY3JpYmVJbnN0YW5jZUluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgXCJzc206TGlzdENvbW1hbmRJbnZvY2F0aW9uc1wiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmhlYWx0aENoZWNrID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiUGdCb3VuY2VySGVhbHRoQ2hlY2tcIiwge1xuICAgICAgc2VydmljZVRva2VuOiBoZWFsdGhDaGVja0Z1bmN0aW9uLmZ1bmN0aW9uQXJuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBJbnN0YW5jZUlkOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICAgIC8vIEFkZCB0aW1lc3RhbXAgdG8gZm9yY2UgcmUtZXhlY3V0aW9uIG9uIHN0YWNrIHVwZGF0ZXNcbiAgICAgICAgVGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIGhlYWx0aCBjaGVjayBydW5zIGFmdGVyIGluc3RhbmNlIGlzIGNyZWF0ZWQgYnV0IGJlZm9yZSBzZWNyZXQgdXBkYXRlXG4gICAgdGhpcy5oZWFsdGhDaGVjay5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5pbnN0YW5jZSk7XG4gICAgdGhpcy5zZWNyZXRVcGRhdGVDb21wbGV0ZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5oZWFsdGhDaGVjayk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRVc2VyRGF0YVNjcmlwdChcbiAgICBwZ0JvdW5jZXJDb25maWc6IFJlcXVpcmVkPE5vbk51bGxhYmxlPFBnQm91bmNlclByb3BzW1wicGdCb3VuY2VyQ29uZmlnXCJdPj4sXG4gICAgZGF0YWJhc2U6IHsgc2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0IH1cbiAgKTogZWMyLlVzZXJEYXRhIHtcbiAgICBjb25zdCB1c2VyRGF0YVNjcmlwdCA9IGVjMi5Vc2VyRGF0YS5mb3JMaW51eCgpO1xuXG4gICAgLy8gU2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuICAgIHVzZXJEYXRhU2NyaXB0LmFkZENvbW1hbmRzKFxuICAgICAgJ2V4cG9ydCBTRUNSRVRfQVJOPVwiJyArIGRhdGFiYXNlLnNlY3JldC5zZWNyZXRBcm4gKyAnXCInLFxuICAgICAgJ2V4cG9ydCBSRUdJT049XCInICsgU3RhY2sub2YodGhpcykucmVnaW9uICsgJ1wiJyxcbiAgICAgICdleHBvcnQgUE9PTF9NT0RFPVwiJyArIHBnQm91bmNlckNvbmZpZy5wb29sTW9kZSArICdcIicsXG4gICAgICAnZXhwb3J0IE1BWF9DTElFTlRfQ09OTj1cIicgKyBwZ0JvdW5jZXJDb25maWcubWF4Q2xpZW50Q29ubiArICdcIicsXG4gICAgICAnZXhwb3J0IERFRkFVTFRfUE9PTF9TSVpFPVwiJyArIHBnQm91bmNlckNvbmZpZy5kZWZhdWx0UG9vbFNpemUgKyAnXCInLFxuICAgICAgJ2V4cG9ydCBNSU5fUE9PTF9TSVpFPVwiJyArIHBnQm91bmNlckNvbmZpZy5taW5Qb29sU2l6ZSArICdcIicsXG4gICAgICAnZXhwb3J0IFJFU0VSVkVfUE9PTF9TSVpFPVwiJyArIHBnQm91bmNlckNvbmZpZy5yZXNlcnZlUG9vbFNpemUgKyAnXCInLFxuICAgICAgJ2V4cG9ydCBSRVNFUlZFX1BPT0xfVElNRU9VVD1cIicgK1xuICAgICAgICBwZ0JvdW5jZXJDb25maWcucmVzZXJ2ZVBvb2xUaW1lb3V0ICtcbiAgICAgICAgJ1wiJyxcbiAgICAgICdleHBvcnQgTUFYX0RCX0NPTk5FQ1RJT05TPVwiJyArIHBnQm91bmNlckNvbmZpZy5tYXhEYkNvbm5lY3Rpb25zICsgJ1wiJyxcbiAgICAgICdleHBvcnQgTUFYX1VTRVJfQ09OTkVDVElPTlM9XCInICsgcGdCb3VuY2VyQ29uZmlnLm1heFVzZXJDb25uZWN0aW9ucyArICdcIidcbiAgICApO1xuXG4gICAgLy8gTG9hZCB0aGUgc3RhcnR1cCBzY3JpcHRcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuL3BnYm91bmNlci1zZXR1cC5zaFwiKTtcbiAgICBsZXQgc2NyaXB0ID0gZnMucmVhZEZpbGVTeW5jKHNjcmlwdFBhdGgsIFwidXRmOFwiKTtcblxuICAgIHVzZXJEYXRhU2NyaXB0LmFkZENvbW1hbmRzKHNjcmlwdCk7XG5cbiAgICByZXR1cm4gdXNlckRhdGFTY3JpcHQ7XG4gIH1cbn1cbiJdfQ==
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGdCb3VuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUGdCb3VuY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQVFxQjtBQUNyQiwyQ0FBdUM7QUFFdkMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQTBEN0IsTUFBYSxTQUFVLFNBQVEsc0JBQVM7SUFPdEMsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxnRkFBZ0Y7SUFDaEYsa0NBQWtDO0lBRTFCLHlCQUF5QixDQUMvQixnQkFBd0I7UUFFeEIsNEVBQTRFO1FBQzVFLGdFQUFnRTtRQUNoRSxPQUFPO1lBQ0wsUUFBUSxFQUFFLGFBQWE7WUFDdkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLENBQUM7WUFDbEIsV0FBVyxFQUFFLENBQUM7WUFDZCxlQUFlLEVBQUUsQ0FBQztZQUNsQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLEVBQUU7WUFDdkMsa0JBQWtCLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRTtTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixrQ0FBa0M7UUFFbEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzNELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDdkIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxNQUFNLGVBQWUsR0FBbUM7WUFDdEQsR0FBRyxzQkFBc0I7WUFDekIsR0FBRyxLQUFLLENBQUMsZUFBZTtTQUN6QixDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM5QyxXQUFXLEVBQ1QsdUVBQXVFO1lBQ3pFLFNBQVMsRUFBRSxJQUFJLHFCQUFHLENB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c19lYzIgYXMgZWMyLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19zZWNyZXRzbWFuYWdlciBhcyBzZWNyZXRzbWFuYWdlcixcbiAgQ3VzdG9tUmVzb3VyY2UsXG4gIER1cmF0aW9uLFxuICBTdGFjayxcbn0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuLy8gdXNlZCB0byBwb3B1bGF0ZSBwZ2JvdW5jZXIgY29uZmlnOlxuLy8gc2VlIGh0dHBzOi8vd3d3LnBnYm91bmNlci5vcmcvY29uZmlnLmh0bWwgZm9yIGRldGFpbHNcbmV4cG9ydCBpbnRlcmZhY2UgUGdCb3VuY2VyQ29uZmlnUHJvcHMge1xuICBwb29sTW9kZT86IFwidHJhbnNhY3Rpb25cIiB8IFwic2Vzc2lvblwiIHwgXCJzdGF0ZW1lbnRcIjtcbiAgbWF4Q2xpZW50Q29ubj86IG51bWJlcjtcbiAgZGVmYXVsdFBvb2xTaXplPzogbnVtYmVyO1xuICBtaW5Qb29sU2l6ZT86IG51bWJlcjtcbiAgcmVzZXJ2ZVBvb2xTaXplPzogbnVtYmVyO1xuICByZXNlcnZlUG9vbFRpbWVvdXQ/OiBudW1iZXI7XG4gIG1heERiQ29ubmVjdGlvbnM/OiBudW1iZXI7XG4gIG1heFVzZXJDb25uZWN0aW9ucz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZ0JvdW5jZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBWUEMgdG8gZGVwbG95IFBnQm91bmNlciBpbnRvXG4gICAqL1xuICB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgUkRTIGluc3RhbmNlIHRvIGNvbm5lY3QgdG9cbiAgICovXG4gIGRhdGFiYXNlOiB7XG4gICAgY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucztcbiAgICBzZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLklTZWNyZXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1heGltdW0gY29ubmVjdGlvbnMgc2V0dGluZyBmb3IgdGhlIGRhdGFiYXNlLlxuICAgKiBQZ0JvdW5jZXIgd2lsbCB1c2UgMTAgZmV3ZXIgdGhhbiB0aGlzIHZhbHVlLlxuICAgKi9cbiAgZGJNYXhDb25uZWN0aW9uczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlcGxveSBpbiBwdWJsaWMgc3VibmV0XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VQdWJsaWNTdWJuZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQZ0JvdW5jZXIgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqL1xuICBwZ0JvdW5jZXJDb25maWc/OiBQZ0JvdW5jZXJDb25maWdQcm9wcztcblxuICAvKipcbiAgICogRUMyIGluc3RhbmNlIG9wdGlvbnNcbiAgICovXG4gIGluc3RhbmNlUHJvcHM/OiBQYXJ0aWFsPGVjMi5JbnN0YW5jZVByb3BzPjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgcmVmZXJlbmNlIHRvIHRoZSBkYXRhYmFzZSBib290c3RyYXBwZXIgQ3VzdG9tUmVzb3VyY2UuXG4gICAqIFdoZW4gcHJvdmlkZWQsIHRoZSBoZWFsdGggY2hlY2sgd2lsbCByZS10cmlnZ2VyIGlmIHRoZSBkYXRhYmFzZSBzZXR1cCBjaGFuZ2VzLlxuICAgKi9cbiAgZGF0YWJhc2VCb290c3RyYXBwZXI/OiBDdXN0b21SZXNvdXJjZTtcbn1cblxuZXhwb3J0IGNsYXNzIFBnQm91bmNlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZTogZWMyLkluc3RhbmNlO1xuICBwdWJsaWMgcmVhZG9ubHkgcGdib3VuY2VyU2VjcmV0OiBzZWNyZXRzbWFuYWdlci5TZWNyZXQ7XG4gIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUdyb3VwOiBlYzIuU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldFVwZGF0ZUNvbXBsZXRlOiBDdXN0b21SZXNvdXJjZTtcbiAgcHVibGljIHJlYWRvbmx5IGhlYWx0aENoZWNrOiBDdXN0b21SZXNvdXJjZTtcblxuICAvLyBUaGUgbWF4X2Nvbm5lY3Rpb25zIHBhcmFtZXRlciBpbiBQZ0JvdW5jZXIgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2ZcbiAgLy8gY29ubmVjdGlvbnMgdG8gb3BlbiBvbiB0aGUgYWN0dWFsIGRhdGFiYXNlIGluc3RhbmNlLiBXZSB3YW50IHRoYXQgbnVtYmVyIHRvXG4gIC8vIGJlIHNsaWdodGx5IHNtYWxsZXIgdGhhbiB0aGUgYWN0dWFsIG1heF9jb25uZWN0aW9ucyB2YWx1ZSBvbiB0aGUgUkRTIGluc3RhbmNlXG4gIC8vIHNvIHdlIHBlcmZvcm0gdGhpcyBjYWxjdWxhdGlvbi5cblxuICBwcml2YXRlIGdldERlZmF1bHRQZ2JvdW5jZXJDb25maWcoXG4gICAgZGJNYXhDb25uZWN0aW9uczogbnVtYmVyXG4gICk6IFJlcXVpcmVkPFBnQm91bmNlckNvbmZpZ1Byb3BzPiB7XG4gICAgLy8gbWF4RGJDb25uZWN0aW9ucyAoYW5kIG1heFVzZXJDb25uZWN0aW9ucykgYXJlIHRoZSBvbmx5IHNldHRpbmdzIHRoYXQgbmVlZFxuICAgIC8vIHRvIGJlIHJlc3BvbnNpdmUgdG8gdGhlIGRhdGFiYXNlIHNpemUvbWF4X2Nvbm5lY3Rpb25zIHNldHRpbmdcbiAgICByZXR1cm4ge1xuICAgICAgcG9vbE1vZGU6IFwidHJhbnNhY3Rpb25cIixcbiAgICAgIG1heENsaWVudENvbm46IDEwMDAsXG4gICAgICBkZWZhdWx0UG9vbFNpemU6IDUsXG4gICAgICBtaW5Qb29sU2l6ZTogMCxcbiAgICAgIHJlc2VydmVQb29sU2l6ZTogNSxcbiAgICAgIHJlc2VydmVQb29sVGltZW91dDogNSxcbiAgICAgIG1heERiQ29ubmVjdGlvbnM6IGRiTWF4Q29ubmVjdGlvbnMgLSAxMCxcbiAgICAgIG1heFVzZXJDb25uZWN0aW9uczogZGJNYXhDb25uZWN0aW9ucyAtIDEwLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGdCb3VuY2VyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gU2V0IGRlZmF1bHRzIGZvciBvcHRpb25hbCBwcm9wc1xuXG4gICAgY29uc3QgZGVmYXVsdFBnYm91bmNlckNvbmZpZyA9IHRoaXMuZ2V0RGVmYXVsdFBnYm91bmNlckNvbmZpZyhcbiAgICAgIHByb3BzLmRiTWF4Q29ubmVjdGlvbnNcbiAgICApO1xuXG4gICAgLy8gTWVyZ2UgcHJvdmlkZWQgY29uZmlnIHdpdGggZGVmYXVsdHNcbiAgICBjb25zdCBwZ0JvdW5jZXJDb25maWc6IFJlcXVpcmVkPFBnQm91bmNlckNvbmZpZ1Byb3BzPiA9IHtcbiAgICAgIC4uLmRlZmF1bHRQZ2JvdW5jZXJDb25maWcsXG4gICAgICAuLi5wcm9wcy5wZ0JvdW5jZXJDb25maWcsXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSByb2xlIGZvciBQZ0JvdW5jZXIgaW5zdGFuY2UgdG8gZW5hYmxlIHdyaXRpbmcgdG8gQ2xvdWRXYXRjaFxuICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJJbnN0YW5jZVJvbGVcIiwge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwicGdib3VuY2VyIGluc3RhbmNlIHJvbGUgd2l0aCBTeXN0ZW1zIE1hbmFnZXIgKyBDbG91ZFdhdGNoIHBlcm1pc3Npb25zXCIsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImVjMi5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcIkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmVcIlxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJDbG91ZFdhdGNoQWdlbnRTZXJ2ZXJQb2xpY3lcIlxuICAgICAgICApLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIEFkZCBwb2xpY3kgdG8gYWxsb3cgcmVhZGluZyBSRFMgY3JlZGVudGlhbHMgZnJvbSBTZWNyZXRzIE1hbmFnZXJcbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuZGF0YWJhc2Uuc2VjcmV0LnNlY3JldEFybl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYSBzZWN1cml0eSBncm91cCBhbmQgYWxsb3cgY29ubmVjdGlvbnMgZnJvbSB0aGUgTGFtYmRhIElQIHJhbmdlcyBmb3IgdGhpcyByZWdpb25cbiAgICB0aGlzLnNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgXCJQZ0JvdW5jZXJTZWN1cml0eUdyb3VwXCIsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGVzY3JpcHRpb246IFwiU2VjdXJpdHkgZ3JvdXAgZm9yIFBnQm91bmNlciBpbnN0YW5jZVwiLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBQZ0JvdW5jZXIgaW5zdGFuY2VcbiAgICBjb25zdCBkZWZhdWx0SW5zdGFuY2VDb25maWc6IE9taXQ8ZWMyLkluc3RhbmNlUHJvcHMsIFwidnBjXCI+ID0ge1xuICAgICAgaW5zdGFuY2VOYW1lOiBcInBnYm91bmNlclwiLFxuICAgICAgaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlLm9mKFxuICAgICAgICBlYzIuSW5zdGFuY2VDbGFzcy5UMyxcbiAgICAgICAgZWMyLkluc3RhbmNlU2l6ZS5NSUNST1xuICAgICAgKSxcbiAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgc3VibmV0VHlwZTogcHJvcHMudXNlUHVibGljU3VibmV0XG4gICAgICAgICAgPyBlYzIuU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgICA6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICB9LFxuICAgICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmZyb21Tc21QYXJhbWV0ZXIoXG4gICAgICAgIFwiL2F3cy9zZXJ2aWNlL2Nhbm9uaWNhbC91YnVudHUvc2VydmVyL25vYmxlL3N0YWJsZS9jdXJyZW50L2FtZDY0L2h2bS9lYnMtZ3AzL2FtaS1pZFwiLFxuICAgICAgICB7IG9zOiBlYzIuT3BlcmF0aW5nU3lzdGVtVHlwZS5MSU5VWCB9XG4gICAgICApLFxuICAgICAgYmxvY2tEZXZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkZXZpY2VOYW1lOiBcIi9kZXYveHZkYVwiLFxuICAgICAgICAgIHZvbHVtZTogZWMyLkJsb2NrRGV2aWNlVm9sdW1lLmVicygyMCwge1xuICAgICAgICAgICAgdm9sdW1lVHlwZTogZWMyLkVic0RldmljZVZvbHVtZVR5cGUuR1AzLFxuICAgICAgICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlT25UZXJtaW5hdGlvbjogdHJ1ZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICByb2xlLFxuICAgICAgc2VjdXJpdHlHcm91cDogdGhpcy5zZWN1cml0eUdyb3VwLFxuICAgICAgdXNlckRhdGE6IHRoaXMubG9hZFVzZXJEYXRhU2NyaXB0KHBnQm91bmNlckNvbmZpZywgcHJvcHMuZGF0YWJhc2UpLFxuICAgICAgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudDogdHJ1ZSxcbiAgICAgIGFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzczogcHJvcHMudXNlUHVibGljU3VibmV0LFxuICAgIH07XG5cbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBcIkluc3RhbmNlXCIsIHtcbiAgICAgIC4uLmRlZmF1bHRJbnN0YW5jZUNvbmZpZyxcbiAgICAgIC4uLnByb3BzLmluc3RhbmNlUHJvcHMsXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICB9KTtcblxuICAgIC8vIEFsbG93IFBnQm91bmNlciB0byBjb25uZWN0IHRvIFJEU1xuICAgIHByb3BzLmRhdGFiYXNlLmNvbm5lY3Rpb25zLmFsbG93RnJvbShcbiAgICAgIHRoaXMuaW5zdGFuY2UsXG4gICAgICBlYzIuUG9ydC50Y3AoNTQzMiksXG4gICAgICBcIkFsbG93IFBnQm91bmNlciB0byBjb25uZWN0IHRvIFJEU1wiXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBzZWNyZXQgZm9yIHBnYm91bmNlciBjb25uZWN0aW9uIGNyZWRlbnRpYWxzXG4gICAgdGhpcy5wZ2JvdW5jZXJTZWNyZXQgPSBuZXcgc2VjcmV0c21hbmFnZXIuU2VjcmV0KHRoaXMsIFwiUGdCb3VuY2VyU2VjcmV0XCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbm5lY3Rpb24gaW5mb3JtYXRpb24gZm9yIFBnQm91bmNlciBpbnN0YW5jZVwiLFxuICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHtcbiAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwiZHVtbXlcIixcbiAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IFwie31cIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCB0aGUgcm9sZSBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIG5ldyBzZWNyZXRcbiAgICB0aGlzLnBnYm91bmNlclNlY3JldC5ncmFudFJlYWQocm9sZSk7XG5cbiAgICAvLyBVcGRhdGUgcGdib3VuY2VyU2VjcmV0IHRvIGNvbnRhaW4gcGdzdGFjU2VjcmV0IHZhbHVlcyBidXQgd2l0aCBuZXcgdmFsdWUgZm9yIGhvc3RcbiAgICBjb25zdCBzZWNyZXRVcGRhdGVyRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsIFwiU2VjcmV0VXBkYXRlckZ1bmN0aW9uXCIsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU19MQVRFU1QsXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCJsYW1iZGEvcGdib3VuY2VyLXNlY3JldC11cGRhdGVyXCIpXG4gICAgICApLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU09VUkNFX1NFQ1JFVF9BUk46IHByb3BzLmRhdGFiYXNlLnNlY3JldC5zZWNyZXRBcm4sXG4gICAgICAgIFRBUkdFVF9TRUNSRVRfQVJOOiB0aGlzLnBnYm91bmNlclNlY3JldC5zZWNyZXRBcm4sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcHJvcHMuZGF0YWJhc2Uuc2VjcmV0LmdyYW50UmVhZChzZWNyZXRVcGRhdGVyRm4pO1xuICAgIHRoaXMucGdib3VuY2VyU2VjcmV0LmdyYW50V3JpdGUoc2VjcmV0VXBkYXRlckZuKTtcblxuICAgIHRoaXMuc2VjcmV0VXBkYXRlQ29tcGxldGUgPSBuZXcgQ3VzdG9tUmVzb3VyY2UoXG4gICAgICB0aGlzLFxuICAgICAgXCJwZ2JvdW5jZXJTZWNyZXRCb290c3RyYXBwZXJcIixcbiAgICAgIHtcbiAgICAgICAgc2VydmljZVRva2VuOiBzZWNyZXRVcGRhdGVyRm4uZnVuY3Rpb25Bcm4sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBpbnN0YW5jZUlwOiBwcm9wcy51c2VQdWJsaWNTdWJuZXRcbiAgICAgICAgICAgID8gdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0lwXG4gICAgICAgICAgICA6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VQcml2YXRlSXAsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEFkZCBoZWFsdGggY2hlY2sgY3VzdG9tIHJlc291cmNlXG4gICAgY29uc3QgaGVhbHRoQ2hlY2tGdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJIZWFsdGhDaGVja0Z1bmN0aW9uXCIsXG4gICAgICB7XG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU19MQVRFU1QsXG4gICAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEwKSxcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KFxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwibGFtYmRhL3BnYm91bmNlci1oZWFsdGgtY2hlY2tcIilcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiUGdCb3VuY2VyIGhlYWx0aCBjaGVjayBmdW5jdGlvblwiLFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBTU00gcGVybWlzc2lvbnMgZm9yIGhlYWx0aCBjaGVja1xuICAgIGhlYWx0aENoZWNrRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJzc206U2VuZENvbW1hbmRcIixcbiAgICAgICAgICBcInNzbTpHZXRDb21tYW5kSW52b2NhdGlvblwiLFxuICAgICAgICAgIFwic3NtOkRlc2NyaWJlSW5zdGFuY2VJbmZvcm1hdGlvblwiLFxuICAgICAgICAgIFwic3NtOkxpc3RDb21tYW5kSW52b2NhdGlvbnNcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5oZWFsdGhDaGVjayA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCBcIlBnQm91bmNlckhlYWx0aENoZWNrXCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogaGVhbHRoQ2hlY2tGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgSW5zdGFuY2VJZDogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZUlkLFxuICAgICAgICAvLyBSZWZlcmVuY2UgdGhlIGRhdGFiYXNlIGJvb3RzdHJhcHBlciB0byByZS10cmlnZ2VyIG9uIGRhdGFiYXNlIGNoYW5nZXNcbiAgICAgICAgLi4uKHByb3BzLmRhdGFiYXNlQm9vdHN0cmFwcGVyICYmIHtcbiAgICAgICAgICBEYXRhYmFzZUJvb3RzdHJhcHBlclJlZjogcHJvcHMuZGF0YWJhc2VCb290c3RyYXBwZXIucmVmLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFbnN1cmUgaGVhbHRoIGNoZWNrIHJ1bnMgYWZ0ZXIgaW5zdGFuY2UgaXMgY3JlYXRlZCBidXQgYmVmb3JlIHNlY3JldCB1cGRhdGVcbiAgICB0aGlzLmhlYWx0aENoZWNrLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmluc3RhbmNlKTtcbiAgICB0aGlzLnNlY3JldFVwZGF0ZUNvbXBsZXRlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmhlYWx0aENoZWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFVzZXJEYXRhU2NyaXB0KFxuICAgIHBnQm91bmNlckNvbmZpZzogUmVxdWlyZWQ8Tm9uTnVsbGFibGU8UGdCb3VuY2VyUHJvcHNbXCJwZ0JvdW5jZXJDb25maWdcIl0+PixcbiAgICBkYXRhYmFzZTogeyBzZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLklTZWNyZXQgfVxuICApOiBlYzIuVXNlckRhdGEge1xuICAgIGNvbnN0IHVzZXJEYXRhU2NyaXB0ID0gZWMyLlVzZXJEYXRhLmZvckxpbnV4KCk7XG5cbiAgICAvLyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4gICAgdXNlckRhdGFTY3JpcHQuYWRkQ29tbWFuZHMoXG4gICAgICAnZXhwb3J0IFNFQ1JFVF9BUk49XCInICsgZGF0YWJhc2Uuc2VjcmV0LnNlY3JldEFybiArICdcIicsXG4gICAgICAnZXhwb3J0IFJFR0lPTj1cIicgKyBTdGFjay5vZih0aGlzKS5yZWdpb24gKyAnXCInLFxuICAgICAgJ2V4cG9ydCBQT09MX01PREU9XCInICsgcGdCb3VuY2VyQ29uZmlnLnBvb2xNb2RlICsgJ1wiJyxcbiAgICAgICdleHBvcnQgTUFYX0NMSUVOVF9DT05OPVwiJyArIHBnQm91bmNlckNvbmZpZy5tYXhDbGllbnRDb25uICsgJ1wiJyxcbiAgICAgICdleHBvcnQgREVGQVVMVF9QT09MX1NJWkU9XCInICsgcGdCb3VuY2VyQ29uZmlnLmRlZmF1bHRQb29sU2l6ZSArICdcIicsXG4gICAgICAnZXhwb3J0IE1JTl9QT09MX1NJWkU9XCInICsgcGdCb3VuY2VyQ29uZmlnLm1pblBvb2xTaXplICsgJ1wiJyxcbiAgICAgICdleHBvcnQgUkVTRVJWRV9QT09MX1NJWkU9XCInICsgcGdCb3VuY2VyQ29uZmlnLnJlc2VydmVQb29sU2l6ZSArICdcIicsXG4gICAgICAnZXhwb3J0IFJFU0VSVkVfUE9PTF9USU1FT1VUPVwiJyArXG4gICAgICAgIHBnQm91bmNlckNvbmZpZy5yZXNlcnZlUG9vbFRpbWVvdXQgK1xuICAgICAgICAnXCInLFxuICAgICAgJ2V4cG9ydCBNQVhfREJfQ09OTkVDVElPTlM9XCInICsgcGdCb3VuY2VyQ29uZmlnLm1heERiQ29ubmVjdGlvbnMgKyAnXCInLFxuICAgICAgJ2V4cG9ydCBNQVhfVVNFUl9DT05ORUNUSU9OUz1cIicgKyBwZ0JvdW5jZXJDb25maWcubWF4VXNlckNvbm5lY3Rpb25zICsgJ1wiJ1xuICAgICk7XG5cbiAgICAvLyBMb2FkIHRoZSBzdGFydHVwIHNjcmlwdFxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4vcGdib3VuY2VyLXNldHVwLnNoXCIpO1xuICAgIGxldCBzY3JpcHQgPSBmcy5yZWFkRmlsZVN5bmMoc2NyaXB0UGF0aCwgXCJ1dGY4XCIpO1xuXG4gICAgdXNlckRhdGFTY3JpcHQuYWRkQ29tbWFuZHMoc2NyaXB0KTtcblxuICAgIHJldHVybiB1c2VyRGF0YVNjcmlwdDtcbiAgfVxufVxuIl19
@@ -214,6 +214,7 @@ class PgStacDatabase extends constructs_1.Construct {
214
214
  reservePoolSize: 5,
215
215
  reservePoolTimeout: 5,
216
216
  },
217
+ databaseBootstrapper: bootstrapper,
217
218
  });
218
219
  this._pgBouncerServer.node.addDependency(bootstrapper);
219
220
  this.pgstacSecret = this._pgBouncerServer.pgbouncerSecret;
@@ -260,5 +261,5 @@ class PgStacDatabase extends constructs_1.Construct {
260
261
  }
261
262
  exports.PgStacDatabase = PgStacDatabase;
262
263
  _a = JSII_RTTI_SYMBOL_1;
263
- PgStacDatabase[_a] = { fqn: "eoapi-cdk.PgStacDatabase", version: "11.1.0" };
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQVVxQjtBQUNyQiwyQ0FBdUM7QUFDdkMsb0NBSWtCO0FBQ2xCLDJDQUF3QztBQUN4QyxpQ0FBaUM7QUFDakMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUU3QixNQUFNLGFBQWEsR0FBMkIsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFaEYsSUFBSSwwQkFBMEIsR0FBMkI7SUFDdkQsT0FBTyxFQUFFLE9BQU87SUFDaEIsWUFBWSxFQUFFLE1BQU07Q0FDckIsQ0FBQztBQUVGLFNBQVMsTUFBTSxDQUNiLFFBQXNEO0lBRXRELE9BQVEsUUFBaUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDO0FBQzlELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMscUJBQXFCLENBQzVCLFFBQWdCLEVBQ2hCLFNBQW9DO0lBRXBDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFekMsMEJBQTBCO0lBQzFCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7SUFDOUUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLG9CQUFvQjtJQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxjQUFjLEVBQUUs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dmFsUG9saWN5LFxuICBTdGFjayxcbiAgYXdzX2xhbWJkYSxcbiAgYXdzX2xvZ3MsXG4gIGF3c19lYzIgYXMgZWMyLFxuICBhd3NfcmRzIGFzIHJkcyxcbiAgYXdzX3NlY3JldHNtYW5hZ2VyIGFzIHNlY3JldHNtYW5hZ2VyLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzLFxuICBERUZBVUxUX1BHU1RBQ19WRVJTSU9OLFxuICByZXNvbHZlTGFtYmRhQ29kZSxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBQZ0JvdW5jZXIgfSBmcm9tIFwiLi9QZ0JvdW5jZXJcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuY29uc3QgaW5zdGFuY2VTaXplczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHJlcXVpcmUoXCIuL2luc3RhbmNlLW1lbW9yeS5qc29uXCIpO1xuXG5sZXQgZGVmYXVsdFBnU1RBQ0N1c3RvbU9wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gIGNvbnRleHQ6IFwiRkFMU0VcIixcbiAgbW9zYWljX2luZGV4OiBcIlRSVUVcIixcbn07XG5cbmZ1bmN0aW9uIGhhc1ZwYyhcbiAgaW5zdGFuY2U6IHJkcy5EYXRhYmFzZUluc3RhbmNlIHwgcmRzLklEYXRhYmFzZUluc3RhbmNlLFxuKTogaW5zdGFuY2UgaXMgcmRzLkRhdGFiYXNlSW5zdGFuY2Uge1xuICByZXR1cm4gKGluc3RhbmNlIGFzIHJkcy5EYXRhYmFzZUluc3RhbmNlKS52cGMgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBhIGNvbnRlbnQtYmFzZWQgaGFzaCBmb3IgTGFtYmRhIERvY2tlciBidWlsZCBhc3NldHMuXG4gKlxuICogVGhpcyBoYXNoIGluY2x1ZGVzOlxuICogLSBEb2NrZXJmaWxlIGNvbnRlbnRcbiAqIC0gSGFuZGxlciBjb2RlIGNvbnRlbnRcbiAqIC0gQnVpbGQgYXJndW1lbnRzIChQR1NUQUNfVkVSU0lPTiwgUFlUSE9OX1ZFUlNJT04pXG4gKlxuICogQHBhcmFtIGJhc2VQYXRoIC0gQmFzZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYm9vdHN0cmFwcGVyX3J1bnRpbWUgZm9sZGVyXG4gKiBAcGFyYW0gYnVpbGRBcmdzIC0gRG9ja2VyIGJ1aWxkIGFyZ3VtZW50cyB0aGF0IGFmZmVjdCB0aGUgTGFtYmRhXG4gKiBAcmV0dXJucyBTSEEyNTYgaGFzaCBhcyBoZXggc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVMYW1iZGFDb2RlSGFzaChcbiAgYmFzZVBhdGg6IHN0cmluZyxcbiAgYnVpbGRBcmdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpO1xuXG4gIC8vIEhhc2ggRG9ja2VyZmlsZSBjb250ZW50XG4gIGNvbnN0IGRvY2tlcmZpbGVQYXRoID0gcGF0aC5qb2luKGJhc2VQYXRoLCBcImJvb3RzdHJhcHBlcl9ydW50aW1lL0RvY2tlcmZpbGVcIik7XG4gIGNvbnN0IGRvY2tlcmZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGRvY2tlcmZpbGVQYXRoLCBcInV0ZjhcIik7XG4gIGhhc2gudXBkYXRlKGBEb2NrZXJmaWxlOiR7ZG9ja2VyZmlsZUNvbnRlbnR9YCk7XG5cbiAgLy8gSGFzaCBoYW5kbGVyIGNvZGVcbiAgY29uc3QgaGFuZGxlclBhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIFwiYm9vdHN0cmFwcGVyX3J1bnRpbWUvaGFuZGxlci5weVwiKTtcbiAgY29uc3QgaGFuZGxlckNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoaGFuZGxlclBhdGgsIFwidXRmOFwiKTtcbiAgaGFzaC51cGRhdGUoYGhhbmRsZXI6JHtoYW5kbGVyQ29udGVudH1gKTtcblxuICAvLyBIYXNoIGJ1aWxkIGFyZ3VtZW50cyBpbiBzb3J0ZWQgb3JkZXIgZm9yIGNvbnNpc3RlbmN5XG4gIGNvbnN0IHNvcnRlZEFyZ3MgPSBPYmplY3Qua2V5cyhidWlsZEFyZ3MpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoKGtleSkgPT4gYCR7a2V5fT0ke2J1aWxkQXJnc1trZXldfWApXG4gICAgLmpvaW4oXCIsXCIpO1xuICBoYXNoLnVwZGF0ZShgYnVpbGRBcmdzOiR7c29ydGVkQXJnc31gKTtcblxuICByZXR1cm4gaGFzaC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8qKlxuICogQW4gUkRTIGluc3RhbmNlIHdpdGggcGdTVEFDIGluc3RhbGxlZCBhbmQgUGdCb3VuY2VyIGNvbm5lY3Rpb24gcG9vbGluZy5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzIGFuIG9wdGltaXplZCBwZ1NUQUMgZGF0YWJhc2Ugc2V0dXAgdGhhdCBpbmNsdWRlczpcbiAqIC0gUkRTIFBvc3RncmVTUUwgaW5zdGFuY2Ugd2l0aCBwZ1NUQUMgZXh0ZW5zaW9uXG4gKiAtIFBnQm91bmNlciBjb25uZWN0aW9uIHBvb2xlciAoZW5hYmxlZCBieSBkZWZhdWx0KVxuICogLSBBdXRvbWF0ZWQgaGVhbHRoIG1vbml0b3Jpbmcgc3lzdGVtXG4gKiAtIE9wdGltaXplZCBkYXRhYmFzZSBwYXJhbWV0ZXJzIGZvciB0aGUgc2VsZWN0ZWQgaW5zdGFuY2UgdHlwZVxuICpcbiAqICMjIENvbm5lY3Rpb24gUG9vbGluZyB3aXRoIFBnQm91bmNlclxuICpcbiAqIEJ5IGRlZmF1bHQsIHRoaXMgY29uc3RydWN0IGRlcGxveXMgUGdCb3VuY2VyIGFzIGEgY29ubmVjdGlvbiBwb29sZXIgcnVubmluZyBvblxuICogYSBkZWRpY2F0ZWQgRUMyIGluc3RhbmNlLiBQZ0JvdW5jZXIgcHJvdmlkZXMgc2V2ZXJhbCBiZW5lZml0czpcbiAqXG4gKiAtICoqQ29ubmVjdGlvbiBNYW5hZ2VtZW50Kio6IFBvb2xzIGFuZCByZXVzZXMgZGF0YWJhc2UgY29ubmVjdGlvbnMgdG8gcmVkdWNlIG92ZXJoZWFkXG4gKiAtICoqUGVyZm9ybWFuY2UqKjogT3B0aW1pemVzIGNvbm5lY3Rpb24gaGFuZGxpbmcgZm9yIGhpZ2gtdHJhZmZpYyBhcHBsaWNhdGlvbnNcbiAqIC0gKipTY2FsYWJpbGl0eSoqOiBBbGxvd3MgbW9yZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zIHRoYW4gdGhlIFJEUyBpbnN0YW5jZSBhbG9uZVxuICogLSAqKkhlYWx0aCBNb25pdG9yaW5nKio6IEluY2x1ZGVzIGNvbXByZWhlbnNpdmUgaGVhbHRoIGNoZWNrcyB0byBlbnN1cmUgYXZhaWxhYmlsaXR5XG4gKlxuICogIyMjIFBnQm91bmNlciBDb25maWd1cmF0aW9uXG4gKiAtIFBvb2wgbW9kZTogVHJhbnNhY3Rpb24tbGV2ZWwgcG9vbGluZyAoZGVmYXVsdClcbiAqIC0gTWF4aW11bSBjbGllbnQgY29ubmVjdGlvbnM6IDEwMDBcbiAqIC0gRGVmYXVsdCBwb29sIHNpemU6IDIwIGNvbm5lY3Rpb25zIHBlciBkYXRhYmFzZS91c2VyIGNvbWJpbmF0aW9uXG4gKiAtIEluc3RhbmNlIHR5cGU6IHQzLm1pY3JvIEVDMiBpbnN0YW5jZVxuICpcbiAqICMjIyBIZWFsdGggQ2hlY2sgU3lzdGVtXG4gKiBUaGUgY29uc3RydWN0IGluY2x1ZGVzIGFuIGF1dG9tYXRlZCBoZWFsdGggY2hlY2sgc3lzdGVtIHRoYXQgdmFsaWRhdGVzOlxuICogLSBQZ0JvdW5jZXIgc2VydmljZSBpcyBydW5uaW5nIGFuZCBsaXN0ZW5pbmcgb24gcG9ydCA1NDMyXG4gKiAtIENvbm5lY3Rpb24gdGVzdHMgdG8gZW5zdXJlIGFjY2Vzc2liaWxpdHlcbiAqIC0gQ2xvdWQtaW5pdCBzZXR1cCBjb21wbGV0aW9uIGJlZm9yZSB2YWxpZGF0aW9uXG4gKiAtIERldGFpbGVkIGRpYWdub3N0aWNzIGZvciB0cm91Ymxlc2hvb3RpbmdcbiAqXG4gKiAjIyMgQ29ubmVjdGlvbiBEZXRhaWxzXG4gKiBXaGVuIFBnQm91bmNlciBpcyBlbmFibGVkLCBhcHBsaWNhdGlvbnMgY29ubmVjdCB0aHJvdWdoIHRoZSBQZ0JvdW5jZXIgaW5zdGFuY2VcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHRvIFJEUy4gVGhlIGBwZ3N0YWNTZWNyZXRgIGNvbnRhaW5zIGNvbm5lY3Rpb24gaW5mb3JtYXRpb25cbiAqIHBvaW50aW5nIHRvIFBnQm91bmNlciwgYW5kIHRoZSBgY29ubmVjdGlvblRhcmdldGAgcHJvcGVydHkgcmVmZXJzIHRvIHRoZVxuICogUGdCb3VuY2VyIEVDMiBpbnN0YW5jZS5cbiAqXG4gKiBUbyBkaXNhYmxlIFBnQm91bmNlciBhbmQgY29ubmVjdCBkaXJlY3RseSB0byBSRFMsIHNldCBgYWRkUGdib3VuY2VyOiBmYWxzZWAuXG4gKlxuICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBgcmRzLkRhdGFiYXNlSW5zdGFuY2VgIGhpZ2hlci1sZXZlbCBjb25zdHJ1Y3RcbiAqIG1ha2luZyB1c2Ugb2YgdGhlIEJvb3RzdHJhcFBnU3RhYyBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBQZ1N0YWNEYXRhYmFzZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGRiOiByZHMuRGF0YWJhc2VJbnN0YW5jZTtcbiAgcGdzdGFjU2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICBwcml2YXRlIF9wZ0JvdW5jZXJTZXJ2ZXI/OiBQZ0JvdW5jZXI7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBnc3RhY1ZlcnNpb246IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25UYXJnZXQ6IHJkcy5JRGF0YWJhc2VJbnN0YW5jZSB8IGVjMi5JbnN0YW5jZTtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldEJvb3RzdHJhcHBlcj86IEN1c3RvbVJlc291cmNlO1xuICBwdWJsaWMgcmVhZG9ubHkgcGdib3VuY2VySGVhbHRoQ2hlY2s/OiBDdXN0b21SZXNvdXJjZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGdTdGFjRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGFyYW1ldGVycyA9IHRoaXMuZ2V0UGFyYW1ldGVycyhcbiAgICAgIHByb3BzLmluc3RhbmNlVHlwZT8udG9TdHJpbmcoKSB8fCBcIm01LmxhcmdlXCIsXG4gICAgICBwcm9wcy5wYXJhbWV0ZXJzLFxuICAgICk7XG4gICAgY29uc3QgcGFyYW1ldGVyR3JvdXAgPSBuZXcgcmRzLlBhcmFtZXRlckdyb3VwKHRoaXMsIFwicGFyYW1ldGVyR3JvdXBcIiwge1xuICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmUsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIG1heF9jb25uZWN0aW9uczogZGVmYXVsdFBhcmFtZXRlcnMubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgIHNoYXJlZF9idWZmZXJzOiBkZWZhdWx0UGFyYW1ldGVycy5zaGFyZWRCdWZmZXJzLFxuICAgICAgICBlZmZlY3RpdmVfY2FjaGVfc2l6ZTogZGVmYXVsdFBhcmFtZXRlcnMuZWZmZWN0aXZlQ2FjaGVTaXplLFxuICAgICAgICB3b3JrX21lbTogZGVmYXVsdFBhcmFtZXRlcnMud29ya01lbSxcbiAgICAgICAgbWFpbnRlbmFuY2Vfd29ya19tZW06IGRlZmF1bHRQYXJhbWV0ZXJzLm1haW50ZW5hbmNlV29ya01lbSxcbiAgICAgICAgbWF4X2xvY2tzX3Blcl90cmFuc2FjdGlvbjogZGVmYXVsdFBhcmFtZXRlcnMubWF4TG9ja3NQZXJUcmFuc2FjdGlvbixcbiAgICAgICAgdGVtcF9idWZmZXJzOiBkZWZhdWx0UGFyYW1ldGVycy50ZW1wQnVmZmVycyxcbiAgICAgICAgc2VxX3BhZ2VfY29zdDogZGVmYXVsdFBhcmFtZXRlcnMuc2VxUGFnZUNvc3QsXG4gICAgICAgIHJhbmRvbV9wYWdlX2Nvc3Q6IGRlZmF1bHRQYXJhbWV0ZXJzLnJhbmRvbVBhZ2VDb3N0LFxuICAgICAgICAuLi5wcm9wcy5wYXJhbWV0ZXJzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZGIgPSBuZXcgcmRzLkRhdGFiYXNlSW5zdGFuY2UodGhpcywgXCJkYlwiLCB7XG4gICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZSxcbiAgICAgIHBhcmFtZXRlckdyb3VwLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBnc3RhY1ZlcnNpb24gPSBwcm9wcy5wZ3N0YWNWZXJzaW9uIHx8IERFRkFVTFRfUEdTVEFDX1ZFUlNJT047XG5cbiAgICBjb25zdCB7IGNvZGU6IHVzZXJDb2RlLCAuLi5vdGhlckxhbWJkYU9wdGlvbnMgfSA9XG4gICAgICBwcm9wcy5ib290c3RyYXBwZXJMYW1iZGFGdW5jdGlvbk9wdGlvbnMgfHwge307XG5cbiAgICAvLyBTdG9yZSBidWlsZCBhcmdzIGZvciBoYXNoIGNvbXB1dGF0aW9uXG4gICAgY29uc3QgYnVpbGRBcmdzID0ge1xuICAgICAgUFlUSE9OX1ZFUlNJT046IFwiMy4xMlwiLFxuICAgICAgUEdTVEFDX1ZFUlNJT046IHRoaXMucGdzdGFjVmVyc2lvbixcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBhd3NfbGFtYmRhLkZ1bmN0aW9uKHRoaXMsIFwibGFtYmRhXCIsIHtcbiAgICAgIC8vIGRlZmF1bHRzXG4gICAgICBydW50aW1lOiBhd3NfbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTIsXG4gICAgICBoYW5kbGVyOiBcImhhbmRsZXIuaGFuZGxlclwiLFxuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgbG9nUmV0ZW50aW9uOiBhd3NfbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBjb2RlOiByZXNvbHZlTGFtYmRhQ29kZSh1c2VyQ29kZSwgX19kaXJuYW1lLCB7XG4gICAgICAgIGZpbGU6IFwiYm9vdHN0cmFwcGVyX3J1bnRpbWUvRG9ja2VyZmlsZVwiLFxuICAgICAgICBidWlsZEFyZ3M6IGJ1aWxkQXJncyxcbiAgICAgIH0pLFxuICAgICAgdnBjOiBoYXNWcGModGhpcy5kYikgPyB0aGlzLmRiLnZwYyA6IHByb3BzLnZwYyxcbiAgICAgIGFsbG93UHVibGljU3VibmV0OiB0cnVlLFxuICAgICAgLy8gb3ZlcndyaXRlcyBkZWZhdWx0cyB3aXRoIHVzZXItcHJvdmlkZWQgY29uZmlndXJhYmxlIHByb3BlcnRpZXMsXG4gICAgICAuLi5vdGhlckxhbWJkYU9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBnc3RhY1NlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgXCJib290c3RyYXBwZXJzZWNyZXRcIiwge1xuICAgICAgc2VjcmV0TmFtZTogW1xuICAgICAgICBwcm9wcy5zZWNyZXRzUHJlZml4IHx8IFwicGdzdGFjXCIsXG4gICAgICAgIGlkLFxuICAgICAgICB0aGlzLm5vZGUuYWRkci5zbGljZSgtOCksXG4gICAgICBdLmpvaW4oXCIvXCIpLFxuICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHtcbiAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBkYm5hbWU6IHByb3BzLnBnc3RhY0RiTmFtZSB8fCBcInBnc3RhY1wiLFxuICAgICAgICAgIGVuZ2luZTogXCJwb3N0Z3Jlc1wiLFxuICAgICAgICAgIHBvcnQ6IDU0MzIsXG4gICAgICAgICAgaG9zdDogdGhpcy5kYi5pbnN0YW5jZUVuZHBvaW50Lmhvc3RuYW1lLFxuICAgICAgICAgIHVzZXJuYW1lOiBwcm9wcy5wZ3N0YWNVc2VybmFtZSB8fCBcInBnc3RhY191c2VyXCIsXG4gICAgICAgIH0pLFxuICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJwYXNzd29yZFwiLFxuICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IGBQZ1NUQUMgZGF0YWJhc2UgYm9vdHN0cmFwcGVkIGJ5ICR7XG4gICAgICAgIFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZVxuICAgICAgfWAsXG4gICAgfSk7XG5cbiAgICAvLyBBbGxvdyBsYW1iZGEgdG8uLi5cbiAgICAvLyByZWFkIG5ldyB1c2VyIHNlY3JldFxuICAgIHRoaXMucGdzdGFjU2VjcmV0LmdyYW50UmVhZChoYW5kbGVyKTtcbiAgICAvLyByZWFkIGRhdGFiYXNlIHNlY3JldFxuICAgIHRoaXMuZGIuc2VjcmV0IS5ncmFudFJlYWQoaGFuZGxlcik7XG4gICAgLy8gY29ubmVjdCB0byBkYXRhYmFzZVxuICAgIHRoaXMuZGIuY29ubmVjdGlvbnMuYWxsb3dGcm9tKGhhbmRsZXIsIGVjMi5Qb3J0LnRjcCg1NDMyKSk7XG5cbiAgICBsZXQgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID1cbiAgICAgIHByb3BzLmN1c3RvbVJlc291cmNlUHJvcGVydGllc1xuICAgICAgICA/IHsgLi4uZGVmYXVsdFBnU1RBQ0N1c3RvbU9wdGlvbnMsIC4uLnByb3BzLmN1c3RvbVJlc291cmNlUHJvcGVydGllcyB9XG4gICAgICAgIDogZGVmYXVsdFBnU1RBQ0N1c3RvbU9wdGlvbnM7XG5cbiAgICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICAgIGN1c3RvbVJlc291cmNlUHJvcGVydGllc1tcImNvbm5fc2VjcmV0X2FyblwiXSA9IHRoaXMuZGIuc2VjcmV0IS5zZWNyZXRBcm47XG4gICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1wibmV3X3VzZXJfc2VjcmV0X2FyblwiXSA9XG4gICAgICB0aGlzLnBnc3RhY1NlY3JldC5zZWNyZXRBcm47XG5cbiAgICAvLyBpZiBwcm9wcy5sYW1iZGFGdW5jdGlvbk9wdGlvbnMgZG9lc24ndCBoYXZlICdjb2RlJyBkZWZpbmVkLCB1cGRhdGUgcGdzdGFjX3ZlcnNpb24gKG5lZWRlZCBmb3IgZGVmYXVsdCBydW50aW1lKVxuICAgIGlmICghdXNlckNvZGUpIHtcbiAgICAgIGN1c3RvbVJlc291cmNlUHJvcGVydGllc1tcInBnc3RhY192ZXJzaW9uXCJdID0gdGhpcy5wZ3N0YWNWZXJzaW9uO1xuXG4gICAgICAvLyBBZGQgY29udGVudC1iYXNlZCBoYXNoIHRvIGVuc3VyZSB0aGUgTGFtYmRhIGdldHMgcmUtZXhlY3V0ZWQgb25seSB3aGVuIGNvZGUgb3IgY29uZmlnIGNoYW5nZXNcbiAgICAgIGN1c3RvbVJlc291cmNlUHJvcGVydGllc1tcImNvZGVfaGFzaFwiXSA9IGNvbXB1dGVMYW1iZGFDb2RlSGFzaChcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBidWlsZEFyZ3MsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGZvcmNlIHRoZSBib290c3RyYXAgcHJvY2VzcyB0byBydW4gYnkgYWRkaW5nIGEgdGltZXN0YW1wIHdoaWNoIHdpbGwgZW5zdXJlIHRoZSBjdXN0b20gcmVzb3VyY2UgZXhlY3V0ZXMgdGhlIExhbWJkYSBmdW5jdGlvblxuICAgIGlmIChwcm9wcy5mb3JjZUJvb3RzdHJhcCkge1xuICAgICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1widGltZXN0YW1wXCJdID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb3RzdHJhcHBlciA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCBcImJvb3RzdHJhcHBlclwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IGhhbmRsZXIuZnVuY3Rpb25Bcm4sXG4gICAgICBwcm9wZXJ0aWVzOiBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTiwgLy8gVGhpcyByZXRhaW5zIHRoZSBjdXN0b20gcmVzb3VyY2UgKHdoaWNoIGRvZXNuJ3QgcmVhbGx5IGV4aXN0KSwgbm90IHRoZSBkYXRhYmFzZVxuICAgIH0pO1xuXG4gICAgLy8gUGdCb3VuY2VyOiBjb25uZWN0aW9uIHBvb2xlcmN1c3RvbXJlc291cmNlIHRyaWdnZXIgb24gcmVkZXBsb3lcbiAgICBjb25zdCBkZWZhdWx0UGdib3VuY2VySW5zdGFuY2VQcm9wczogUGFydGlhbDxlYzIuSW5zdGFuY2VQcm9wcz4gPSB7XG4gICAgICBpbnN0YW5jZU5hbWU6IGAke1N0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX0tcGdib3VuY2VyYCxcbiAgICAgIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZS5vZihcbiAgICAgICAgZWMyLkluc3RhbmNlQ2xhc3MuVDMsXG4gICAgICAgIGVjMi5JbnN0YW5jZVNpemUuTUlDUk8sXG4gICAgICApLFxuICAgIH07XG4gICAgY29uc3QgYWRkUGdib3VuY2VyID0gcHJvcHMuYWRkUGdib3VuY2VyID8/IHRydWU7XG4gICAgaWYgKGFkZFBnYm91bmNlcikge1xuICAgICAgdGhpcy5fcGdCb3VuY2VyU2VydmVyID0gbmV3IFBnQm91bmNlcih0aGlzLCBcInBnYm91bmNlclwiLCB7XG4gICAgICAgIGluc3RhbmNlUHJvcHM6IHtcbiAgICAgICAgICAuLi5kZWZhdWx0UGdib3VuY2VySW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICAuLi5wcm9wcy5wZ2JvdW5jZXJJbnN0YW5jZVByb3BzLFxuICAgICAgICB9LFxuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgZGF0YWJhc2U6IHtcbiAgICAgICAgICBjb25uZWN0aW9uczogdGhpcy5kYi5jb25uZWN0aW9ucyxcbiAgICAgICAgICBzZWNyZXQ6IHRoaXMucGdzdGFjU2VjcmV0LFxuICAgICAgICB9LFxuICAgICAgICBkYk1heENvbm5lY3Rpb25zOiBwYXJzZUludChkZWZhdWx0UGFyYW1ldGVycy5tYXhDb25uZWN0aW9ucyksXG4gICAgICAgIHVzZVB1YmxpY1N1Ym5ldDpcbiAgICAgICAgICAhcHJvcHMudnBjU3VibmV0cyB8fFxuICAgICAgICAgIHByb3BzLnZwY1N1Ym5ldHMuc3VibmV0VHlwZSA9PT0gZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICBwZ0JvdW5jZXJDb25maWc6IHtcbiAgICAgICAgICBwb29sTW9kZTogXCJ0cmFuc2FjdGlvblwiLFxuICAgICAgICAgIG1heENsaWVudENvbm46IDEwMDAsXG4gICAgICAgICAgZGVmYXVsdFBvb2xTaXplOiAyMCxcbiAgICAgICAgICBtaW5Qb29sU2l6ZTogMTAsXG4gICAgICAgICAgcmVzZXJ2ZVBvb2xTaXplOiA1LFxuICAgICAgICAgIHJlc2VydmVQb29sVGltZW91dDogNSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIubm9kZS5hZGREZXBlbmRlbmN5KGJvb3RzdHJhcHBlcik7XG5cbiAgICAgIHRoaXMucGdzdGFjU2VjcmV0ID0gdGhpcy5fcGdCb3VuY2VyU2VydmVyLnBnYm91bmNlclNlY3JldDtcbiAgICAgIHRoaXMuY29ubmVjdGlvblRhcmdldCA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5pbnN0YW5jZTtcbiAgICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5zZWN1cml0eUdyb3VwO1xuICAgICAgdGhpcy5zZWNyZXRCb290c3RyYXBwZXIgPSB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIuc2VjcmV0VXBkYXRlQ29tcGxldGU7XG4gICAgICB0aGlzLnBnYm91bmNlckhlYWx0aENoZWNrID0gdGhpcy5fcGdCb3VuY2VyU2VydmVyLmhlYWx0aENoZWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25UYXJnZXQgPSB0aGlzLmRiO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbWV0ZXJzKFxuICAgIGluc3RhbmNlVHlwZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM6IFBnU3RhY0RhdGFiYXNlUHJvcHNbXCJwYXJhbWV0ZXJzXCJdLFxuICApOiBEYXRhYmFzZVBhcmFtZXRlcnMge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNsaS9pc3N1ZXMvMTI3OSNpc3N1ZWNvbW1lbnQtOTA5MzE4MjM2XG4gICAgY29uc3QgbWVtb3J5X2luX2tiID0gaW5zdGFuY2VTaXplc1tpbnN0YW5jZVR5cGVdICogMTAyNDtcblxuICAgIC8vIEl0J3Mgb25seSBuZWNlc3NhcnkgdG8gY29uc2lkZXIgcGFzc2VkIGluIHBhcmFtZXRlcnMgZm9yIGFueSB2YWx1ZSB0aGF0IHVzZWQgdG9cbiAgICAvLyBkZXJpdmUgc3Vic2VxdWVudCB2YWx1ZXMuIFZhbHVlcyB0aGF0IGRvbid0IGhhdmUgZGVwZW5kZW5jaWVzIHdpbGwgYmUgb3ZlcnJpZGVuXG4gICAgLy8gd2hlbiB3ZSB1bnBhY2sgdGhlIHBhc3NlZC1pbiB1c2VyIHBhcmFtZXRlcnNcbiAgICBjb25zdCBtYXhDb25uZWN0aW9ucyA9IHBhcmFtZXRlcnM/Lm1heENvbm5lY3Rpb25zXG4gICAgICA/IE51bWJlci5wYXJzZUludChwYXJhbWV0ZXJzLm1heENvbm5lY3Rpb25zKVxuICAgICAgOiAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9MaW1pdHMuaHRtbCNSRFNfTGltaXRzLk1heENvbm5lY3Rpb25zXG4gICAgICAgIE1hdGgubWluKE1hdGgucm91bmQoKG1lbW9yeV9pbl9rYiAqIDEwMjQpIC8gOTUzMTM5MiksIDUwMDApO1xuICAgIGNvbnN0IHNoYXJlZEJ1ZmZlcnMgPSBwYXJhbWV0ZXJzPy5zaGFyZWRCdWZlcnNcbiAgICAgID8gTnVtYmVyLnBhcnNlSW50KHBhcmFtZXRlcnMuc2hhcmVkQnVmZXJzKVxuICAgICAgOiBNYXRoLnJvdW5kKDAuMjUgKiBtZW1vcnlfaW5fa2IpO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlQ2FjaGVTaXplID0gTWF0aC5yb3VuZCgwLjc1ICogbWVtb3J5X2luX2tiKTtcbiAgICBjb25zdCB3b3JrTWVtID0gTWF0aC5mbG9vcihzaGFyZWRCdWZmZXJzIC8gbWF4Q29ubmVjdGlvbnMpO1xuICAgIGNvbnN0IG1haW50ZW5hbmNlV29ya01lbSA9IE1hdGgucm91bmQoMC4yNSAqIHNoYXJlZEJ1ZmZlcnMpO1xuXG4gICAgY29uc3QgdGVtcEJ1ZmZlcnMgPSAxMjggKiAxMDI0O1xuICAgIGNvbnN0IHNlcVBhZ2VDb3N0ID0gMTtcbiAgICBjb25zdCByYW5kb21QYWdlQ29zdCA9IDEuMTtcblxuICAgIHJldHVybiB7XG4gICAgICBtYXhDb25uZWN0aW9uczogYCR7bWF4Q29ubmVjdGlvbnN9YCxcbiAgICAgIHNoYXJlZEJ1ZmZlcnM6IGAke3NoYXJlZEJ1ZmZlcnMgLyA4fWAsIC8vIFJlcHJlc2VudGVkIGluIDhrYiBibG9ja3NcbiAgICAgIGVmZmVjdGl2ZUNhY2hlU2l6ZTogYCR7ZWZmZWN0aXZlQ2FjaGVTaXplIC8gOH1gLCAvLyBSZXByZXNlbnRlZCBpbiA4a2IgYmxvY2tzXG4gICAgICB3b3JrTWVtOiBgJHt3b3JrTWVtfWAsXG4gICAgICBtYWludGVuYW5jZVdvcmtNZW06IGAke21haW50ZW5hbmNlV29ya01lbX1gLFxuICAgICAgbWF4TG9ja3NQZXJUcmFuc2FjdGlvbjogXCIxMDI0XCIsXG4gICAgICB0ZW1wQnVmZmVyczogYCR7dGVtcEJ1ZmZlcnMgLyA4fWAsIC8vIFJlcHJlc2VudGVkIGluIDhrYiBibG9ja3NcbiAgICAgIHNlcVBhZ2VDb3N0OiBgJHtzZXFQYWdlQ29zdH1gLFxuICAgICAgcmFuZG9tUGFnZUNvc3Q6IGAke3JhbmRvbVBhZ2VDb3N0fWAsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBnU3RhY0RhdGFiYXNlUHJvcHMgZXh0ZW5kcyByZHMuRGF0YWJhc2VJbnN0YW5jZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgZGF0YWJhc2UgdGhhdCBpcyB0byBiZSBjcmVhdGVkIGFuZCBvbnRvIHdoaWNoIHBnU1RBQyB3aWxsIGJlIGluc3RhbGxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgcGdzdGFjXG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNEYk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgcGdzdGFjIHRvIGluc3RhbGwgb24gdGhlIGRhdGFiYXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IDAuOC41XG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmVmaXggdG8gYXNzaWduIHRvIHRoZSBnZW5lcmF0ZWQgYHNlY3JldHNfbWFuYWdlci5TZWNyZXRgXG4gICAqXG4gICAqIEBkZWZhdWx0IHBnc3RhY1xuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0c1ByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB1c2VyIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIHBnU1RBQyBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgcGdzdGFjX3VzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBnc3RhY1VzZXJuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGQgcGdib3VuY2VyIGluc3RhbmNlIGZvciBtYW5hZ2luZyB0cmFmZmljIHRvIHRoZSBwZ1NUQUMgZGF0YWJhc2VcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkUGdib3VuY2VyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvcGVydGllcyBmb3IgdGhlIHBnYm91bmNlciBlYzIgaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3RcbiAgICovXG4gIHJlYWRvbmx5IHBnYm91bmNlckluc3RhbmNlUHJvcHM/OiBlYzIuSW5zdGFuY2VQcm9wcyB8IGFueTtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIEN1c3RvbSBSZXNvdXJjZSBwcm9wZXJ0aWVzLiBBIGN1c3RvbSByZXNvdXJjZSBwcm9wZXJ0eSBpcyBnb2luZyB0byBiZSBjcmVhdGVkXG4gICAqIHRvIHRyaWdnZXIgdGhlIGJvb3N0cmFwcGluZyBsYW1iZGEgZnVuY3Rpb24uIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgKiBvbiB0b3Agb2YgdGhlIGRlZmF1bHRzIG9uZXMuXG4gICAqXG4gICAqL1xuICByZWFkb25seSBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsYW1iZGEgZnVuY3Rpb24gcHJvcGVydGllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBwZXJMYW1iZGFGdW5jdGlvbk9wdGlvbnM/OiBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzO1xuXG4gIC8qKlxuICAgKiBGb3JjZSByZWRlcGxveW1lbnQgb2YgdGhlIGRhdGFiYXNlIGJvb3RzdHJhcHBlciBMYW1iZGEgb24gZXZlcnkgZGVwbG95LlxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIHVzaW5nIGN1c3RvbSBMYW1iZGEgY29kZSB2aWEgYm9vdHN0cmFwcGVyTGFtYmRhRnVuY3Rpb25PcHRpb25zLlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgdGltZXN0YW1wIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGN1c3RvbSByZXNvdXJjZSBwcm9wZXJ0aWVzIHRvIGVuc3VyZVxuICAgKiB0aGUgYm9vdHN0cmFwcGVyIExhbWJkYSBydW5zIG9uIGV2ZXJ5IGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEZvciB0aGUgZGVmYXVsdCBEb2NrZXItYmFzZWQgYm9vdHN0cmFwIGNvZGUsIHRoaXMgZmxhZyBpcyBpZ25vcmVkIGFuZCBhIGNvbnRlbnQtYmFzZWRcbiAgICogaGFzaCBpcyB1c2VkIGluc3RlYWQgKHdoaWNoIGF1dG9tYXRpY2FsbHkgdHJpZ2dlcnMgcmVkZXBsb3ltZW50IHdoZW4gY29kZSBjaGFuZ2VzKS5cbiAgICpcbiAgICogKipBbHRlcm5hdGl2ZSBhcHByb2FjaDoqKiBJbnN0ZWFkIG9mIHVzaW5nIHRoaXMgZmxhZywgeW91IGNhbiB0cmlnZ2VyIGJvb3RzdHJhcCBieVxuICAgKiBtb2RpZnlpbmcgYW55IHByb3BlcnR5IGluIGBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXNgIChlLmcuLCBpbmNyZW1lbnQgYHBnc3RhY192ZXJzaW9uYFxuICAgKiBvciBhZGQgYSBgcmVidWlsZF90cmlnZ2VyYCBwcm9wZXJ0eSB3aXRoIGEgbmV3IHZhbHVlKS4gVGhpcyBnaXZlcyB5b3UgbW9yZSBncmFudWxhclxuICAgKiBjb250cm9sIG92ZXIgd2hlbiByZWRlcGxveW1lbnQgaGFwcGVucy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlQm9vdHN0cmFwPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVBhcmFtZXRlcnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBMRUFTVCh7REJJbnN0YW5jZUNsYXNzTWVtb3J5Lzk1MzEzOTJ9LCA1MDAwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q29ubmVjdGlvbnM6IHN0cmluZztcblxuICAvKipcbiAgICogTm90ZTogVGhpcyB2YWx1ZSBpcyBtZWFzdXJlZCBpbiA4S0IgYmxvY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAne0RCSW5zdGFuY2VDbGFzc01lbW9yeS8zMjc2OH0nIDI1JSBvZiBpbnN0YW5jZSBtZW1vcnksIGllIGB7KERCSW5zdGFuY2VDbGFzc01lbW9yeS8oMTAyNCo4KSkgKiAwLjI1fWBcbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlZEJ1ZmZlcnM6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSA3NSUgb2YgaW5zdGFuY2UgbWVtb3J5XG4gICAqL1xuICByZWFkb25seSBlZmZlY3RpdmVDYWNoZVNpemU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSBzaGFyZWQgYnVmZmVycyBkaXZpZGVkIGJ5IG1heCBjb25uZWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya01lbTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIDI1JSBvZiBzaGFyZWQgYnVmZmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgbWFpbnRlbmFuY2VXb3JrTWVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IDEwMjRcbiAgICovXG4gIHJlYWRvbmx5IG1heExvY2tzUGVyVHJhbnNhY3Rpb246IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMTMxMTcyICgxMjggKiAxMDI0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcEJ1ZmZlcnM6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgc2VxUGFnZUNvc3Q6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMS4xXG4gICAqL1xuICByZWFkb25seSByYW5kb21QYWdlQ29zdDogc3RyaW5nO1xufVxuIl19
264
+ PgStacDatabase[_a] = { fqn: "eoapi-cdk.PgStacDatabase", version: "11.1.2" };
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQVVxQjtBQUNyQiwyQ0FBdUM7QUFDdkMsb0NBSWtCO0FBQ2xCLDJDQUF3QztBQUN4QyxpQ0FBaUM7QUFDakMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUU3QixNQUFNLGFBQWEsR0FBMkIsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFaEYsSUFBSSwwQkFBMEIsR0FBMkI7SUFDdkQsT0FBTyxFQUFFLE9BQU87SUFDaEIsWUFBWSxFQUFFLE1BQU07Q0FDckIsQ0FBQztBQUVGLFNBQVMsTUFBTSxDQUNiLFFBQXNEO0lBRXRELE9BQVEsUUFBaUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDO0FBQzlELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMscUJBQXFCLENBQzVCLFFBQWdCLEVBQ2hCLFNBQW9DO0lBRXBDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFekMsMEJBQTBCO0lBQzFCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7SUFDOUUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLG9CQUFvQjtJQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxjQUFjLEVBQUUs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Y2UsXG4gIER1cmF0aW9uLFxuICBSZW1vdmFsUG9saWN5LFxuICBTdGFjayxcbiAgYXdzX2xhbWJkYSxcbiAgYXdzX2xvZ3MsXG4gIGF3c19lYzIgYXMgZWMyLFxuICBhd3NfcmRzIGFzIHJkcyxcbiAgYXdzX3NlY3JldHNtYW5hZ2VyIGFzIHNlY3JldHNtYW5hZ2VyLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzLFxuICBERUZBVUxUX1BHU1RBQ19WRVJTSU9OLFxuICByZXNvbHZlTGFtYmRhQ29kZSxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBQZ0JvdW5jZXIgfSBmcm9tIFwiLi9QZ0JvdW5jZXJcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuY29uc3QgaW5zdGFuY2VTaXplczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHJlcXVpcmUoXCIuL2luc3RhbmNlLW1lbW9yeS5qc29uXCIpO1xuXG5sZXQgZGVmYXVsdFBnU1RBQ0N1c3RvbU9wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gIGNvbnRleHQ6IFwiRkFMU0VcIixcbiAgbW9zYWljX2luZGV4OiBcIlRSVUVcIixcbn07XG5cbmZ1bmN0aW9uIGhhc1ZwYyhcbiAgaW5zdGFuY2U6IHJkcy5EYXRhYmFzZUluc3RhbmNlIHwgcmRzLklEYXRhYmFzZUluc3RhbmNlLFxuKTogaW5zdGFuY2UgaXMgcmRzLkRhdGFiYXNlSW5zdGFuY2Uge1xuICByZXR1cm4gKGluc3RhbmNlIGFzIHJkcy5EYXRhYmFzZUluc3RhbmNlKS52cGMgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBhIGNvbnRlbnQtYmFzZWQgaGFzaCBmb3IgTGFtYmRhIERvY2tlciBidWlsZCBhc3NldHMuXG4gKlxuICogVGhpcyBoYXNoIGluY2x1ZGVzOlxuICogLSBEb2NrZXJmaWxlIGNvbnRlbnRcbiAqIC0gSGFuZGxlciBjb2RlIGNvbnRlbnRcbiAqIC0gQnVpbGQgYXJndW1lbnRzIChQR1NUQUNfVkVSU0lPTiwgUFlUSE9OX1ZFUlNJT04pXG4gKlxuICogQHBhcmFtIGJhc2VQYXRoIC0gQmFzZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYm9vdHN0cmFwcGVyX3J1bnRpbWUgZm9sZGVyXG4gKiBAcGFyYW0gYnVpbGRBcmdzIC0gRG9ja2VyIGJ1aWxkIGFyZ3VtZW50cyB0aGF0IGFmZmVjdCB0aGUgTGFtYmRhXG4gKiBAcmV0dXJucyBTSEEyNTYgaGFzaCBhcyBoZXggc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVMYW1iZGFDb2RlSGFzaChcbiAgYmFzZVBhdGg6IHN0cmluZyxcbiAgYnVpbGRBcmdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpO1xuXG4gIC8vIEhhc2ggRG9ja2VyZmlsZSBjb250ZW50XG4gIGNvbnN0IGRvY2tlcmZpbGVQYXRoID0gcGF0aC5qb2luKGJhc2VQYXRoLCBcImJvb3RzdHJhcHBlcl9ydW50aW1lL0RvY2tlcmZpbGVcIik7XG4gIGNvbnN0IGRvY2tlcmZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGRvY2tlcmZpbGVQYXRoLCBcInV0ZjhcIik7XG4gIGhhc2gudXBkYXRlKGBEb2NrZXJmaWxlOiR7ZG9ja2VyZmlsZUNvbnRlbnR9YCk7XG5cbiAgLy8gSGFzaCBoYW5kbGVyIGNvZGVcbiAgY29uc3QgaGFuZGxlclBhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIFwiYm9vdHN0cmFwcGVyX3J1bnRpbWUvaGFuZGxlci5weVwiKTtcbiAgY29uc3QgaGFuZGxlckNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoaGFuZGxlclBhdGgsIFwidXRmOFwiKTtcbiAgaGFzaC51cGRhdGUoYGhhbmRsZXI6JHtoYW5kbGVyQ29udGVudH1gKTtcblxuICAvLyBIYXNoIGJ1aWxkIGFyZ3VtZW50cyBpbiBzb3J0ZWQgb3JkZXIgZm9yIGNvbnNpc3RlbmN5XG4gIGNvbnN0IHNvcnRlZEFyZ3MgPSBPYmplY3Qua2V5cyhidWlsZEFyZ3MpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoKGtleSkgPT4gYCR7a2V5fT0ke2J1aWxkQXJnc1trZXldfWApXG4gICAgLmpvaW4oXCIsXCIpO1xuICBoYXNoLnVwZGF0ZShgYnVpbGRBcmdzOiR7c29ydGVkQXJnc31gKTtcblxuICByZXR1cm4gaGFzaC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8qKlxuICogQW4gUkRTIGluc3RhbmNlIHdpdGggcGdTVEFDIGluc3RhbGxlZCBhbmQgUGdCb3VuY2VyIGNvbm5lY3Rpb24gcG9vbGluZy5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzIGFuIG9wdGltaXplZCBwZ1NUQUMgZGF0YWJhc2Ugc2V0dXAgdGhhdCBpbmNsdWRlczpcbiAqIC0gUkRTIFBvc3RncmVTUUwgaW5zdGFuY2Ugd2l0aCBwZ1NUQUMgZXh0ZW5zaW9uXG4gKiAtIFBnQm91bmNlciBjb25uZWN0aW9uIHBvb2xlciAoZW5hYmxlZCBieSBkZWZhdWx0KVxuICogLSBBdXRvbWF0ZWQgaGVhbHRoIG1vbml0b3Jpbmcgc3lzdGVtXG4gKiAtIE9wdGltaXplZCBkYXRhYmFzZSBwYXJhbWV0ZXJzIGZvciB0aGUgc2VsZWN0ZWQgaW5zdGFuY2UgdHlwZVxuICpcbiAqICMjIENvbm5lY3Rpb24gUG9vbGluZyB3aXRoIFBnQm91bmNlclxuICpcbiAqIEJ5IGRlZmF1bHQsIHRoaXMgY29uc3RydWN0IGRlcGxveXMgUGdCb3VuY2VyIGFzIGEgY29ubmVjdGlvbiBwb29sZXIgcnVubmluZyBvblxuICogYSBkZWRpY2F0ZWQgRUMyIGluc3RhbmNlLiBQZ0JvdW5jZXIgcHJvdmlkZXMgc2V2ZXJhbCBiZW5lZml0czpcbiAqXG4gKiAtICoqQ29ubmVjdGlvbiBNYW5hZ2VtZW50Kio6IFBvb2xzIGFuZCByZXVzZXMgZGF0YWJhc2UgY29ubmVjdGlvbnMgdG8gcmVkdWNlIG92ZXJoZWFkXG4gKiAtICoqUGVyZm9ybWFuY2UqKjogT3B0aW1pemVzIGNvbm5lY3Rpb24gaGFuZGxpbmcgZm9yIGhpZ2gtdHJhZmZpYyBhcHBsaWNhdGlvbnNcbiAqIC0gKipTY2FsYWJpbGl0eSoqOiBBbGxvd3MgbW9yZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zIHRoYW4gdGhlIFJEUyBpbnN0YW5jZSBhbG9uZVxuICogLSAqKkhlYWx0aCBNb25pdG9yaW5nKio6IEluY2x1ZGVzIGNvbXByZWhlbnNpdmUgaGVhbHRoIGNoZWNrcyB0byBlbnN1cmUgYXZhaWxhYmlsaXR5XG4gKlxuICogIyMjIFBnQm91bmNlciBDb25maWd1cmF0aW9uXG4gKiAtIFBvb2wgbW9kZTogVHJhbnNhY3Rpb24tbGV2ZWwgcG9vbGluZyAoZGVmYXVsdClcbiAqIC0gTWF4aW11bSBjbGllbnQgY29ubmVjdGlvbnM6IDEwMDBcbiAqIC0gRGVmYXVsdCBwb29sIHNpemU6IDIwIGNvbm5lY3Rpb25zIHBlciBkYXRhYmFzZS91c2VyIGNvbWJpbmF0aW9uXG4gKiAtIEluc3RhbmNlIHR5cGU6IHQzLm1pY3JvIEVDMiBpbnN0YW5jZVxuICpcbiAqICMjIyBIZWFsdGggQ2hlY2sgU3lzdGVtXG4gKiBUaGUgY29uc3RydWN0IGluY2x1ZGVzIGFuIGF1dG9tYXRlZCBoZWFsdGggY2hlY2sgc3lzdGVtIHRoYXQgdmFsaWRhdGVzOlxuICogLSBQZ0JvdW5jZXIgc2VydmljZSBpcyBydW5uaW5nIGFuZCBsaXN0ZW5pbmcgb24gcG9ydCA1NDMyXG4gKiAtIENvbm5lY3Rpb24gdGVzdHMgdG8gZW5zdXJlIGFjY2Vzc2liaWxpdHlcbiAqIC0gQ2xvdWQtaW5pdCBzZXR1cCBjb21wbGV0aW9uIGJlZm9yZSB2YWxpZGF0aW9uXG4gKiAtIERldGFpbGVkIGRpYWdub3N0aWNzIGZvciB0cm91Ymxlc2hvb3RpbmdcbiAqXG4gKiAjIyMgQ29ubmVjdGlvbiBEZXRhaWxzXG4gKiBXaGVuIFBnQm91bmNlciBpcyBlbmFibGVkLCBhcHBsaWNhdGlvbnMgY29ubmVjdCB0aHJvdWdoIHRoZSBQZ0JvdW5jZXIgaW5zdGFuY2VcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHRvIFJEUy4gVGhlIGBwZ3N0YWNTZWNyZXRgIGNvbnRhaW5zIGNvbm5lY3Rpb24gaW5mb3JtYXRpb25cbiAqIHBvaW50aW5nIHRvIFBnQm91bmNlciwgYW5kIHRoZSBgY29ubmVjdGlvblRhcmdldGAgcHJvcGVydHkgcmVmZXJzIHRvIHRoZVxuICogUGdCb3VuY2VyIEVDMiBpbnN0YW5jZS5cbiAqXG4gKiBUbyBkaXNhYmxlIFBnQm91bmNlciBhbmQgY29ubmVjdCBkaXJlY3RseSB0byBSRFMsIHNldCBgYWRkUGdib3VuY2VyOiBmYWxzZWAuXG4gKlxuICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBgcmRzLkRhdGFiYXNlSW5zdGFuY2VgIGhpZ2hlci1sZXZlbCBjb25zdHJ1Y3RcbiAqIG1ha2luZyB1c2Ugb2YgdGhlIEJvb3RzdHJhcFBnU3RhYyBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBQZ1N0YWNEYXRhYmFzZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGRiOiByZHMuRGF0YWJhc2VJbnN0YW5jZTtcbiAgcGdzdGFjU2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICBwcml2YXRlIF9wZ0JvdW5jZXJTZXJ2ZXI/OiBQZ0JvdW5jZXI7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBnc3RhY1ZlcnNpb246IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25UYXJnZXQ6IHJkcy5JRGF0YWJhc2VJbnN0YW5jZSB8IGVjMi5JbnN0YW5jZTtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldEJvb3RzdHJhcHBlcj86IEN1c3RvbVJlc291cmNlO1xuICBwdWJsaWMgcmVhZG9ubHkgcGdib3VuY2VySGVhbHRoQ2hlY2s/OiBDdXN0b21SZXNvdXJjZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGdTdGFjRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGFyYW1ldGVycyA9IHRoaXMuZ2V0UGFyYW1ldGVycyhcbiAgICAgIHByb3BzLmluc3RhbmNlVHlwZT8udG9TdHJpbmcoKSB8fCBcIm01LmxhcmdlXCIsXG4gICAgICBwcm9wcy5wYXJhbWV0ZXJzLFxuICAgICk7XG4gICAgY29uc3QgcGFyYW1ldGVyR3JvdXAgPSBuZXcgcmRzLlBhcmFtZXRlckdyb3VwKHRoaXMsIFwicGFyYW1ldGVyR3JvdXBcIiwge1xuICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmUsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIG1heF9jb25uZWN0aW9uczogZGVmYXVsdFBhcmFtZXRlcnMubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgIHNoYXJlZF9idWZmZXJzOiBkZWZhdWx0UGFyYW1ldGVycy5zaGFyZWRCdWZmZXJzLFxuICAgICAgICBlZmZlY3RpdmVfY2FjaGVfc2l6ZTogZGVmYXVsdFBhcmFtZXRlcnMuZWZmZWN0aXZlQ2FjaGVTaXplLFxuICAgICAgICB3b3JrX21lbTogZGVmYXVsdFBhcmFtZXRlcnMud29ya01lbSxcbiAgICAgICAgbWFpbnRlbmFuY2Vfd29ya19tZW06IGRlZmF1bHRQYXJhbWV0ZXJzLm1haW50ZW5hbmNlV29ya01lbSxcbiAgICAgICAgbWF4X2xvY2tzX3Blcl90cmFuc2FjdGlvbjogZGVmYXVsdFBhcmFtZXRlcnMubWF4TG9ja3NQZXJUcmFuc2FjdGlvbixcbiAgICAgICAgdGVtcF9idWZmZXJzOiBkZWZhdWx0UGFyYW1ldGVycy50ZW1wQnVmZmVycyxcbiAgICAgICAgc2VxX3BhZ2VfY29zdDogZGVmYXVsdFBhcmFtZXRlcnMuc2VxUGFnZUNvc3QsXG4gICAgICAgIHJhbmRvbV9wYWdlX2Nvc3Q6IGRlZmF1bHRQYXJhbWV0ZXJzLnJhbmRvbVBhZ2VDb3N0LFxuICAgICAgICAuLi5wcm9wcy5wYXJhbWV0ZXJzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZGIgPSBuZXcgcmRzLkRhdGFiYXNlSW5zdGFuY2UodGhpcywgXCJkYlwiLCB7XG4gICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZSxcbiAgICAgIHBhcmFtZXRlckdyb3VwLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBnc3RhY1ZlcnNpb24gPSBwcm9wcy5wZ3N0YWNWZXJzaW9uIHx8IERFRkFVTFRfUEdTVEFDX1ZFUlNJT047XG5cbiAgICBjb25zdCB7IGNvZGU6IHVzZXJDb2RlLCAuLi5vdGhlckxhbWJkYU9wdGlvbnMgfSA9XG4gICAgICBwcm9wcy5ib290c3RyYXBwZXJMYW1iZGFGdW5jdGlvbk9wdGlvbnMgfHwge307XG5cbiAgICAvLyBTdG9yZSBidWlsZCBhcmdzIGZvciBoYXNoIGNvbXB1dGF0aW9uXG4gICAgY29uc3QgYnVpbGRBcmdzID0ge1xuICAgICAgUFlUSE9OX1ZFUlNJT046IFwiMy4xMlwiLFxuICAgICAgUEdTVEFDX1ZFUlNJT046IHRoaXMucGdzdGFjVmVyc2lvbixcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBhd3NfbGFtYmRhLkZ1bmN0aW9uKHRoaXMsIFwibGFtYmRhXCIsIHtcbiAgICAgIC8vIGRlZmF1bHRzXG4gICAgICBydW50aW1lOiBhd3NfbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTIsXG4gICAgICBoYW5kbGVyOiBcImhhbmRsZXIuaGFuZGxlclwiLFxuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgbG9nUmV0ZW50aW9uOiBhd3NfbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBjb2RlOiByZXNvbHZlTGFtYmRhQ29kZSh1c2VyQ29kZSwgX19kaXJuYW1lLCB7XG4gICAgICAgIGZpbGU6IFwiYm9vdHN0cmFwcGVyX3J1bnRpbWUvRG9ja2VyZmlsZVwiLFxuICAgICAgICBidWlsZEFyZ3M6IGJ1aWxkQXJncyxcbiAgICAgIH0pLFxuICAgICAgdnBjOiBoYXNWcGModGhpcy5kYikgPyB0aGlzLmRiLnZwYyA6IHByb3BzLnZwYyxcbiAgICAgIGFsbG93UHVibGljU3VibmV0OiB0cnVlLFxuICAgICAgLy8gb3ZlcndyaXRlcyBkZWZhdWx0cyB3aXRoIHVzZXItcHJvdmlkZWQgY29uZmlndXJhYmxlIHByb3BlcnRpZXMsXG4gICAgICAuLi5vdGhlckxhbWJkYU9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBnc3RhY1NlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgXCJib290c3RyYXBwZXJzZWNyZXRcIiwge1xuICAgICAgc2VjcmV0TmFtZTogW1xuICAgICAgICBwcm9wcy5zZWNyZXRzUHJlZml4IHx8IFwicGdzdGFjXCIsXG4gICAgICAgIGlkLFxuICAgICAgICB0aGlzLm5vZGUuYWRkci5zbGljZSgtOCksXG4gICAgICBdLmpvaW4oXCIvXCIpLFxuICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHtcbiAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBkYm5hbWU6IHByb3BzLnBnc3RhY0RiTmFtZSB8fCBcInBnc3RhY1wiLFxuICAgICAgICAgIGVuZ2luZTogXCJwb3N0Z3Jlc1wiLFxuICAgICAgICAgIHBvcnQ6IDU0MzIsXG4gICAgICAgICAgaG9zdDogdGhpcy5kYi5pbnN0YW5jZUVuZHBvaW50Lmhvc3RuYW1lLFxuICAgICAgICAgIHVzZXJuYW1lOiBwcm9wcy5wZ3N0YWNVc2VybmFtZSB8fCBcInBnc3RhY191c2VyXCIsXG4gICAgICAgIH0pLFxuICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJwYXNzd29yZFwiLFxuICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IGBQZ1NUQUMgZGF0YWJhc2UgYm9vdHN0cmFwcGVkIGJ5ICR7XG4gICAgICAgIFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZVxuICAgICAgfWAsXG4gICAgfSk7XG5cbiAgICAvLyBBbGxvdyBsYW1iZGEgdG8uLi5cbiAgICAvLyByZWFkIG5ldyB1c2VyIHNlY3JldFxuICAgIHRoaXMucGdzdGFjU2VjcmV0LmdyYW50UmVhZChoYW5kbGVyKTtcbiAgICAvLyByZWFkIGRhdGFiYXNlIHNlY3JldFxuICAgIHRoaXMuZGIuc2VjcmV0IS5ncmFudFJlYWQoaGFuZGxlcik7XG4gICAgLy8gY29ubmVjdCB0byBkYXRhYmFzZVxuICAgIHRoaXMuZGIuY29ubmVjdGlvbnMuYWxsb3dGcm9tKGhhbmRsZXIsIGVjMi5Qb3J0LnRjcCg1NDMyKSk7XG5cbiAgICBsZXQgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID1cbiAgICAgIHByb3BzLmN1c3RvbVJlc291cmNlUHJvcGVydGllc1xuICAgICAgICA/IHsgLi4uZGVmYXVsdFBnU1RBQ0N1c3RvbU9wdGlvbnMsIC4uLnByb3BzLmN1c3RvbVJlc291cmNlUHJvcGVydGllcyB9XG4gICAgICAgIDogZGVmYXVsdFBnU1RBQ0N1c3RvbU9wdGlvbnM7XG5cbiAgICAvLyB1cGRhdGUgcHJvcGVydGllc1xuICAgIGN1c3RvbVJlc291cmNlUHJvcGVydGllc1tcImNvbm5fc2VjcmV0X2FyblwiXSA9IHRoaXMuZGIuc2VjcmV0IS5zZWNyZXRBcm47XG4gICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1wibmV3X3VzZXJfc2VjcmV0X2FyblwiXSA9XG4gICAgICB0aGlzLnBnc3RhY1NlY3JldC5zZWNyZXRBcm47XG5cbiAgICAvLyBpZiBwcm9wcy5sYW1iZGFGdW5jdGlvbk9wdGlvbnMgZG9lc24ndCBoYXZlICdjb2RlJyBkZWZpbmVkLCB1cGRhdGUgcGdzdGFjX3ZlcnNpb24gKG5lZWRlZCBmb3IgZGVmYXVsdCBydW50aW1lKVxuICAgIGlmICghdXNlckNvZGUpIHtcbiAgICAgIGN1c3RvbVJlc291cmNlUHJvcGVydGllc1tcInBnc3RhY192ZXJzaW9uXCJdID0gdGhpcy5wZ3N0YWNWZXJzaW9uO1xuXG4gICAgICAvLyBBZGQgY29udGVudC1iYXNlZCBoYXNoIHRvIGVuc3VyZSB0aGUgTGFtYmRhIGdldHMgcmUtZXhlY3V0ZWQgb25seSB3aGVuIGNvZGUgb3IgY29uZmlnIGNoYW5nZXNcbiAgICAgIGN1c3RvbVJlc291cmNlUHJvcGVydGllc1tcImNvZGVfaGFzaFwiXSA9IGNvbXB1dGVMYW1iZGFDb2RlSGFzaChcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBidWlsZEFyZ3MsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGZvcmNlIHRoZSBib290c3RyYXAgcHJvY2VzcyB0byBydW4gYnkgYWRkaW5nIGEgdGltZXN0YW1wIHdoaWNoIHdpbGwgZW5zdXJlIHRoZSBjdXN0b20gcmVzb3VyY2UgZXhlY3V0ZXMgdGhlIExhbWJkYSBmdW5jdGlvblxuICAgIGlmIChwcm9wcy5mb3JjZUJvb3RzdHJhcCkge1xuICAgICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1widGltZXN0YW1wXCJdID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb3RzdHJhcHBlciA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCBcImJvb3RzdHJhcHBlclwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IGhhbmRsZXIuZnVuY3Rpb25Bcm4sXG4gICAgICBwcm9wZXJ0aWVzOiBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTiwgLy8gVGhpcyByZXRhaW5zIHRoZSBjdXN0b20gcmVzb3VyY2UgKHdoaWNoIGRvZXNuJ3QgcmVhbGx5IGV4aXN0KSwgbm90IHRoZSBkYXRhYmFzZVxuICAgIH0pO1xuXG4gICAgLy8gUGdCb3VuY2VyOiBjb25uZWN0aW9uIHBvb2xlcmN1c3RvbXJlc291cmNlIHRyaWdnZXIgb24gcmVkZXBsb3lcbiAgICBjb25zdCBkZWZhdWx0UGdib3VuY2VySW5zdGFuY2VQcm9wczogUGFydGlhbDxlYzIuSW5zdGFuY2VQcm9wcz4gPSB7XG4gICAgICBpbnN0YW5jZU5hbWU6IGAke1N0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX0tcGdib3VuY2VyYCxcbiAgICAgIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZS5vZihcbiAgICAgICAgZWMyLkluc3RhbmNlQ2xhc3MuVDMsXG4gICAgICAgIGVjMi5JbnN0YW5jZVNpemUuTUlDUk8sXG4gICAgICApLFxuICAgIH07XG4gICAgY29uc3QgYWRkUGdib3VuY2VyID0gcHJvcHMuYWRkUGdib3VuY2VyID8/IHRydWU7XG4gICAgaWYgKGFkZFBnYm91bmNlcikge1xuICAgICAgdGhpcy5fcGdCb3VuY2VyU2VydmVyID0gbmV3IFBnQm91bmNlcih0aGlzLCBcInBnYm91bmNlclwiLCB7XG4gICAgICAgIGluc3RhbmNlUHJvcHM6IHtcbiAgICAgICAgICAuLi5kZWZhdWx0UGdib3VuY2VySW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICAuLi5wcm9wcy5wZ2JvdW5jZXJJbnN0YW5jZVByb3BzLFxuICAgICAgICB9LFxuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgZGF0YWJhc2U6IHtcbiAgICAgICAgICBjb25uZWN0aW9uczogdGhpcy5kYi5jb25uZWN0aW9ucyxcbiAgICAgICAgICBzZWNyZXQ6IHRoaXMucGdzdGFjU2VjcmV0LFxuICAgICAgICB9LFxuICAgICAgICBkYk1heENvbm5lY3Rpb25zOiBwYXJzZUludChkZWZhdWx0UGFyYW1ldGVycy5tYXhDb25uZWN0aW9ucyksXG4gICAgICAgIHVzZVB1YmxpY1N1Ym5ldDpcbiAgICAgICAgICAhcHJvcHMudnBjU3VibmV0cyB8fFxuICAgICAgICAgIHByb3BzLnZwY1N1Ym5ldHMuc3VibmV0VHlwZSA9PT0gZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICBwZ0JvdW5jZXJDb25maWc6IHtcbiAgICAgICAgICBwb29sTW9kZTogXCJ0cmFuc2FjdGlvblwiLFxuICAgICAgICAgIG1heENsaWVudENvbm46IDEwMDAsXG4gICAgICAgICAgZGVmYXVsdFBvb2xTaXplOiAyMCxcbiAgICAgICAgICBtaW5Qb29sU2l6ZTogMTAsXG4gICAgICAgICAgcmVzZXJ2ZVBvb2xTaXplOiA1LFxuICAgICAgICAgIHJlc2VydmVQb29sVGltZW91dDogNSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YWJhc2VCb290c3RyYXBwZXI6IGJvb3RzdHJhcHBlcixcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIubm9kZS5hZGREZXBlbmRlbmN5KGJvb3RzdHJhcHBlcik7XG5cbiAgICAgIHRoaXMucGdzdGFjU2VjcmV0ID0gdGhpcy5fcGdCb3VuY2VyU2VydmVyLnBnYm91bmNlclNlY3JldDtcbiAgICAgIHRoaXMuY29ubmVjdGlvblRhcmdldCA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5pbnN0YW5jZTtcbiAgICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5zZWN1cml0eUdyb3VwO1xuICAgICAgdGhpcy5zZWNyZXRCb290c3RyYXBwZXIgPSB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIuc2VjcmV0VXBkYXRlQ29tcGxldGU7XG4gICAgICB0aGlzLnBnYm91bmNlckhlYWx0aENoZWNrID0gdGhpcy5fcGdCb3VuY2VyU2VydmVyLmhlYWx0aENoZWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25UYXJnZXQgPSB0aGlzLmRiO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbWV0ZXJzKFxuICAgIGluc3RhbmNlVHlwZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM6IFBnU3RhY0RhdGFiYXNlUHJvcHNbXCJwYXJhbWV0ZXJzXCJdLFxuICApOiBEYXRhYmFzZVBhcmFtZXRlcnMge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNsaS9pc3N1ZXMvMTI3OSNpc3N1ZWNvbW1lbnQtOTA5MzE4MjM2XG4gICAgY29uc3QgbWVtb3J5X2luX2tiID0gaW5zdGFuY2VTaXplc1tpbnN0YW5jZVR5cGVdICogMTAyNDtcblxuICAgIC8vIEl0J3Mgb25seSBuZWNlc3NhcnkgdG8gY29uc2lkZXIgcGFzc2VkIGluIHBhcmFtZXRlcnMgZm9yIGFueSB2YWx1ZSB0aGF0IHVzZWQgdG9cbiAgICAvLyBkZXJpdmUgc3Vic2VxdWVudCB2YWx1ZXMuIFZhbHVlcyB0aGF0IGRvbid0IGhhdmUgZGVwZW5kZW5jaWVzIHdpbGwgYmUgb3ZlcnJpZGVuXG4gICAgLy8gd2hlbiB3ZSB1bnBhY2sgdGhlIHBhc3NlZC1pbiB1c2VyIHBhcmFtZXRlcnNcbiAgICBjb25zdCBtYXhDb25uZWN0aW9ucyA9IHBhcmFtZXRlcnM/Lm1heENvbm5lY3Rpb25zXG4gICAgICA/IE51bWJlci5wYXJzZUludChwYXJhbWV0ZXJzLm1heENvbm5lY3Rpb25zKVxuICAgICAgOiAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9MaW1pdHMuaHRtbCNSRFNfTGltaXRzLk1heENvbm5lY3Rpb25zXG4gICAgICAgIE1hdGgubWluKE1hdGgucm91bmQoKG1lbW9yeV9pbl9rYiAqIDEwMjQpIC8gOTUzMTM5MiksIDUwMDApO1xuICAgIGNvbnN0IHNoYXJlZEJ1ZmZlcnMgPSBwYXJhbWV0ZXJzPy5zaGFyZWRCdWZlcnNcbiAgICAgID8gTnVtYmVyLnBhcnNlSW50KHBhcmFtZXRlcnMuc2hhcmVkQnVmZXJzKVxuICAgICAgOiBNYXRoLnJvdW5kKDAuMjUgKiBtZW1vcnlfaW5fa2IpO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlQ2FjaGVTaXplID0gTWF0aC5yb3VuZCgwLjc1ICogbWVtb3J5X2luX2tiKTtcbiAgICBjb25zdCB3b3JrTWVtID0gTWF0aC5mbG9vcihzaGFyZWRCdWZmZXJzIC8gbWF4Q29ubmVjdGlvbnMpO1xuICAgIGNvbnN0IG1haW50ZW5hbmNlV29ya01lbSA9IE1hdGgucm91bmQoMC4yNSAqIHNoYXJlZEJ1ZmZlcnMpO1xuXG4gICAgY29uc3QgdGVtcEJ1ZmZlcnMgPSAxMjggKiAxMDI0O1xuICAgIGNvbnN0IHNlcVBhZ2VDb3N0ID0gMTtcbiAgICBjb25zdCByYW5kb21QYWdlQ29zdCA9IDEuMTtcblxuICAgIHJldHVybiB7XG4gICAgICBtYXhDb25uZWN0aW9uczogYCR7bWF4Q29ubmVjdGlvbnN9YCxcbiAgICAgIHNoYXJlZEJ1ZmZlcnM6IGAke3NoYXJlZEJ1ZmZlcnMgLyA4fWAsIC8vIFJlcHJlc2VudGVkIGluIDhrYiBibG9ja3NcbiAgICAgIGVmZmVjdGl2ZUNhY2hlU2l6ZTogYCR7ZWZmZWN0aXZlQ2FjaGVTaXplIC8gOH1gLCAvLyBSZXByZXNlbnRlZCBpbiA4a2IgYmxvY2tzXG4gICAgICB3b3JrTWVtOiBgJHt3b3JrTWVtfWAsXG4gICAgICBtYWludGVuYW5jZVdvcmtNZW06IGAke21haW50ZW5hbmNlV29ya01lbX1gLFxuICAgICAgbWF4TG9ja3NQZXJUcmFuc2FjdGlvbjogXCIxMDI0XCIsXG4gICAgICB0ZW1wQnVmZmVyczogYCR7dGVtcEJ1ZmZlcnMgLyA4fWAsIC8vIFJlcHJlc2VudGVkIGluIDhrYiBibG9ja3NcbiAgICAgIHNlcVBhZ2VDb3N0OiBgJHtzZXFQYWdlQ29zdH1gLFxuICAgICAgcmFuZG9tUGFnZUNvc3Q6IGAke3JhbmRvbVBhZ2VDb3N0fWAsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBnU3RhY0RhdGFiYXNlUHJvcHMgZXh0ZW5kcyByZHMuRGF0YWJhc2VJbnN0YW5jZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgZGF0YWJhc2UgdGhhdCBpcyB0byBiZSBjcmVhdGVkIGFuZCBvbnRvIHdoaWNoIHBnU1RBQyB3aWxsIGJlIGluc3RhbGxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgcGdzdGFjXG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNEYk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgcGdzdGFjIHRvIGluc3RhbGwgb24gdGhlIGRhdGFiYXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IDAuOC41XG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmVmaXggdG8gYXNzaWduIHRvIHRoZSBnZW5lcmF0ZWQgYHNlY3JldHNfbWFuYWdlci5TZWNyZXRgXG4gICAqXG4gICAqIEBkZWZhdWx0IHBnc3RhY1xuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0c1ByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB1c2VyIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIHBnU1RBQyBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgcGdzdGFjX3VzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBnc3RhY1VzZXJuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGQgcGdib3VuY2VyIGluc3RhbmNlIGZvciBtYW5hZ2luZyB0cmFmZmljIHRvIHRoZSBwZ1NUQUMgZGF0YWJhc2VcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkUGdib3VuY2VyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvcGVydGllcyBmb3IgdGhlIHBnYm91bmNlciBlYzIgaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3RcbiAgICovXG4gIHJlYWRvbmx5IHBnYm91bmNlckluc3RhbmNlUHJvcHM/OiBlYzIuSW5zdGFuY2VQcm9wcyB8IGFueTtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIEN1c3RvbSBSZXNvdXJjZSBwcm9wZXJ0aWVzLiBBIGN1c3RvbSByZXNvdXJjZSBwcm9wZXJ0eSBpcyBnb2luZyB0byBiZSBjcmVhdGVkXG4gICAqIHRvIHRyaWdnZXIgdGhlIGJvb3N0cmFwcGluZyBsYW1iZGEgZnVuY3Rpb24uIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgKiBvbiB0b3Agb2YgdGhlIGRlZmF1bHRzIG9uZXMuXG4gICAqXG4gICAqL1xuICByZWFkb25seSBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsYW1iZGEgZnVuY3Rpb24gcHJvcGVydGllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBwZXJMYW1iZGFGdW5jdGlvbk9wdGlvbnM/OiBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzO1xuXG4gIC8qKlxuICAgKiBGb3JjZSByZWRlcGxveW1lbnQgb2YgdGhlIGRhdGFiYXNlIGJvb3RzdHJhcHBlciBMYW1iZGEgb24gZXZlcnkgZGVwbG95LlxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIHVzaW5nIGN1c3RvbSBMYW1iZGEgY29kZSB2aWEgYm9vdHN0cmFwcGVyTGFtYmRhRnVuY3Rpb25PcHRpb25zLlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgdGltZXN0YW1wIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGN1c3RvbSByZXNvdXJjZSBwcm9wZXJ0aWVzIHRvIGVuc3VyZVxuICAgKiB0aGUgYm9vdHN0cmFwcGVyIExhbWJkYSBydW5zIG9uIGV2ZXJ5IGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEZvciB0aGUgZGVmYXVsdCBEb2NrZXItYmFzZWQgYm9vdHN0cmFwIGNvZGUsIHRoaXMgZmxhZyBpcyBpZ25vcmVkIGFuZCBhIGNvbnRlbnQtYmFzZWRcbiAgICogaGFzaCBpcyB1c2VkIGluc3RlYWQgKHdoaWNoIGF1dG9tYXRpY2FsbHkgdHJpZ2dlcnMgcmVkZXBsb3ltZW50IHdoZW4gY29kZSBjaGFuZ2VzKS5cbiAgICpcbiAgICogKipBbHRlcm5hdGl2ZSBhcHByb2FjaDoqKiBJbnN0ZWFkIG9mIHVzaW5nIHRoaXMgZmxhZywgeW91IGNhbiB0cmlnZ2VyIGJvb3RzdHJhcCBieVxuICAgKiBtb2RpZnlpbmcgYW55IHByb3BlcnR5IGluIGBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXNgIChlLmcuLCBpbmNyZW1lbnQgYHBnc3RhY192ZXJzaW9uYFxuICAgKiBvciBhZGQgYSBgcmVidWlsZF90cmlnZ2VyYCBwcm9wZXJ0eSB3aXRoIGEgbmV3IHZhbHVlKS4gVGhpcyBnaXZlcyB5b3UgbW9yZSBncmFudWxhclxuICAgKiBjb250cm9sIG92ZXIgd2hlbiByZWRlcGxveW1lbnQgaGFwcGVucy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlQm9vdHN0cmFwPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVBhcmFtZXRlcnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBMRUFTVCh7REJJbnN0YW5jZUNsYXNzTWVtb3J5Lzk1MzEzOTJ9LCA1MDAwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q29ubmVjdGlvbnM6IHN0cmluZztcblxuICAvKipcbiAgICogTm90ZTogVGhpcyB2YWx1ZSBpcyBtZWFzdXJlZCBpbiA4S0IgYmxvY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAne0RCSW5zdGFuY2VDbGFzc01lbW9yeS8zMjc2OH0nIDI1JSBvZiBpbnN0YW5jZSBtZW1vcnksIGllIGB7KERCSW5zdGFuY2VDbGFzc01lbW9yeS8oMTAyNCo4KSkgKiAwLjI1fWBcbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlZEJ1ZmZlcnM6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSA3NSUgb2YgaW5zdGFuY2UgbWVtb3J5XG4gICAqL1xuICByZWFkb25seSBlZmZlY3RpdmVDYWNoZVNpemU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSBzaGFyZWQgYnVmZmVycyBkaXZpZGVkIGJ5IG1heCBjb25uZWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya01lbTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIDI1JSBvZiBzaGFyZWQgYnVmZmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgbWFpbnRlbmFuY2VXb3JrTWVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IDEwMjRcbiAgICovXG4gIHJlYWRvbmx5IG1heExvY2tzUGVyVHJhbnNhY3Rpb246IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMTMxMTcyICgxMjggKiAxMDI0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcEJ1ZmZlcnM6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgc2VxUGFnZUNvc3Q6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMS4xXG4gICAqL1xuICByZWFkb25seSByYW5kb21QYWdlQ29zdDogc3RyaW5nO1xufVxuIl19