@aws-cdk/aws-bedrock-agentcore-alpha 2.253.0-alpha.0 → 2.254.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/.jsii +17116 -11830
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/README.md +140 -10
  4. package/lib/evaluation/custom-evaluator.d.ts +9 -0
  5. package/lib/evaluation/custom-evaluator.js +8 -2
  6. package/lib/evaluation/data-source.js +1 -1
  7. package/lib/evaluation/evaluator-base.js +1 -1
  8. package/lib/evaluation/evaluator-config.js +2 -2
  9. package/lib/evaluation/evaluator.js +1 -1
  10. package/lib/evaluation/online-evaluation-base.js +1 -1
  11. package/lib/evaluation/online-evaluation.d.ts +9 -0
  12. package/lib/evaluation/online-evaluation.js +8 -2
  13. package/lib/evaluation/types.js +5 -5
  14. package/lib/evaluation/validation-helpers.d.ts +8 -0
  15. package/lib/evaluation/validation-helpers.js +62 -1
  16. package/lib/gateway/gateway-base.js +1 -1
  17. package/lib/gateway/gateway.d.ts +3 -2
  18. package/lib/gateway/gateway.js +3 -3
  19. package/lib/gateway/inbound-auth/authorizer.js +4 -4
  20. package/lib/gateway/inbound-auth/custom-claim.js +1 -1
  21. package/lib/gateway/interceptor.js +1 -1
  22. package/lib/gateway/outbound-auth/api-key.d.ts +13 -4
  23. package/lib/gateway/outbound-auth/api-key.js +63 -21
  24. package/lib/gateway/outbound-auth/credential-provider.d.ts +48 -4
  25. package/lib/gateway/outbound-auth/credential-provider.js +49 -2
  26. package/lib/gateway/outbound-auth/iam-role.d.ts +4 -3
  27. package/lib/gateway/outbound-auth/iam-role.js +3 -5
  28. package/lib/gateway/outbound-auth/oauth.d.ts +11 -3
  29. package/lib/gateway/outbound-auth/oauth.js +70 -20
  30. package/lib/gateway/perms.d.ts +15 -3
  31. package/lib/gateway/perms.js +24 -9
  32. package/lib/gateway/protocol.js +2 -2
  33. package/lib/gateway/targets/schema/api-schema.js +4 -4
  34. package/lib/gateway/targets/schema/tool-schema.js +4 -4
  35. package/lib/gateway/targets/target-base.js +1 -1
  36. package/lib/gateway/targets/target-configuration.js +6 -6
  37. package/lib/gateway/targets/target.js +3 -3
  38. package/lib/identity/api-key-credential-provider.d.ts +217 -0
  39. package/lib/identity/api-key-credential-provider.js +249 -0
  40. package/lib/identity/grant-helpers.d.ts +74 -0
  41. package/lib/identity/grant-helpers.js +132 -0
  42. package/lib/identity/oauth2-credential-provider.d.ts +679 -0
  43. package/lib/identity/oauth2-credential-provider.js +863 -0
  44. package/lib/identity/perms.d.ts +119 -0
  45. package/lib/identity/perms.js +178 -0
  46. package/lib/identity/validation-helpers.d.ts +61 -0
  47. package/lib/identity/validation-helpers.js +156 -0
  48. package/lib/identity/workload-identity.d.ts +186 -0
  49. package/lib/identity/workload-identity.js +212 -0
  50. package/lib/index.d.ts +4 -0
  51. package/lib/index.js +8 -1
  52. package/lib/memory/memory-strategy.js +1 -1
  53. package/lib/memory/memory.js +2 -2
  54. package/lib/memory/strategies/managed-strategy.js +1 -1
  55. package/lib/memory/strategies/self-managed-strategy.js +1 -1
  56. package/lib/memory/validation-helpers.js +2 -2
  57. package/lib/network/network-configuration.js +4 -4
  58. package/lib/policy/policy-base.js +1 -1
  59. package/lib/policy/policy-engine-base.js +1 -1
  60. package/lib/policy/policy-engine.js +1 -1
  61. package/lib/policy/policy-statement.d.ts +2 -1
  62. package/lib/policy/policy-statement.js +14 -12
  63. package/lib/policy/policy-types.js +1 -1
  64. package/lib/policy/policy.js +1 -1
  65. package/lib/runtime/inbound-auth/custom-claim.js +1 -1
  66. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
  67. package/lib/runtime/observability.js +2 -2
  68. package/lib/runtime/runtime-artifact.d.ts +11 -3
  69. package/lib/runtime/runtime-artifact.js +12 -4
  70. package/lib/runtime/runtime-base.js +1 -1
  71. package/lib/runtime/runtime-endpoint-base.js +1 -1
  72. package/lib/runtime/runtime-endpoint.js +1 -1
  73. package/lib/runtime/runtime.js +1 -1
  74. package/lib/runtime/types.d.ts +7 -1
  75. package/lib/runtime/types.js +7 -1
  76. package/lib/tools/browser.js +2 -2
  77. package/lib/tools/code-interpreter.js +2 -2
  78. package/package.json +18 -10
Binary file
package/README.md CHANGED
@@ -98,6 +98,8 @@ This construct library facilitates the deployment of Bedrock AgentCore primitive
98
98
  - [Tools schema For Lambda target](#tools-schema-for-lambda-target)
99
99
  - [Api schema For OpenAPI and Smithy target](#api-schema-for-openapi-and-smithy-target)
100
100
  - [Outbound auth](#outbound-auth)
101
+ - [Token Vault credential providers](#token-vault-credential-providers)
102
+ - [Workload identities](#workload-identities)
101
103
  - [Basic Gateway Target Creation](#basic-gateway-target-creation)
102
104
  - [Using addTarget methods (Recommended)](#using-addtarget-methods-recommended)
103
105
  - [Using static factory methods](#using-static-factory-methods)
@@ -1517,7 +1519,7 @@ credential provider attached enabling you to securely access targets whether the
1517
1519
  | `description` | `string` | No | Optional description for the gateway target. Maximum 200 characters |
1518
1520
  | `gateway` | `IGateway` | Yes | The gateway this target belongs to |
1519
1521
  | `targetConfiguration` | `ITargetConfiguration` | Yes | The target configuration (Lambda, OpenAPI, Smithy, or API Gateway). **Note:** Users typically don't create this directly. When using convenience methods like `GatewayTarget.forLambda()`, `GatewayTarget.forOpenApi()`, `GatewayTarget.forSmithy()`, `GatewayTarget.forApiGateway()`, `GatewayTarget.forMcpServer()` or the gateway's `addLambdaTarget()`, `addOpenApiTarget()`, `addSmithyTarget()`, `addApiGatewayTarget()`, `addMcpServerTarget()` methods, this configuration is created internally for you. Only needed when using the GatewayTarget constructor directly for [advanced scenarios](#advanced-usage-direct-configuration-for-gateway-target). |
1520
- | `credentialProviderConfigurations` | `IGatewayCredentialProvider[]` | No | Credential providers for authentication. Defaults to `[GatewayCredentialProvider.fromIamRole()]`. Use `GatewayCredentialProvider.fromApiKeyIdentityArn()`, `GatewayCredentialProvider.fromOauthIdentityArn()`, or `GatewayCredentialProvider.fromIamRole()` |
1522
+ | `credentialProviderConfigurations` | `IGatewayCredentialProvider[]` | No | Credential providers for authentication. Defaults to `[GatewayCredentialProvider.fromIamRole()]`. With Token Vault L2 constructs, prefer `GatewayCredentialProvider.fromApiKeyIdentity()` / `fromOauthIdentity()`; otherwise use `fromApiKeyIdentityArn()` / `fromOauthIdentityArn()`, or `fromIamRole()` |
1521
1523
  | `validateOpenApiSchema` | `boolean` | No | (OpenAPI targets only) Whether to validate the OpenAPI schema at synthesis time. Defaults to `true`. Only applies to inline and local asset schemas. For more information refer here <https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-schema-openapi.html> |
1522
1524
 
1523
1525
  This approach gives you full control over the configuration but is typically not necessary for most use cases.
@@ -1724,6 +1726,93 @@ The gateway authenticates on its own behalf, not on behalf of a user.
1724
1726
 
1725
1727
  **Note > You need to set up the outbound identity before you can create a gateway target.
1726
1728
 
1729
+ #### Token Vault credential providers
1730
+
1731
+ AgentCore stores outbound **API key** and **OAuth2** client credentials in Token Vault. This module includes L2 constructs that create those resources and connect them to gateway targets.
1732
+
1733
+ **Shared OAuth2 fields** — Every `OAuth2CredentialProvider` factory accepts the same **`clientId`** and **`clientSecret`**, plus optional **`oAuth2CredentialProviderName`** and **`tags`**. Extra properties appear only when an IdP needs them (for example **`tenantId`** for Microsoft, or **`issuer`** / endpoint overrides for Okta and other *included* configurations).
1734
+
1735
+ **Vendor factories** — Prefer `OAuth2CredentialProvider.usingSlack`, `.usingGithub`, `.usingGoogle`, `.usingMicrosoft`, `.usingOkta`, `.usingAuth0`, `.usingCognito`, and the other `using*` helpers for known providers. Each maps to the matching CloudFormation *included* provider configuration.
1736
+
1737
+ **Custom OAuth2 (`usingCustom`)** — Supply **exactly one** of:
1738
+
1739
+ - **`discoveryUrl`** — OIDC/OAuth2 discovery document URL (for example `https://idp.example.com/.well-known/openid-configuration`), or
1740
+ - **`authorizationServerMetadata`** — Manual authorization server metadata (`issuer`, `authorizationEndpoint`, `tokenEndpoint`, and other fields supported by the `AWS::BedrockAgentCore::OAuth2CredentialProvider` resource).
1741
+
1742
+ Do not pass both. The construct validates this at synthesis time when values are known; if you use CDK tokens, ensure the resolved template still satisfies the service rules.
1743
+
1744
+ **Wiring to gateway targets** — After you create a provider in CDK, pass the construct to **`GatewayCredentialProvider.fromOauthIdentity()`** or **`fromApiKeyIdentity()`** (optional API key header/query settings go in the second argument for API keys). Alternatively, call **`bindForGatewayOAuthTarget`** / **`bindForGatewayApiKeyTarget`** on the provider and pass that object to **`fromOauthIdentityArn`** / **`fromApiKeyIdentityArn`**. You can still pass raw ARNs from the console or API when the provider already exists.
1745
+
1746
+ **Example: GitHub OAuth2 and an MCP target**
1747
+
1748
+ ```typescript fixture=default
1749
+ const gateway = new agentcore.Gateway(this, "MyGateway", {
1750
+ gatewayName: "my-gateway",
1751
+ });
1752
+
1753
+ const oauth = agentcore.OAuth2CredentialProvider.usingGithub(this, "GhOAuth", {
1754
+ oAuth2CredentialProviderName: "github-oauth",
1755
+ clientId: "your-client-id",
1756
+ clientSecret: cdk.SecretValue.unsafePlainText("your-client-secret"),
1757
+ });
1758
+
1759
+ gateway.addMcpServerTarget("Mcp", {
1760
+ gatewayTargetName: "mcp-server",
1761
+ description: "MCP with GitHub OAuth",
1762
+ endpoint: "https://my-mcp-server.example.com",
1763
+ credentialProviderConfigurations: [
1764
+ agentcore.GatewayCredentialProvider.fromOauthIdentity(oauth, {
1765
+ scopes: ["read:user"],
1766
+ }),
1767
+ ],
1768
+ });
1769
+ ```
1770
+
1771
+ **Example: custom IdP with a discovery URL**
1772
+
1773
+ ```typescript fixture=default
1774
+ agentcore.OAuth2CredentialProvider.usingCustom(this, "CustomOAuth", {
1775
+ oAuth2CredentialProviderName: "custom-idp",
1776
+ clientId: "your-client-id",
1777
+ clientSecret: cdk.SecretValue.unsafePlainText("your-client-secret"),
1778
+ discoveryUrl: "https://idp.example.com/.well-known/openid-configuration",
1779
+ });
1780
+ ```
1781
+
1782
+ **Example: custom IdP with explicit authorization server metadata**
1783
+
1784
+ ```typescript fixture=default
1785
+ agentcore.OAuth2CredentialProvider.usingCustom(this, "CustomOAuthMeta", {
1786
+ clientId: "your-client-id",
1787
+ clientSecret: cdk.SecretValue.unsafePlainText("your-client-secret"),
1788
+ authorizationServerMetadata: {
1789
+ issuer: "https://idp.example.com",
1790
+ authorizationEndpoint: "https://idp.example.com/oauth2/authorize",
1791
+ tokenEndpoint: "https://idp.example.com/oauth2/token",
1792
+ },
1793
+ });
1794
+ ```
1795
+
1796
+ #### Workload identities
1797
+
1798
+ A **workload identity** is the stable identity of an agent in your AWS account within the AgentCore Identity model. It ties together IAM roles, OAuth2 flows, API keys, and workload access tokens so agents can authenticate consistently across environments. For conceptual background, see [Understanding workload identities](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/understanding-agent-identities.html).
1799
+
1800
+ **Agent identity directory** — Each account has a single logical directory that holds every workload identity, whether it was created by AgentCore Runtime, AgentCore Gateway, or manually (for example through CloudFormation or the control-plane API). The directory is created automatically when the first workload identity exists. Resource ARNs follow the pattern described in [Understanding the agent identity directory](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agent-identity-directory.html) (`workload-identity-directory/default` and child `workload-identity/<name>` entries).
1801
+
1802
+ **When to create one in CDK** — Runtime and Gateway can create workload identities for you during deployment. Use the **`WorkloadIdentity`** L2 when you need a **manually defined** identity (custom name, allowed OAuth2 return URLs, tags) or when integrating workloads that are not driven by those services.
1803
+
1804
+ **Construct** — `WorkloadIdentity` maps to **`AWS::BedrockAgentCore::WorkloadIdentity`**. It exposes `workloadIdentityArn`, `workloadIdentityName`, and `workloadIdentityRef` for wiring into IAM or other AgentCore resources. Import an existing identity with **`WorkloadIdentity.fromWorkloadIdentityAttributes`**. Grant helpers (`grantRead`, `grantAdmin`, `grantFullAccess`) align with [directory-level IAM patterns](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agent-identity-directory.html#directory-access-control-and-permissions) such as listing identities on the directory resource and scoping mutations to specific identity ARNs.
1805
+
1806
+ **Example**
1807
+
1808
+ ```typescript fixture=default
1809
+ new agentcore.WorkloadIdentity(this, "MyWorkloadIdentity", {
1810
+ workloadIdentityName: "customer-support-agent-prod",
1811
+ allowedResourceOauth2ReturnUrls: ["https://app.example.com/oauth/callback"],
1812
+ tags: { team: "agents", env: "prod" },
1813
+ });
1814
+ ```
1815
+
1727
1816
  ### Basic Gateway Target Creation
1728
1817
 
1729
1818
  You can create targets in two ways: using the static factory methods on `GatewayTarget` or using the convenient `addTarget` methods on the gateway instance.
@@ -1776,21 +1865,54 @@ const lambdaTarget = gateway.addLambdaTarget("MyLambdaTarget", {
1776
1865
  });
1777
1866
  ```
1778
1867
 
1779
- - OpenAPI Target
1868
+ - OpenAPI Target (using Token Vault L2 construct — preferred)
1780
1869
 
1781
1870
  ``` typescript
1782
1871
  const gateway = new agentcore.Gateway(this, "MyGateway", {
1783
1872
  gatewayName: "my-gateway",
1784
1873
  });
1785
1874
 
1786
- // These ARNs are returned when creating the API key credential provider via Console or API
1875
+ // Create an API key credential provider in Token Vault
1876
+ const apiKeyProvider = new agentcore.ApiKeyCredentialProvider(this, "MyApiKeyProvider", {
1877
+ apiKeyCredentialProviderName: "my-apikey",
1878
+ });
1879
+
1880
+ const bucket = s3.Bucket.fromBucketName(this, "ExistingBucket", "my-schema-bucket");
1881
+ const s3mySchema = agentcore.ApiSchema.fromS3File(bucket, "schemas/myschema.yaml");
1882
+
1883
+ // Add an OpenAPI target using the L2 construct directly
1884
+ const target = gateway.addOpenApiTarget("MyTarget", {
1885
+ gatewayTargetName: "my-api-target",
1886
+ description: "Target for external API integration",
1887
+ apiSchema: s3mySchema,
1888
+ credentialProviderConfigurations: [
1889
+ agentcore.GatewayCredentialProvider.fromApiKeyIdentity(apiKeyProvider, {
1890
+ credentialLocation: agentcore.ApiKeyCredentialLocation.header({
1891
+ credentialParameterName: "X-API-Key",
1892
+ }),
1893
+ }),
1894
+ ],
1895
+ });
1896
+
1897
+ // This makes sure your s3 bucket is available before target
1898
+ target.node.addDependency(bucket);
1899
+ ```
1900
+
1901
+ - OpenAPI Target (using ARNs — for providers created outside of CDK)
1902
+
1903
+ ``` typescript
1904
+ const gateway = new agentcore.Gateway(this, "MyGateway", {
1905
+ gatewayName: "my-gateway",
1906
+ });
1907
+
1908
+ // ARNs from the console/API, or from ApiKeyCredentialProvider + bindForGatewayApiKeyTarget
1787
1909
  const apiKeyProviderArn = "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/abc123/apikeycredentialprovider/my-apikey"
1788
1910
  const apiKeySecretArn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-apikey-secret-abc123"
1789
1911
 
1790
1912
  const bucket = s3.Bucket.fromBucketName(this, "ExistingBucket", "my-schema-bucket");
1791
1913
  const s3mySchema = agentcore.ApiSchema.fromS3File(bucket, "schemas/myschema.yaml");
1792
1914
 
1793
- // Add an OpenAPI target directly to the gateway
1915
+ // Add an OpenAPI target using ARNs directly
1794
1916
  const target = gateway.addOpenApiTarget("MyTarget", {
1795
1917
  gatewayTargetName: "my-api-target",
1796
1918
  description: "Target for external API integration",
@@ -1806,7 +1928,7 @@ const target = gateway.addOpenApiTarget("MyTarget", {
1806
1928
  ],
1807
1929
  });
1808
1930
 
1809
- // This make sure your s3 bucket is available before target
1931
+ // This makes sure your s3 bucket is available before target
1810
1932
  target.node.addDependency(bucket);
1811
1933
  ```
1812
1934
 
@@ -1838,8 +1960,7 @@ const gateway = new agentcore.Gateway(this, "MyGateway", {
1838
1960
  gatewayName: "my-gateway",
1839
1961
  });
1840
1962
 
1841
- // OAuth2 authentication (recommended)
1842
- // Note: Create the OAuth provider using AWS console or Identity L2 construct when available
1963
+ // OAuth2 (recommended): use OAuth2CredentialProvider + bindForGatewayOAuthTarget, or ARNs from console/API
1843
1964
  const oauthProviderArn = "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/abc123/oauth2credentialprovider/my-oauth";
1844
1965
  const oauthSecretArn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-oauth-secret-abc123";
1845
1966
 
@@ -1948,7 +2069,7 @@ const gateway = new agentcore.Gateway(this, "MyGateway", {
1948
2069
  gatewayName: "my-gateway",
1949
2070
  });
1950
2071
 
1951
- // outbound auth (Use AWS console to create it, Once Identity L2 construct is available you can use it to create identity)
2072
+ // Outbound auth: ApiKeyCredentialProvider + bindForGatewayApiKeyTarget, or ARNs from console/API
1952
2073
  const apiKeyIdentityArn = "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/abc123/apikeycredentialprovider/my-apikey"
1953
2074
  const apiKeySecretArn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-apikey-secret-abc123"
1954
2075
 
@@ -2001,8 +2122,7 @@ const gateway = new agentcore.Gateway(this, "MyGateway", {
2001
2122
  gatewayName: "my-gateway",
2002
2123
  });
2003
2124
 
2004
- // OAuth2 authentication (recommended)
2005
- // Note: Create the OAuth provider using AWS console or Identity L2 construct when available
2125
+ // OAuth2 (recommended): use OAuth2CredentialProvider + bindForGatewayOAuthTarget, or ARNs from console/API
2006
2126
  const oauthProviderArn = "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/abc123/oauth2credentialprovider/my-oauth";
2007
2127
  const oauthSecretArn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-oauth-secret-abc123";
2008
2128
 
@@ -3009,6 +3129,15 @@ policyEngine.grantEvaluate(lambdaRole);
3009
3129
 
3010
3130
  The Online Evaluation construct enables continuous monitoring and assessment of your agent's performance using live traffic. It automatically samples agent traces from CloudWatch Logs or Agent Endpoints and applies built-in evaluators to assess quality metrics like helpfulness, correctness, and safety.
3011
3131
 
3132
+ ### Prerequisites
3133
+
3134
+ Before creating an `OnlineEvaluationConfig`, ensure the following are configured in your account:
3135
+
3136
+ - **CloudWatch Transaction Search** enabled — this creates the `aws/spans` log group required by the evaluation service. See [Enable Transaction Search](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability-configure.html).
3137
+ - **AWS Distro for OpenTelemetry (ADOT) SDK** instrumenting your agent to emit traces.
3138
+
3139
+ For full details, see [AgentCore Evaluations Prerequisites](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/evaluations-prerequisites.html).
3140
+
3012
3141
  ### Online Evaluation Properties
3013
3142
 
3014
3143
  | Name | Type | Required | Description |
@@ -3103,6 +3232,7 @@ Custom evaluators let you define evaluation logic tailored to your specific use
3103
3232
  | `evaluatorConfig` | `EvaluatorConfig` | Yes | Configuration defining how the evaluator assesses performance |
3104
3233
  | `level` | `EvaluationLevel` | Yes | The level at which the evaluator operates: `TOOL_CALL`, `TRACE`, or `SESSION` |
3105
3234
  | `description` | `string` | No | Description of the evaluator. Maximum 200 characters |
3235
+ | `tags` | `{ [key: string]: string }` | No | Tags for the evaluator. A list of key:value pairs to apply to this Evaluator resource |
3106
3236
 
3107
3237
  #### LLM-as-a-Judge Evaluator
3108
3238
 
@@ -48,6 +48,15 @@ export interface EvaluatorProps {
48
48
  * @maxLength 200
49
49
  */
50
50
  readonly description?: string;
51
+ /**
52
+ * Tags for the evaluator.
53
+ * A list of key:value pairs of tags to apply to this Evaluator resource.
54
+ *
55
+ * @default - No tags
56
+ */
57
+ readonly tags?: {
58
+ [key: string]: string;
59
+ };
51
60
  }
52
61
  /**
53
62
  * A custom evaluator for Amazon Bedrock AgentCore.
@@ -110,7 +110,7 @@ let Evaluator = (() => {
110
110
  Evaluator = _classThis = _classDescriptor.value;
111
111
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
112
112
  }
113
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Evaluator", version: "2.253.0-alpha.0" };
113
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Evaluator", version: "2.254.0-alpha.0" };
114
114
  /** Uniquely identifies this class. */
115
115
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Evaluator';
116
116
  /**
@@ -223,12 +223,18 @@ let Evaluator = (() => {
223
223
  (0, metadata_resource_1.addConstructMetadata)(this, props);
224
224
  (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateEvaluatorName, props.evaluatorName, this);
225
225
  (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateDescription, props.description, this);
226
+ if (props.tags) {
227
+ (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateEvaluatorTags, props.tags, this);
228
+ }
226
229
  this.evaluatorName = this.physicalName;
227
230
  const resource = new bedrockagentcore.CfnEvaluator(this, 'Resource', {
228
231
  evaluatorName: this.physicalName,
229
232
  evaluatorConfig: props.evaluatorConfig._bind(),
230
233
  level: props.level.value,
231
234
  description: props.description,
235
+ tags: props.tags && Object.keys(props.tags).length > 0
236
+ ? Object.entries(props.tags).map(([key, value]) => ({ key, value }))
237
+ : undefined,
232
238
  });
233
239
  // If code-based, grant the bedrock-agentcore service permission to invoke
234
240
  // the Lambda function, scoped to this specific evaluator for confused deputy prevention.
@@ -253,4 +259,4 @@ let Evaluator = (() => {
253
259
  return Evaluator = _classThis;
254
260
  })();
255
261
  exports.Evaluator = Evaluator;
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImN1c3RvbS1ldmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCw2Q0FBb0Q7QUFDcEQscUVBQXFFO0FBQ3JFLDJDQUEyQztBQUMzQyw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLHFEQUFrRTtBQUdsRSw2REFJOEI7QUF5QzlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7SUFFVSxTQUFTOzRCQURyQixvQ0FBa0I7Ozs7c0JBQ1ksOEJBQWE7eUJBQXJCLFNBQVEsV0FBYTs7OztZQUE1Qyw2S0F5SkM7Ozs7O1FBeEpDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQzFDLGdEQUFnRCxDQUFDO1FBRW5EOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMsZUFBZSxDQUMzQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsV0FBbUI7WUFFbkIsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxZQUFZLEdBQUcsaUJBQUcsQ0FBQyxNQUFNLENBQzdCO2dCQUNFLE9BQU8sRUFBRSxtQkFBbUI7Z0JBQzVCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixZQUFZLEVBQUUsV0FBVzthQUMxQixFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsT0FBTyxTQUFTLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDbEQsWUFBWTtnQkFDWixXQUFXO2FBQ1osQ0FBQyxDQUFDO1NBQ0o7UUFFRDs7Ozs7OztXQU9HO1FBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUM1QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsWUFBb0I7WUFFcEIsTUFBTSxRQUFRLEdBQUcsaUJB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QUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1NBQ3pDOztZQXhKVSx1REFBUzs7Ozs7QUFBVCw4QkFBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IHR5cGUgSUV2YWx1YXRvciwgRXZhbHVhdG9yQmFzZSB9IGZyb20gJy4vZXZhbHVhdG9yLWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0b3JDb25maWcgfSBmcm9tICcuL2V2YWx1YXRvci1jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0aW9uTGV2ZWwsIEV2YWx1YXRvckF0dHJpYnV0ZXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIHRocm93SWZJbnZhbGlkLFxuICB2YWxpZGF0ZURlc2NyaXB0aW9uLFxuICB2YWxpZGF0ZUV2YWx1YXRvck5hbWUsXG59IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBFdmFsdWF0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdG9yUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGV2YWx1YXRvci5cbiAgICpcbiAgICogTXVzdCBiZSB1bmlxdWUgd2l0aGluIHlvdXIgYWNjb3VudC4gVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkuXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZy5cbiAgICpcbiAgICogQHBhdHRlcm4gXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICAgKi9cbiAgcmVhZG9ubHkgZXZhbHVhdG9yTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiB0aGF0IGRlZmluZXMgaG93IHRoZSBldmFsdWF0b3IgYXNzZXNzZXMgYWdlbnQgcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIFVzZSBgRXZhbHVhdG9yQ29uZmlnLmxsbUFzQUp1ZGdlKClgIGZvciBtb2RlbC1iYXNlZCBldmFsdWF0aW9uIG9yXG4gICAqIGBFdmFsdWF0b3JDb25maWcuY29kZUJhc2VkKClgIGZvciBMYW1iZGEtYmFzZWQgZXZhbHVhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGV2YWx1YXRvckNvbmZpZzogRXZhbHVhdG9yQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgbGV2ZWwgYXQgd2hpY2ggdGhlIGV2YWx1YXRvciBhc3Nlc3NlcyBhZ2VudCBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogRGV0ZXJtaW5lcyB3aGF0IGdyYW51bGFyaXR5IG9mIGRhdGEgdGhlIGV2YWx1YXRvciBvcGVyYXRlcyBvbjpcbiAgICogdG9vbCBjYWxsLCB0cmFjZSAoc2luZ2xlIHJlcXVlc3QtcmVzcG9uc2UpLCBvciBzZXNzaW9uIChmdWxsIGNvbnZlcnNhdGlvbikuXG4gICAqL1xuICByZWFkb25seSBsZXZlbDogRXZhbHVhdGlvbkxldmVsO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGV2YWx1YXRvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKiBAbWF4TGVuZ3RoIDIwMFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjdXN0b20gZXZhbHVhdG9yIGZvciBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUuXG4gKlxuICogQ3VzdG9tIGV2YWx1YXRvcnMgZW5hYmxlIHlvdSB0byBkZWZpbmUgZXZhbHVhdGlvbiBsb2dpYyB0YWlsb3JlZCB0byB5b3VyIHNwZWNpZmljXG4gKiB1c2UgY2FzZXMuIFN1cHBvcnRzIHR3byBldmFsdWF0aW9uIHN0cmF0ZWdpZXM6XG4gKiAtICoqTExNLWFzLWEtSnVkZ2UqKjogVXNlcyBhIGZvdW5kYXRpb24gbW9kZWwgd2l0aCBjdXN0b20gaW5zdHJ1Y3Rpb25zIGFuZCBhIHJhdGluZyBzY2FsZS5cbiAqIC0gKipDb2RlLWJhc2VkKio6IFVzZXMgYSBMYW1iZGEgZnVuY3Rpb24gZm9yIGN1c3RvbSBldmFsdWF0aW9uIGxvZ2ljLlxuICpcbiAqIEN1c3RvbSBldmFsdWF0b3JzIGFyZSB1c2VkIHdpdGggYE9ubGluZUV2YWx1YXRpb25Db25maWdgIHZpYSBgRXZhbHVhdG9yUmVmZXJlbmNlLmN1c3RvbSgpYC5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpFdmFsdWF0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgY3VzdG9tIExMTS1hcy1hLUp1ZGdlIGV2YWx1YXRvclxuICogY29uc3QgZXZhbHVhdG9yID0gbmV3IGFnZW50Y29yZS5FdmFsdWF0b3IodGhpcywgJ015RXZhbHVhdG9yJywge1xuICogICBldmFsdWF0b3JOYW1lOiAnbXlfY3VzdG9tX2V2YWx1YXRvcicsXG4gKiAgIGxldmVsOiBhZ2VudGNvcmUuRXZhbHVhdGlvbkxldmVsLlNFU1NJT04sXG4gKiAgIGV2YWx1YXRvckNvbmZpZzogYWdlbnRjb3JlLkV2YWx1YXRvckNvbmZpZy5sbG1Bc0FKdWRnZSh7XG4gKiAgICAgaW5zdHJ1Y3Rpb25zOiAnRXZhbHVhdGUgd2hldGhlciB0aGUgYWdlbnQgcmVzcG9uc2UgaXMgaGVscGZ1bCBhbmQgYWNjdXJhdGUuJyxcbiAqICAgICBtb2RlbElkOiAndXMuYW50aHJvcGljLmNsYXVkZS1zb25uZXQtNC02JyxcbiAqICAgICByYXRpbmdTY2FsZTogYWdlbnRjb3JlLkV2YWx1YXRvclJhdGluZ1NjYWxlLmNhdGVnb3JpY2FsKFtcbiAqICAgICAgIHsgbGFiZWw6ICdHb29kJywgZGVmaW5pdGlvbjogJ1RoZSByZXNwb25zZSBpcyBoZWxwZnVsIGFuZCBhY2N1cmF0ZS4nIH0sXG4gKiAgICAgICB7IGxhYmVsOiAnQmFkJywgZGVmaW5pdGlvbjogJ1RoZSByZXNwb25zZSBpcyBub3QgaGVscGZ1bCBvciBjb250YWlucyBlcnJvcnMuJyB9LFxuICogICAgIF0pLFxuICogICB9KSxcbiAqIH0pO1xuICpcbiAqIC8vIFVzZSB0aGUgY3VzdG9tIGV2YWx1YXRvciBpbiBhbiBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uXG4gKiBuZXcgYWdlbnRjb3JlLk9ubGluZUV2YWx1YXRpb25Db25maWcodGhpcywgJ015RXZhbHVhdGlvbicsIHtcbiAqICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6ICdteV9ldmFsdWF0aW9uJyxcbiAqICAgZXZhbHVhdG9yczogW1xuICogICAgIGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuYnVpbHRpbihhZ2VudGNvcmUuQnVpbHRpbkV2YWx1YXRvci5IRUxQRlVMTkVTUyksXG4gKiAgICAgYWdlbnRjb3JlLkV2YWx1YXRvclJlZmVyZW5jZS5jdXN0b20oZXZhbHVhdG9yKSxcbiAqICAgXSxcbiAqICAgZGF0YVNvdXJjZTogYWdlbnRjb3JlLkRhdGFTb3VyY2VDb25maWcuZnJvbUNsb3VkV2F0Y2hMb2dzKHtcbiAqICAgICBsb2dHcm91cE5hbWVzOiBbJy9hd3MvYmVkcm9jay1hZ2VudGNvcmUvbXktYWdlbnQnXSxcbiAqICAgICBzZXJ2aWNlTmFtZXM6IFsnbXktYWdlbnQuZGVmYXVsdCddLFxuICogICB9KSxcbiAqIH0pO1xuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgRXZhbHVhdG9yQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPVxuICAgICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuRXZhbHVhdG9yJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEV2YWx1YXRvciBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGV2YWx1YXRvcklkIC0gVGhlIGV2YWx1YXRvciBJRCB0byBpbXBvcnRcbiAgICogQHJldHVybnMgQW4gSUV2YWx1YXRvciByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUV2YWx1YXRvcklkKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBldmFsdWF0b3JJZDogc3RyaW5nLFxuICApOiBJRXZhbHVhdG9yIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgICBjb25zdCBldmFsdWF0b3JBcm4gPSBBcm4uZm9ybWF0KFxuICAgICAge1xuICAgICAgICBzZXJ2aWNlOiAnYmVkcm9jay1hZ2VudGNvcmUnLFxuICAgICAgICByZXNvdXJjZTogJ2V2YWx1YXRvcicsXG4gICAgICAgIHJlc291cmNlTmFtZTogZXZhbHVhdG9ySWQsXG4gICAgICB9LFxuICAgICAgc3RhY2ssXG4gICAgKTtcblxuICAgIHJldHVybiBFdmFsdWF0b3IuZnJvbUV2YWx1YXRvckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBldmFsdWF0b3JBcm4sXG4gICAgICBldmFsdWF0b3JJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgRXZhbHVhdG9yIGJ5IGl0cyBBUk4uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGV2YWx1YXRvckFybiAtIFRoZSBldmFsdWF0b3IgQVJOIHRvIGltcG9ydFxuICAgKiBAcmV0dXJucyBBbiBJRXZhbHVhdG9yIHJlZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRXZhbHVhdG9yQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBldmFsdWF0b3JBcm46IHN0cmluZyxcbiAgKTogSUV2YWx1YXRvciB7XG4gICAgY29uc3QgYXJuUGFydHMgPSBBcm4uc3BsaXQoZXZhbHVhdG9yQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSk7XG4gICAgY29uc3QgZXZhbHVhdG9ySWQgPSBhcm5QYXJ0cy5yZXNvdXJjZU5hbWUhO1xuXG4gICAgcmV0dXJuIEV2YWx1YXRvci5mcm9tRXZhbHVhdG9yQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIGV2YWx1YXRvckFybixcbiAgICAgIGV2YWx1YXRvcklkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBFdmFsdWF0b3IgZnJvbSBpdHMgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gYXR0cnMgLSBUaGUgZXZhbHVhdG9yIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgQW4gSUV2YWx1YXRvciByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUV2YWx1YXRvckF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBFdmFsdWF0b3JBdHRyaWJ1dGVzLFxuICApOiBJRXZhbHVhdG9yIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBFdmFsdWF0b3JCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JBcm4gPSBhdHRycy5ldmFsdWF0b3JBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXZhbHVhdG9ySWQgPSBhdHRycy5ldmFsdWF0b3JJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JOYW1lID0gYXR0cnMuZXZhbHVhdG9yTmFtZSA/PyBhdHRycy5ldmFsdWF0b3JJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGV2YWx1YXRvci5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV2YWx1YXRvckFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGV2YWx1YXRvci5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV2YWx1YXRvcklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBldmFsdWF0b3IuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgc3RhdHVzIG9mIHRoZSBldmFsdWF0b3IuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgZXZhbHVhdG9yIHdhcyBjcmVhdGVkLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGV2YWx1YXRvciB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFdmFsdWF0b3JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5ldmFsdWF0b3JOYW1lLFxuICAgIH0pO1xuXG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVFdmFsdWF0b3JOYW1lLCBwcm9wcy5ldmFsdWF0b3JOYW1lLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZURlc2NyaXB0aW9uLCBwcm9wcy5kZXNjcmlwdGlvbiwgdGhpcyk7XG5cbiAgICB0aGlzLmV2YWx1YXRvck5hbWUgPSB0aGlzLnBoeXNpY2FsTmFtZTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IGJlZHJvY2thZ2VudGNvcmUuQ2ZuRXZhbHVhdG9yKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGV2YWx1YXRvck5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgZXZhbHVhdG9yQ29uZmlnOiBwcm9wcy5ldmFsdWF0b3JDb25maWcuX2JpbmQoKSxcbiAgICAgIGxldmVsOiBwcm9wcy5sZXZlbC52YWx1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICB9KTtcblxuICAgIC8vIElmIGNvZGUtYmFzZWQsIGdyYW50IHRoZSBiZWRyb2NrLWFnZW50Y29yZSBzZXJ2aWNlIHBlcm1pc3Npb24gdG8gaW52b2tlXG4gICAgLy8gdGhlIExhbWJkYSBmdW5jdGlvbiwgc2NvcGVkIHRvIHRoaXMgc3BlY2lmaWMgZXZhbHVhdG9yIGZvciBjb25mdXNlZCBkZXB1dHkgcHJldmVudGlvbi5cbiAgICBpZiAocHJvcHMuZXZhbHVhdG9yQ29uZmlnLmxhbWJkYUZ1bmN0aW9uKSB7XG4gICAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgICAgcHJvcHMuZXZhbHVhdG9yQ29uZmlnLmxhbWJkYUZ1bmN0aW9uLmFkZFBlcm1pc3Npb24oJ0JlZHJvY2tBZ2VudENvcmVFdmFsdWF0b3JJbnZva2UnLCB7XG4gICAgICAgIHByaW5jaXBhbDogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIHNvdXJjZUFjY291bnQ6IHN0YWNrLmFjY291bnQsXG4gICAgICAgIHNvdXJjZUFybjogcmVzb3VyY2UuYXR0ckV2YWx1YXRvckFybixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZXZhbHVhdG9yQXJuID0gcmVzb3VyY2UuYXR0ckV2YWx1YXRvckFybjtcbiAgICB0aGlzLmV2YWx1YXRvcklkID0gcmVzb3VyY2UuYXR0ckV2YWx1YXRvcklkO1xuICAgIHRoaXMuc3RhdHVzID0gcmVzb3VyY2UuYXR0clN0YXR1cztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHJlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSByZXNvdXJjZS5hdHRyVXBkYXRlZEF0O1xuICB9XG59XG4iXX0=
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImN1c3RvbS1ldmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCw2Q0FBb0Q7QUFDcEQscUVBQXFFO0FBQ3JFLDJDQUEyQztBQUMzQyw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLHFEQUFrRTtBQUdsRSw2REFLOEI7QUFpRDlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7SUFFVSxTQUFTOzRCQURyQixvQ0FBa0I7Ozs7c0JBQ1ksOEJBQWE7eUJBQXJCLFNBQVEsV0FBYTs7OztZQUE1Qyw2S0FnS0M7Ozs7O1FBL0pDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQzFDLGdEQUFnRCxDQUFDO1FBRW5EOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMsZUFBZSxDQUMzQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsV0FBbUI7WUFFbkIsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxZQUFZLEdBQUcsaUJBQUcsQ0FBQyxNQUFNLENBQzdCO2dCQUNFLE9BQU8sRUFBRSxtQkFBbUI7Z0JBQzVCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixZQUFZLEVBQUUsV0FBVzthQUMxQixFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsT0FBTyxTQUFTLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDbEQsWUFBWTtnQkFDWixXQUFXO2FBQ1osQ0FBQyxDQUFDO1NBQ0o7UUFFRDs7Ozs7OztXQU9HO1FBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUM1QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsWUFBb0I7WUFFcEIsTUFBTSxRQUFRLEdBQUcsaUJB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QUFjLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsRUFBRTtvQkFDcEYsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLGlDQUFpQyxDQUFDO29CQUN0RSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU87b0JBQzVCLFNBQVMsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO2lCQUNyQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1lBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1NBQ3pDOztZQS9KVSx1REFBUzs7Ozs7QUFBVCw4QkFBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IHR5cGUgSUV2YWx1YXRvciwgRXZhbHVhdG9yQmFzZSB9IGZyb20gJy4vZXZhbHVhdG9yLWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0b3JDb25maWcgfSBmcm9tICcuL2V2YWx1YXRvci1jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0aW9uTGV2ZWwsIEV2YWx1YXRvckF0dHJpYnV0ZXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIHRocm93SWZJbnZhbGlkLFxuICB2YWxpZGF0ZURlc2NyaXB0aW9uLFxuICB2YWxpZGF0ZUV2YWx1YXRvck5hbWUsXG4gIHZhbGlkYXRlRXZhbHVhdG9yVGFncyxcbn0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIEV2YWx1YXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0b3JQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKlxuICAgKiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4geW91ciBhY2NvdW50LiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKS5cbiAgICogTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjYW4gYmUgdXAgdG8gNDggY2hhcmFjdGVycyBsb25nLlxuICAgKlxuICAgKiBAcGF0dGVybiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0b3JOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHRoYXQgZGVmaW5lcyBob3cgdGhlIGV2YWx1YXRvciBhc3Nlc3NlcyBhZ2VudCBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogVXNlIGBFdmFsdWF0b3JDb25maWcubGxtQXNBSnVkZ2UoKWAgZm9yIG1vZGVsLWJhc2VkIGV2YWx1YXRpb24gb3JcbiAgICogYEV2YWx1YXRvckNvbmZpZy5jb2RlQmFzZWQoKWAgZm9yIExhbWJkYS1iYXNlZCBldmFsdWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZhbHVhdG9yQ29uZmlnOiBFdmFsdWF0b3JDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBsZXZlbCBhdCB3aGljaCB0aGUgZXZhbHVhdG9yIGFzc2Vzc2VzIGFnZW50IHBlcmZvcm1hbmNlLlxuICAgKlxuICAgKiBEZXRlcm1pbmVzIHdoYXQgZ3JhbnVsYXJpdHkgb2YgZGF0YSB0aGUgZXZhbHVhdG9yIG9wZXJhdGVzIG9uOlxuICAgKiB0b29sIGNhbGwsIHRyYWNlIChzaW5nbGUgcmVxdWVzdC1yZXNwb25zZSksIG9yIHNlc3Npb24gKGZ1bGwgY29udmVyc2F0aW9uKS5cbiAgICovXG4gIHJlYWRvbmx5IGxldmVsOiBFdmFsdWF0aW9uTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqIEBtYXhMZW5ndGggMjAwXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBmb3IgdGhlIGV2YWx1YXRvci5cbiAgICogQSBsaXN0IG9mIGtleTp2YWx1ZSBwYWlycyBvZiB0YWdzIHRvIGFwcGx5IHRvIHRoaXMgRXZhbHVhdG9yIHJlc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIEEgY3VzdG9tIGV2YWx1YXRvciBmb3IgQW1hem9uIEJlZHJvY2sgQWdlbnRDb3JlLlxuICpcbiAqIEN1c3RvbSBldmFsdWF0b3JzIGVuYWJsZSB5b3UgdG8gZGVmaW5lIGV2YWx1YXRpb24gbG9naWMgdGFpbG9yZWQgdG8geW91ciBzcGVjaWZpY1xuICogdXNlIGNhc2VzLiBTdXBwb3J0cyB0d28gZXZhbHVhdGlvbiBzdHJhdGVnaWVzOlxuICogLSAqKkxMTS1hcy1hLUp1ZGdlKio6IFVzZXMgYSBmb3VuZGF0aW9uIG1vZGVsIHdpdGggY3VzdG9tIGluc3RydWN0aW9ucyBhbmQgYSByYXRpbmcgc2NhbGUuXG4gKiAtICoqQ29kZS1iYXNlZCoqOiBVc2VzIGEgTGFtYmRhIGZ1bmN0aW9uIGZvciBjdXN0b20gZXZhbHVhdGlvbiBsb2dpYy5cbiAqXG4gKiBDdXN0b20gZXZhbHVhdG9ycyBhcmUgdXNlZCB3aXRoIGBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnYCB2aWEgYEV2YWx1YXRvclJlZmVyZW5jZS5jdXN0b20oKWAuXG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6RXZhbHVhdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIGN1c3RvbSBMTE0tYXMtYS1KdWRnZSBldmFsdWF0b3JcbiAqIGNvbnN0IGV2YWx1YXRvciA9IG5ldyBhZ2VudGNvcmUuRXZhbHVhdG9yKHRoaXMsICdNeUV2YWx1YXRvcicsIHtcbiAqICAgZXZhbHVhdG9yTmFtZTogJ215X2N1c3RvbV9ldmFsdWF0b3InLFxuICogICBsZXZlbDogYWdlbnRjb3JlLkV2YWx1YXRpb25MZXZlbC5TRVNTSU9OLFxuICogICBldmFsdWF0b3JDb25maWc6IGFnZW50Y29yZS5FdmFsdWF0b3JDb25maWcubGxtQXNBSnVkZ2Uoe1xuICogICAgIGluc3RydWN0aW9uczogJ0V2YWx1YXRlIHdoZXRoZXIgdGhlIGFnZW50IHJlc3BvbnNlIGlzIGhlbHBmdWwgYW5kIGFjY3VyYXRlLicsXG4gKiAgICAgbW9kZWxJZDogJ3VzLmFudGhyb3BpYy5jbGF1ZGUtc29ubmV0LTQtNicsXG4gKiAgICAgcmF0aW5nU2NhbGU6IGFnZW50Y29yZS5FdmFsdWF0b3JSYXRpbmdTY2FsZS5jYXRlZ29yaWNhbChbXG4gKiAgICAgICB7IGxhYmVsOiAnR29vZCcsIGRlZmluaXRpb246ICdUaGUgcmVzcG9uc2UgaXMgaGVscGZ1bCBhbmQgYWNjdXJhdGUuJyB9LFxuICogICAgICAgeyBsYWJlbDogJ0JhZCcsIGRlZmluaXRpb246ICdUaGUgcmVzcG9uc2UgaXMgbm90IGhlbHBmdWwgb3IgY29udGFpbnMgZXJyb3JzLicgfSxcbiAqICAgICBdKSxcbiAqICAgfSksXG4gKiB9KTtcbiAqXG4gKiAvLyBVc2UgdGhlIGN1c3RvbSBldmFsdWF0b3IgaW4gYW4gb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvblxuICogbmV3IGFnZW50Y29yZS5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnKHRoaXMsICdNeUV2YWx1YXRpb24nLCB7XG4gKiAgIG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiAnbXlfZXZhbHVhdGlvbicsXG4gKiAgIGV2YWx1YXRvcnM6IFtcbiAqICAgICBhZ2VudGNvcmUuRXZhbHVhdG9yUmVmZXJlbmNlLmJ1aWx0aW4oYWdlbnRjb3JlLkJ1aWx0aW5FdmFsdWF0b3IuSEVMUEZVTE5FU1MpLFxuICogICAgIGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuY3VzdG9tKGV2YWx1YXRvciksXG4gKiAgIF0sXG4gKiAgIGRhdGFTb3VyY2U6IGFnZW50Y29yZS5EYXRhU291cmNlQ29uZmlnLmZyb21DbG91ZFdhdGNoTG9ncyh7XG4gKiAgICAgbG9nR3JvdXBOYW1lczogWycvYXdzL2JlZHJvY2stYWdlbnRjb3JlL215LWFnZW50J10sXG4gKiAgICAgc2VydmljZU5hbWVzOiBbJ215LWFnZW50LmRlZmF1bHQnXSxcbiAqICAgfSksXG4gKiB9KTtcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIEV2YWx1YXRvckJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID1cbiAgICAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLkV2YWx1YXRvcic7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBFdmFsdWF0b3IgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBldmFsdWF0b3JJZCAtIFRoZSBldmFsdWF0b3IgSUQgdG8gaW1wb3J0XG4gICAqIEByZXR1cm5zIEFuIElFdmFsdWF0b3IgcmVmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FdmFsdWF0b3JJZChcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZXZhbHVhdG9ySWQ6IHN0cmluZyxcbiAgKTogSUV2YWx1YXRvciB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgZXZhbHVhdG9yQXJuID0gQXJuLmZvcm1hdChcbiAgICAgIHtcbiAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdldmFsdWF0b3InLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGV2YWx1YXRvcklkLFxuICAgICAgfSxcbiAgICAgIHN0YWNrLFxuICAgICk7XG5cbiAgICByZXR1cm4gRXZhbHVhdG9yLmZyb21FdmFsdWF0b3JBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgZXZhbHVhdG9yQXJuLFxuICAgICAgZXZhbHVhdG9ySWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEV2YWx1YXRvciBieSBpdHMgQVJOLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBldmFsdWF0b3JBcm4gLSBUaGUgZXZhbHVhdG9yIEFSTiB0byBpbXBvcnRcbiAgICogQHJldHVybnMgQW4gSUV2YWx1YXRvciByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUV2YWx1YXRvckFybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZXZhbHVhdG9yQXJuOiBzdHJpbmcsXG4gICk6IElFdmFsdWF0b3Ige1xuICAgIGNvbnN0IGFyblBhcnRzID0gQXJuLnNwbGl0KGV2YWx1YXRvckFybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpO1xuICAgIGNvbnN0IGV2YWx1YXRvcklkID0gYXJuUGFydHMucmVzb3VyY2VOYW1lITtcblxuICAgIHJldHVybiBFdmFsdWF0b3IuZnJvbUV2YWx1YXRvckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBldmFsdWF0b3JBcm4sXG4gICAgICBldmFsdWF0b3JJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgRXZhbHVhdG9yIGZyb20gaXRzIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGF0dHJzIC0gVGhlIGV2YWx1YXRvciBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm5zIEFuIElFdmFsdWF0b3IgcmVmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FdmFsdWF0b3JBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogRXZhbHVhdG9yQXR0cmlidXRlcyxcbiAgKTogSUV2YWx1YXRvciB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgRXZhbHVhdG9yQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXZhbHVhdG9yQXJuID0gYXR0cnMuZXZhbHVhdG9yQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV2YWx1YXRvcklkID0gYXR0cnMuZXZhbHVhdG9ySWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXZhbHVhdG9yTmFtZSA9IGF0dHJzLmV2YWx1YXRvck5hbWUgPz8gYXR0cnMuZXZhbHVhdG9ySWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBldmFsdWF0b3IuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBldmFsdWF0b3IuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXZhbHVhdG9yTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHN0YXR1cyBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGV2YWx1YXRvciB3YXMgY3JlYXRlZC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBldmFsdWF0b3Igd2FzIGxhc3QgdXBkYXRlZC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRXZhbHVhdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZXZhbHVhdG9yTmFtZSxcbiAgICB9KTtcblxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlRXZhbHVhdG9yTmFtZSwgcHJvcHMuZXZhbHVhdG9yTmFtZSwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVEZXNjcmlwdGlvbiwgcHJvcHMuZGVzY3JpcHRpb24sIHRoaXMpO1xuXG4gICAgaWYgKHByb3BzLnRhZ3MpIHtcbiAgICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlRXZhbHVhdG9yVGFncywgcHJvcHMudGFncywgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5ldmFsdWF0b3JOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBiZWRyb2NrYWdlbnRjb3JlLkNmbkV2YWx1YXRvcih0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBldmFsdWF0b3JOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGV2YWx1YXRvckNvbmZpZzogcHJvcHMuZXZhbHVhdG9yQ29uZmlnLl9iaW5kKCksXG4gICAgICBsZXZlbDogcHJvcHMubGV2ZWwudmFsdWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICB0YWdzOiBwcm9wcy50YWdzICYmIE9iamVjdC5rZXlzKHByb3BzLnRhZ3MpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBPYmplY3QuZW50cmllcyhwcm9wcy50YWdzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBJZiBjb2RlLWJhc2VkLCBncmFudCB0aGUgYmVkcm9jay1hZ2VudGNvcmUgc2VydmljZSBwZXJtaXNzaW9uIHRvIGludm9rZVxuICAgIC8vIHRoZSBMYW1iZGEgZnVuY3Rpb24sIHNjb3BlZCB0byB0aGlzIHNwZWNpZmljIGV2YWx1YXRvciBmb3IgY29uZnVzZWQgZGVwdXR5IHByZXZlbnRpb24uXG4gICAgaWYgKHByb3BzLmV2YWx1YXRvckNvbmZpZy5sYW1iZGFGdW5jdGlvbikge1xuICAgICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICAgIHByb3BzLmV2YWx1YXRvckNvbmZpZy5sYW1iZGFGdW5jdGlvbi5hZGRQZXJtaXNzaW9uKCdCZWRyb2NrQWdlbnRDb3JlRXZhbHVhdG9ySW52b2tlJywge1xuICAgICAgICBwcmluY2lwYWw6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBzb3VyY2VBY2NvdW50OiBzdGFjay5hY2NvdW50LFxuICAgICAgICBzb3VyY2VBcm46IHJlc291cmNlLmF0dHJFdmFsdWF0b3JBcm4sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmV2YWx1YXRvckFybiA9IHJlc291cmNlLmF0dHJFdmFsdWF0b3JBcm47XG4gICAgdGhpcy5ldmFsdWF0b3JJZCA9IHJlc291cmNlLmF0dHJFdmFsdWF0b3JJZDtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSByZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMudXBkYXRlZEF0ID0gcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgfVxufVxuIl19
@@ -31,7 +31,7 @@ const validation_helpers_1 = require("./validation-helpers");
31
31
  * });
32
32
  */
33
33
  class DataSourceConfig {
34
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.DataSourceConfig", version: "2.253.0-alpha.0" };
34
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.DataSourceConfig", version: "2.254.0-alpha.0" };
35
35
  /**
36
36
  * Creates a CloudWatch Logs data source configuration.
37
37
  *
@@ -21,7 +21,7 @@ const iam = require("aws-cdk-lib/aws-iam");
21
21
  * Contains methods and attributes valid for evaluators either created with CDK or imported.
22
22
  */
23
23
  class EvaluatorBase extends aws_cdk_lib_1.Resource {
24
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorBase", version: "2.253.0-alpha.0" };
24
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorBase", version: "2.254.0-alpha.0" };
25
25
  constructor(scope, id, props = {}) {
26
26
  super(scope, id, props);
27
27
  }
@@ -25,7 +25,7 @@ const validation_helpers_1 = require("./validation-helpers");
25
25
  * ]);
26
26
  */
27
27
  class EvaluatorRatingScale {
28
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorRatingScale", version: "2.253.0-alpha.0" };
28
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorRatingScale", version: "2.254.0-alpha.0" };
29
29
  /**
30
30
  * Creates a categorical rating scale.
31
31
  *
@@ -88,7 +88,7 @@ exports.EvaluatorRatingScale = EvaluatorRatingScale;
88
88
  * });
89
89
  */
90
90
  class EvaluatorConfig {
91
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorConfig", version: "2.253.0-alpha.0" };
91
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorConfig", version: "2.254.0-alpha.0" };
92
92
  /**
93
93
  * Creates an LLM-as-a-Judge evaluator configuration.
94
94
  *
@@ -19,7 +19,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
19
19
  * const custom = agentcore.EvaluatorReference.custom(myCustomEvaluator);
20
20
  */
21
21
  class EvaluatorReference {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorReference", version: "2.253.0-alpha.0" };
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorReference", version: "2.254.0-alpha.0" };
23
23
  /**
24
24
  * Creates a reference to a built-in evaluator.
25
25
  *
@@ -21,7 +21,7 @@ const iam = require("aws-cdk-lib/aws-iam");
21
21
  * Contains methods and attributes valid for configurations either created with CDK or imported.
22
22
  */
23
23
  class OnlineEvaluationBase extends aws_cdk_lib_1.Resource {
24
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OnlineEvaluationBase", version: "2.253.0-alpha.0" };
24
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OnlineEvaluationBase", version: "2.254.0-alpha.0" };
25
25
  constructor(scope, id, props = {}) {
26
26
  super(scope, id, props);
27
27
  }
@@ -33,6 +33,15 @@ export interface OnlineEvaluationConfigProps extends OnlineEvaluationBaseProps {
33
33
  * The data source configuration that specifies where to read agent traces from.
34
34
  */
35
35
  readonly dataSource: DataSourceConfig;
36
+ /**
37
+ * Tags for the online evaluation configuration.
38
+ * A list of key:value pairs of tags to apply to this OnlineEvaluationConfig resource.
39
+ *
40
+ * @default - No tags
41
+ */
42
+ readonly tags?: {
43
+ [key: string]: string;
44
+ };
36
45
  }
37
46
  /**
38
47
  * Online evaluation configuration for Amazon Bedrock AgentCore.
@@ -93,7 +93,7 @@ let OnlineEvaluationConfig = (() => {
93
93
  OnlineEvaluationConfig = _classThis = _classDescriptor.value;
94
94
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
95
95
  }
96
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OnlineEvaluationConfig", version: "2.253.0-alpha.0" };
96
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OnlineEvaluationConfig", version: "2.254.0-alpha.0" };
97
97
  /** Uniquely identifies this class. */
98
98
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.OnlineEvaluationConfig';
99
99
  /**
@@ -233,6 +233,9 @@ let OnlineEvaluationConfig = (() => {
233
233
  (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateSamplingPercentage, props.samplingPercentage, this);
234
234
  (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateFilters, props.filters, this);
235
235
  (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateSessionTimeout, props.sessionTimeout?.toMinutes(), this);
236
+ if (props.tags) {
237
+ (0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateEvaluationTags, props.tags, this);
238
+ }
236
239
  this.onlineEvaluationConfigName = this.physicalName;
237
240
  this.executionRole = props.executionRole ?? this.createExecutionRole(props.dataSource);
238
241
  this.grantPrincipal = this.executionRole;
@@ -244,6 +247,9 @@ let OnlineEvaluationConfig = (() => {
244
247
  rule: this.buildRuleConfig(props),
245
248
  description: props.description,
246
249
  executionStatus: props.executionStatus?.value,
250
+ tags: props.tags && Object.keys(props.tags).length > 0
251
+ ? Object.entries(props.tags).map(([key, value]) => ({ key, value }))
252
+ : undefined,
247
253
  });
248
254
  // Ensure the execution role's policies are created before the L1 resource,
249
255
  // because BedrockAgentCore validates role permissions at create time.
@@ -385,4 +391,4 @@ let OnlineEvaluationConfig = (() => {
385
391
  return OnlineEvaluationConfig = _classThis;
386
392
  })();
387
393
  exports.OnlineEvaluationConfig = OnlineEvaluationConfig;
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25saW5lLWV2YWx1YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvbmxpbmUtZXZhbHVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILDZDQUF5RDtBQUN6RCxxRUFBcUU7QUFDckUsMkNBQTJDO0FBQzNDLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFJMUUscUVBQThGO0FBQzlGLG1DQU1pQjtBQUtqQiw2REFROEI7QUFzQjlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7SUFFVSxzQkFBc0I7NEJBRGxDLG9DQUFrQjs7OztzQkFDeUIsNkNBQW9CO3NDQUE1QixTQUFRLFdBQW9COzs7O1lBQWhFLDZLQWdXQzs7Ozs7UUEvVkMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FDMUMsNkRBQTZELENBQUM7UUFFaEU7Ozs7Ozs7V0FPRztRQUNJLE1BQU0sQ0FBQyw0QkFBNEIsQ0FDeEMsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLHdCQUFnQztZQUVoQyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLFNBQVMsR0FBRyxpQkFBRyxDQUFDLE1BQU0sQ0FDMUI7Z0JBQ0UsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsWUFBWSxFQUFFLHdCQUF3QjthQUN2QyxFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsT0FBTyxzQkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUM1RSx5QkFBeUIsRUFBRSxTQUFTO2dCQUNwQyx3QkFBd0IsRUFBRSx3QkFBd0I7Z0JBQ2xELDBCQUEwQixFQUFFLHdCQUF3QjthQUNyRCxDQUFDLENBQUM7U0FDSjtRQUVEOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMs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LENBQ1I7d0JBQ0UsT0FBTyxFQUFFLFNBQVM7d0JBQ2xCLFFBQVEsRUFBRSxtQkFBbUI7d0JBQzdCLFlBQVksRUFBRSxHQUFHO3dCQUNqQixNQUFNLEVBQUUsR0FBRztxQkFDWixFQUNELEtBQUssQ0FDTjtpQkFDRjthQUNGLENBQUMsQ0FDSCxDQUFDO1lBRUYsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVPLGVBQWUsQ0FBQyxLQUFrQztZQUN4RCxPQUFPO2dCQUNMLGNBQWMsRUFBRTtvQkFDZCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLElBQUksRUFBRTtpQkFDbkQ7Z0JBQ0QsYUFBYSxFQUFFO29CQUNiLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtpQkFDL0Q7Z0JBQ0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7d0JBQ1YsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSzt3QkFDMUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO3FCQUN2QixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztTQUNIOztZQS9WVSx1REFBc0I7Ozs7O0FBQXRCLHdEQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBBd3MsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhU291cmNlQ29uZmlnIH0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7IEV2YWx1YXRvclJlZmVyZW5jZSB9IGZyb20gJy4vZXZhbHVhdG9yJztcbmltcG9ydCB7IHR5cGUgSU9ubGluZUV2YWx1YXRpb25Db25maWcsIE9ubGluZUV2YWx1YXRpb25CYXNlIH0gZnJvbSAnLi9vbmxpbmUtZXZhbHVhdGlvbi1iYXNlJztcbmltcG9ydCB7XG4gIEVWQUxVQVRJT05fQkVEUk9DS19NT0RFTF9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0lOREVYX1BPTElDWV9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0xPR1NfREVTQ1JJQkVfUEVSTVMsXG4gIEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1FVRVJZX1BFUk1TLFxuICBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfTE9HU19XUklURV9QRVJNUyxcbn0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQge1xuICB0eXBlIE9ubGluZUV2YWx1YXRpb25CYXNlUHJvcHMsXG4gIHR5cGUgT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgdmFsaWRhdGVDb25maWdOYW1lLFxuICB2YWxpZGF0ZURlc2NyaXB0aW9uLFxuICB2YWxpZGF0ZUV2YWx1YXRvcnMsXG4gIHZhbGlkYXRlU2FtcGxpbmdQZXJjZW50YWdlLFxuICB2YWxpZGF0ZUZpbHRlcnMsXG4gIHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQsXG4gIHRocm93SWZJbnZhbGlkLFxufSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gT25saW5lRXZhbHVhdGlvbkNvbmZpZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnUHJvcHMgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGV2YWx1YXRvcnMgdG8gYXBwbHkgZHVyaW5nIG9ubGluZSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBDYW4gaW5jbHVkZSBib3RoIGJ1aWx0LWluIGV2YWx1YXRvcnMgYW5kIGN1c3RvbSBldmFsdWF0b3JzLlxuICAgKlxuICAgKiBAbWluaW11bSAxXG4gICAqIEBtYXhpbXVtIDEwXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0b3JzOiBFdmFsdWF0b3JSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgc291cmNlIGNvbmZpZ3VyYXRpb24gdGhhdCBzcGVjaWZpZXMgd2hlcmUgdG8gcmVhZCBhZ2VudCB0cmFjZXMgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2U6IERhdGFTb3VyY2VDb25maWc7XG59XG5cbi8qKlxuICogT25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbiBmb3IgQW1hem9uIEJlZHJvY2sgQWdlbnRDb3JlLlxuICpcbiAqIEVuYWJsZXMgY29udGludW91cyBldmFsdWF0aW9uIG9mIGFnZW50IHBlcmZvcm1hbmNlIHVzaW5nIGJ1aWx0LWluIG9yIGN1c3RvbSBldmFsdWF0b3JzLlxuICogU3VwcG9ydHMgQ2xvdWRXYXRjaCBMb2dzIGFuZCBBZ2VudCBFbmRwb2ludCBkYXRhIHNvdXJjZXMuXG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6T25saW5lRXZhbHVhdGlvbkNvbmZpZ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSB3aXRoIGJ1aWx0LWluIGV2YWx1YXRvcnNcbiAqIGNvbnN0IGV2YWx1YXRpb24gPSBuZXcgYWdlbnRjb3JlLk9ubGluZUV2YWx1YXRpb25Db25maWcodGhpcywgJ015RXZhbHVhdGlvbicsIHtcbiAqICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6ICdteV9ldmFsdWF0aW9uJyxcbiAqICAgZXZhbHVhdG9yczogW1xuICogICAgIGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuYnVpbHRpbihhZ2VudGNvcmUuQnVpbHRpbkV2YWx1YXRvci5IRUxQRlVMTkVTUyksXG4gKiAgICAgYWdlbnRjb3JlLkV2YWx1YXRvclJlZmVyZW5jZS5idWlsdGluKGFnZW50Y29yZS5CdWlsdGluRXZhbHVhdG9yLkNPUlJFQ1RORVNTKSxcbiAqICAgXSxcbiAqICAgZGF0YVNvdXJjZTogYWdlbnRjb3JlLkRhdGFTb3VyY2VDb25maWcuZnJvbUNsb3VkV2F0Y2hMb2dzKHtcbiAqICAgICBsb2dHcm91cE5hbWVzOiBbJy9hd3MvYmVkcm9jay1hZ2VudGNvcmUvbXktYWdlbnQnXSxcbiAqICAgICBzZXJ2aWNlTmFtZXM6IFsnbXktYWdlbnQuZGVmYXVsdCddLFxuICogICB9KSxcbiAqIH0pO1xuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgT25saW5lRXZhbHVhdGlvbkNvbmZpZyBleHRlbmRzIE9ubGluZUV2YWx1YXRpb25CYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9XG4gICAgJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIE9ubGluZUV2YWx1YXRpb25Db25maWcgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQgLSBUaGUgY29uZmlndXJhdGlvbiBJRCB0byBpbXBvcnRcbiAgICogQHJldHVybnMgQW4gSU9ubGluZUV2YWx1YXRpb25Db25maWcgcmVmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdJZDogc3RyaW5nLFxuICApOiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgY29uZmlnQXJuID0gQXJuLmZvcm1hdChcbiAgICAgIHtcbiAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdvbmxpbmUtZXZhbHVhdGlvbi1jb25maWcnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IG9ubGluZUV2YWx1YXRpb25Db25maWdJZCxcbiAgICAgIH0sXG4gICAgICBzdGFjayxcbiAgICApO1xuXG4gICAgcmV0dXJuIE9ubGluZUV2YWx1YXRpb25Db25maWcuZnJvbU9ubGluZUV2YWx1YXRpb25Db25maWdBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybjogY29uZmlnQXJuLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkOiBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQsXG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZTogb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIGJ5IGl0cyBBUk4uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4gLSBUaGUgY29uZmlndXJhdGlvbiBBUk4gdG8gaW1wb3J0XG4gICAqIEByZXR1cm5zIEFuIElPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHJlZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0Fybjogc3RyaW5nLFxuICApOiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyB7XG4gICAgY29uc3QgYXJuUGFydHMgPSBBcm4uc3BsaXQob25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpO1xuICAgIGNvbnN0IGNvbmZpZ0lkID0gYXJuUGFydHMucmVzb3VyY2VOYW1lITtcblxuICAgIHJldHVybiBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnLmZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4sXG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQ6IGNvbmZpZ0lkLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6IGNvbmZpZ0lkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIGZyb20gaXRzIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGF0dHJzIC0gVGhlIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlc1xuICAgKiBAcmV0dXJucyBBbiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9ubGluZUV2YWx1YXRpb25Db25maWdBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMsXG4gICk6IElPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybiA9IGF0dHJzLm9ubGluZUV2YWx1YXRpb25Db25maWdBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkID0gYXR0cnMub25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lID0gYXR0cnMub25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZSA9IGF0dHJzLmV4ZWN1dGlvblJvbGVBcm5cbiAgICAgICAgPyBpYW0uUm9sZS5mcm9tUm9sZUFybihzY29wZSwgYCR7aWR9Um9sZWAsIGF0dHJzLmV4ZWN1dGlvblJvbGVBcm4pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25TdGF0dXMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlID8/IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSBleGVjdXRpb24gcm9sZSBmb3IgdGhlIGV2YWx1YXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBzdGF0dXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gc3RhdHVzIG9mIHRoZSBldmFsdWF0aW9uIChFTkFCTEVEIG9yIERJU0FCTEVEKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25TdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgY3JlYXRlZC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG8uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMub25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWUsXG4gICAgfSk7XG5cbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZUNvbmZpZ05hbWUsIHByb3BzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZURlc2NyaXB0aW9uLCBwcm9wcy5kZXNjcmlwdGlvbiwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVFdmFsdWF0b3JzLCBwcm9wcy5ldmFsdWF0b3JzLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZVNhbXBsaW5nUGVyY2VudGFnZSwgcHJvcHMuc2FtcGxpbmdQZXJjZW50YWdlLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZUZpbHRlcnMsIHByb3BzLmZpbHRlcnMsIHRoaXMpO1xuICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQsIHByb3BzLnNlc3Npb25UaW1lb3V0Py50b01pbnV0ZXMoKSwgdGhpcyk7XG5cbiAgICB0aGlzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy5leGVjdXRpb25Sb2xlID0gcHJvcHMuZXhlY3V0aW9uUm9sZSA/PyB0aGlzLmNyZWF0ZUV4ZWN1dGlvblJvbGUocHJvcHMuZGF0YVNvdXJjZSk7XG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IGJlZHJvY2thZ2VudGNvcmUuQ2ZuT25saW5lRXZhbHVhdGlvbkNvbmZpZyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBldmFsdWF0b3JzOiBwcm9wcy5ldmFsdWF0b3JzLm1hcCgoZSkgPT4gZS5iaW5kKCkpLFxuICAgICAgZGF0YVNvdXJjZUNvbmZpZzogcHJvcHMuZGF0YVNvdXJjZS5iaW5kKCksXG4gICAgICBldmFsdWF0aW9uRXhlY3V0aW9uUm9sZUFybjogdGhpcy5leGVjdXRpb25Sb2xlIS5yb2xlQXJuLFxuICAgICAgcnVsZTogdGhpcy5idWlsZFJ1bGVDb25maWcocHJvcHMpLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZXhlY3V0aW9uU3RhdHVzOiBwcm9wcy5leGVjdXRpb25TdGF0dXM/LnZhbHVlLFxuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBleGVjdXRpb24gcm9sZSdzIHBvbGljaWVzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgTDEgcmVzb3VyY2UsXG4gICAgLy8gYmVjYXVzZSBCZWRyb2NrQWdlbnRDb3JlIHZhbGlkYXRlcyByb2xlIHBlcm1pc3Npb25zIGF0IGNyZWF0ZSB0aW1lLlxuICAgIGlmICh0aGlzLmV4ZWN1dGlvblJvbGUgaW5zdGFuY2VvZiBpYW0uUm9sZSAmJiB0aGlzLmV4ZWN1dGlvblJvbGUubm9kZS5kZWZhdWx0Q2hpbGQpIHtcbiAgICAgIHJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmV4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIHRoaXMub25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybiA9IHJlc291cmNlLmF0dHJPbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuO1xuICAgIHRoaXMub25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkID0gcmVzb3VyY2UuYXR0ck9ubGluZUV2YWx1YXRpb25Db25maWdJZDtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5leGVjdXRpb25TdGF0dXMgPSByZXNvdXJjZS5leGVjdXRpb25TdGF0dXM7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSByZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMudXBkYXRlZEF0ID0gcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRXhlY3V0aW9uUm9sZShkYXRhU291cmNlOiBEYXRhU291cmNlQ29uZmlnKTogaWFtLklSb2xlIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJywge1xuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50LFxuICAgICAgICAgICAgJ2F3czpSZXNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgQXJuTGlrZToge1xuICAgICAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBbXG4gICAgICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnZXZhbHVhdG9yJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnb25saW5lLWV2YWx1YXRpb24tY29uZmlnJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0aW9uIHJvbGUgZm9yIEJlZHJvY2sgQWdlbnRDb3JlIE9ubGluZSBFdmFsdWF0aW9uJyxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBzZXJ2aWNlIHJlcXVpcmVzIHF1ZXJ5IGFjY2VzcyB0byB1c2VyLXNwZWNpZmllZCBsb2cgZ3JvdXBzIEFORCB0aGVcbiAgICAvLyBpbXBsaWNpdCBhd3Mvc3BhbnMgbG9nIGdyb3VwIGl0IHVzZXMgaW50ZXJuYWxseSBmb3IgdHJhY2UgZGF0YS5cbiAgICBjb25zdCBsb2dHcm91cEFybnMgPSBbXG4gICAgICAuLi5kYXRhU291cmNlLmNsb3VkV2F0Y2hMb2dzQ29uZmlnLmxvZ0dyb3VwTmFtZXMsXG4gICAgICAnYXdzL3NwYW5zJyxcbiAgICBdLmZsYXRNYXAoXG4gICAgICAobmFtZSkgPT4gW1xuICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogbmFtZSxcbiAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGFjayxcbiAgICAgICAgKSxcbiAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXJ2aWNlOiAnbG9ncycsXG4gICAgICAgICAgICByZXNvdXJjZTogJ2xvZy1ncm91cCcsXG4gICAgICAgICAgICByZXNvdXJjZU5hbWU6IGAke25hbWV9OipgLFxuICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICApLFxuICAgICAgXSxcbiAgICApO1xuXG4gICAgLy8gbG9nczpEZXNjcmliZUxvZ0dyb3VwcyBkb2VzIG5vdCBzdXBwb3J0IHJlc291cmNlLWxldmVsIHBlcm1pc3Npb25zLlxuICAgIC8vIFRoZSByZXNvdXJjZSBtdXN0IGJlICcqJyBwZXIgdGhlIElBTSBzZXJ2aWNlIGF1dGhvcml6YXRpb24gcmVmZXJlbmNlLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uY2xvdWR3YXRjaGxvZ3MuaHRtbFxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hMb2dEZXNjcmliZVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX0RFU0NSSUJFX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hMb2dRdWVyeVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1FVRVJZX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IGxvZ0dyb3VwQXJucyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdDbG91ZFdhdGNoTG9nV3JpdGVTdGF0ZW1lbnQnLFxuICAgICAgICBhY3Rpb25zOiBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfTE9HU19XUklURV9QRVJNUyxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgICByZXNvdXJjZTogJ2xvZy1ncm91cCcsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJy9hd3MvYmVkcm9jay1hZ2VudGNvcmUvZXZhbHVhdGlvbnMvKicsXG4gICAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdDbG91ZFdhdGNoSW5kZXhQb2xpY3lTdGF0ZW1lbnQnLFxuICAgICAgICBhY3Rpb25zOiBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfSU5ERVhfUE9MSUNZX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiAnbG9ncycsXG4gICAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnYXdzL3NwYW5zJyxcbiAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICdsb2ctZ3JvdXAnLFxuICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6ICdhd3Mvc3BhbnM6KicsXG4gICAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdCZWRyb2NrSW52b2tlU3RhdGVtZW50JyxcbiAgICAgICAgYWN0aW9uczogRVZBTFVBVElPTl9CRURST0NLX01PREVMX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOiR7QXdzLlBBUlRJVElPTn06YmVkcm9jazoqOjpmb3VuZGF0aW9uLW1vZGVsLypgLFxuICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdiZWRyb2NrJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICdpbmZlcmVuY2UtcHJvZmlsZScsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgICAgICByZWdpb246ICcqJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJ1bGVDb25maWcocHJvcHM6IE9ubGluZUV2YWx1YXRpb25Db25maWdQcm9wcyk6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuT25saW5lRXZhbHVhdGlvbkNvbmZpZy5SdWxlUHJvcGVydHkge1xuICAgIHJldHVybiB7XG4gICAgICBzYW1wbGluZ0NvbmZpZzoge1xuICAgICAgICBzYW1wbGluZ1BlcmNlbnRhZ2U6IHByb3BzLnNhbXBsaW5nUGVyY2VudGFnZSA/PyAxMCxcbiAgICAgIH0sXG4gICAgICBzZXNzaW9uQ29uZmlnOiB7XG4gICAgICAgIHNlc3Npb25UaW1lb3V0TWludXRlczogcHJvcHMuc2Vzc2lvblRpbWVvdXQ/LnRvTWludXRlcygpID8/IDE1LFxuICAgICAgfSxcbiAgICAgIC4uLihwcm9wcy5maWx0ZXJzICYmIHByb3BzLmZpbHRlcnMubGVuZ3RoID4gMCA/IHtcbiAgICAgICAgZmlsdGVyczogcHJvcHMuZmlsdGVycy5tYXAoKGYpID0+ICh7XG4gICAgICAgICAga2V5OiBmLmtleSxcbiAgICAgICAgICBvcGVyYXRvcjogZi5vcGVyYXRvci52YWx1ZSxcbiAgICAgICAgICB2YWx1ZTogZi52YWx1ZS5fYmluZCgpLFxuICAgICAgICB9KSksXG4gICAgICB9IDoge30pLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25saW5lLWV2YWx1YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvbmxpbmUtZXZhbHVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILDZDQUF5RDtBQUN6RCxxRUFBcUU7QUFDckUsMkNBQTJDO0FBQzNDLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFJMUUscUVBQThGO0FBQzlGLG1DQU1pQjtBQUtqQiw2REFTOEI7QUE4QjlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7SUFFVSxzQkFBc0I7NEJBRGxDLG9DQUFrQjs7OztzQkFDeUIsNkNBQW9CO3NDQUE1QixTQUFRLFdBQW9COzs7O1lBQWhFLDZLQXVXQzs7Ozs7UUF0V0Msc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FDMUMsNkRBQTZELENBQUM7UUFFaEU7Ozs7Ozs7V0FPRztRQUNJLE1BQU0sQ0FBQyw0QkFBNEIsQ0FDeEMsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLHdCQUFnQztZQUVoQyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLFNBQVMsR0FBRyxpQkFBRyxDQUFDLE1BQU0sQ0FDMUI7Z0JBQ0UsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsWUFBWSxFQUFFLHdCQUF3QjthQUN2QyxFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsT0FBTyxzQkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUM1RSx5QkFBeUIsRUFBRSxTQUFTO2dCQUNwQyx3QkFBd0IsRUFBRSx3QkFBd0I7Z0JBQ2xELDBCQUEwQixFQUFFLHdCQUF3QjthQUNyRCxDQUFDLENBQUM7U0FDSjtRQUVEOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMs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O3dCQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7d0JBQ1YsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSzt3QkFDMUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO3FCQUN2QixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztTQUNIOztZQXRXVSx1REFBc0I7Ozs7O0FBQXRCLHdEQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBBd3MsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhU291cmNlQ29uZmlnIH0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7IEV2YWx1YXRvclJlZmVyZW5jZSB9IGZyb20gJy4vZXZhbHVhdG9yJztcbmltcG9ydCB7IHR5cGUgSU9ubGluZUV2YWx1YXRpb25Db25maWcsIE9ubGluZUV2YWx1YXRpb25CYXNlIH0gZnJvbSAnLi9vbmxpbmUtZXZhbHVhdGlvbi1iYXNlJztcbmltcG9ydCB7XG4gIEVWQUxVQVRJT05fQkVEUk9DS19NT0RFTF9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0lOREVYX1BPTElDWV9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0xPR1NfREVTQ1JJQkVfUEVSTVMsXG4gIEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1FVRVJZX1BFUk1TLFxuICBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfTE9HU19XUklURV9QRVJNUyxcbn0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQge1xuICB0eXBlIE9ubGluZUV2YWx1YXRpb25CYXNlUHJvcHMsXG4gIHR5cGUgT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgdmFsaWRhdGVDb25maWdOYW1lLFxuICB2YWxpZGF0ZURlc2NyaXB0aW9uLFxuICB2YWxpZGF0ZUV2YWx1YXRvcnMsXG4gIHZhbGlkYXRlU2FtcGxpbmdQZXJjZW50YWdlLFxuICB2YWxpZGF0ZUZpbHRlcnMsXG4gIHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQsXG4gIHZhbGlkYXRlRXZhbHVhdGlvblRhZ3MsXG4gIHRocm93SWZJbnZhbGlkLFxufSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gT25saW5lRXZhbHVhdGlvbkNvbmZpZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnUHJvcHMgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGV2YWx1YXRvcnMgdG8gYXBwbHkgZHVyaW5nIG9ubGluZSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBDYW4gaW5jbHVkZSBib3RoIGJ1aWx0LWluIGV2YWx1YXRvcnMgYW5kIGN1c3RvbSBldmFsdWF0b3JzLlxuICAgKlxuICAgKiBAbWluaW11bSAxXG4gICAqIEBtYXhpbXVtIDEwXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0b3JzOiBFdmFsdWF0b3JSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgc291cmNlIGNvbmZpZ3VyYXRpb24gdGhhdCBzcGVjaWZpZXMgd2hlcmUgdG8gcmVhZCBhZ2VudCB0cmFjZXMgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2U6IERhdGFTb3VyY2VDb25maWc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoZSBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHJlc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIE9ubGluZSBldmFsdWF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIEFtYXpvbiBCZWRyb2NrIEFnZW50Q29yZS5cbiAqXG4gKiBFbmFibGVzIGNvbnRpbnVvdXMgZXZhbHVhdGlvbiBvZiBhZ2VudCBwZXJmb3JtYW5jZSB1c2luZyBidWlsdC1pbiBvciBjdXN0b20gZXZhbHVhdG9ycy5cbiAqIFN1cHBvcnRzIENsb3VkV2F0Y2ggTG9ncyBhbmQgQWdlbnQgRW5kcG9pbnQgZGF0YSBzb3VyY2VzLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6Ok9ubGluZUV2YWx1YXRpb25Db25maWdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgdXNhZ2Ugd2l0aCBidWlsdC1pbiBldmFsdWF0b3JzXG4gKiBjb25zdCBldmFsdWF0aW9uID0gbmV3IGFnZW50Y29yZS5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnKHRoaXMsICdNeUV2YWx1YXRpb24nLCB7XG4gKiAgIG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiAnbXlfZXZhbHVhdGlvbicsXG4gKiAgIGV2YWx1YXRvcnM6IFtcbiAqICAgICBhZ2VudGNvcmUuRXZhbHVhdG9yUmVmZXJlbmNlLmJ1aWx0aW4oYWdlbnRjb3JlLkJ1aWx0aW5FdmFsdWF0b3IuSEVMUEZVTE5FU1MpLFxuICogICAgIGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuYnVpbHRpbihhZ2VudGNvcmUuQnVpbHRpbkV2YWx1YXRvci5DT1JSRUNUTkVTUyksXG4gKiAgIF0sXG4gKiAgIGRhdGFTb3VyY2U6IGFnZW50Y29yZS5EYXRhU291cmNlQ29uZmlnLmZyb21DbG91ZFdhdGNoTG9ncyh7XG4gKiAgICAgbG9nR3JvdXBOYW1lczogWycvYXdzL2JlZHJvY2stYWdlbnRjb3JlL215LWFnZW50J10sXG4gKiAgICAgc2VydmljZU5hbWVzOiBbJ215LWFnZW50LmRlZmF1bHQnXSxcbiAqICAgfSksXG4gKiB9KTtcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIE9ubGluZUV2YWx1YXRpb25Db25maWcgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPVxuICAgICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuT25saW5lRXZhbHVhdGlvbkNvbmZpZyc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkIC0gVGhlIGNvbmZpZ3VyYXRpb24gSUQgdG8gaW1wb3J0XG4gICAqIEByZXR1cm5zIEFuIElPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHJlZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQ6IHN0cmluZyxcbiAgKTogSU9ubGluZUV2YWx1YXRpb25Db25maWcge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGNvbmZpZ0FybiA9IEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6ICdiZWRyb2NrLWFnZW50Y29yZScsXG4gICAgICAgIHJlc291cmNlOiAnb25saW5lLWV2YWx1YXRpb24tY29uZmlnJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQsXG4gICAgICB9LFxuICAgICAgc3RhY2ssXG4gICAgKTtcblxuICAgIHJldHVybiBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnLmZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IGNvbmZpZ0FybixcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdJZDogb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6IG9ubGluZUV2YWx1YXRpb25Db25maWdJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgT25saW5lRXZhbHVhdGlvbkNvbmZpZyBieSBpdHMgQVJOLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuIC0gVGhlIGNvbmZpZ3VyYXRpb24gQVJOIHRvIGltcG9ydFxuICAgKiBAcmV0dXJucyBBbiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9ubGluZUV2YWx1YXRpb25Db25maWdBcm4oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IHN0cmluZyxcbiAgKTogSU9ubGluZUV2YWx1YXRpb25Db25maWcge1xuICAgIGNvbnN0IGFyblBhcnRzID0gQXJuLnNwbGl0KG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKTtcbiAgICBjb25zdCBjb25maWdJZCA9IGFyblBhcnRzLnJlc291cmNlTmFtZSE7XG5cbiAgICByZXR1cm4gT25saW5lRXZhbHVhdGlvbkNvbmZpZy5mcm9tT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuOiBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkOiBjb25maWdJZCxcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiBjb25maWdJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgT25saW5lRXZhbHVhdGlvbkNvbmZpZyBmcm9tIGl0cyBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBhdHRycyAtIFRoZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgQW4gSU9ubGluZUV2YWx1YXRpb25Db25maWcgcmVmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IE9ubGluZUV2YWx1YXRpb25Db25maWdBdHRyaWJ1dGVzLFxuICApOiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgT25saW5lRXZhbHVhdGlvbkJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4gPSBhdHRycy5vbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdJZCA9IGF0dHJzLm9ubGluZUV2YWx1YXRpb25Db25maWdJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZSA9IGF0dHJzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGUgPSBhdHRycy5leGVjdXRpb25Sb2xlQXJuXG4gICAgICAgID8gaWFtLlJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsIGAke2lkfVJvbGVgLCBhdHRycy5leGVjdXRpb25Sb2xlQXJuKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uU3RhdHVzID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcbiAgICAgICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZSA/PyBuZXcgaWFtLlVua25vd25QcmluY2lwYWwoeyByZXNvdXJjZTogdGhpcyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIG9ubGluZSBldmFsdWF0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gZXhlY3V0aW9uIHJvbGUgZm9yIHRoZSBldmFsdWF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgc3RhdHVzIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0aW9uIHN0YXR1cyBvZiB0aGUgZXZhbHVhdGlvbiAoRU5BQkxFRCBvciBESVNBQkxFRCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uU3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gd2FzIGNyZWF0ZWQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT25saW5lRXZhbHVhdGlvbkNvbmZpZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lLFxuICAgIH0pO1xuXG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVDb25maWdOYW1lLCBwcm9wcy5vbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZSwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVEZXNjcmlwdGlvbiwgcHJvcHMuZGVzY3JpcHRpb24sIHRoaXMpO1xuICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlRXZhbHVhdG9ycywgcHJvcHMuZXZhbHVhdG9ycywgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVTYW1wbGluZ1BlcmNlbnRhZ2UsIHByb3BzLnNhbXBsaW5nUGVyY2VudGFnZSwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVGaWx0ZXJzLCBwcm9wcy5maWx0ZXJzLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZVNlc3Npb25UaW1lb3V0LCBwcm9wcy5zZXNzaW9uVGltZW91dD8udG9NaW51dGVzKCksIHRoaXMpO1xuXG4gICAgaWYgKHByb3BzLnRhZ3MpIHtcbiAgICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlRXZhbHVhdGlvblRhZ3MsIHByb3BzLnRhZ3MsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMub25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWUgPSB0aGlzLnBoeXNpY2FsTmFtZTtcbiAgICB0aGlzLmV4ZWN1dGlvblJvbGUgPSBwcm9wcy5leGVjdXRpb25Sb2xlID8/IHRoaXMuY3JlYXRlRXhlY3V0aW9uUm9sZShwcm9wcy5kYXRhU291cmNlKTtcbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGV2YWx1YXRvcnM6IHByb3BzLmV2YWx1YXRvcnMubWFwKChlKSA9PiBlLmJpbmQoKSksXG4gICAgICBkYXRhU291cmNlQ29uZmlnOiBwcm9wcy5kYXRhU291cmNlLmJpbmQoKSxcbiAgICAgIGV2YWx1YXRpb25FeGVjdXRpb25Sb2xlQXJuOiB0aGlzLmV4ZWN1dGlvblJvbGUhLnJvbGVBcm4sXG4gICAgICBydWxlOiB0aGlzLmJ1aWxkUnVsZUNvbmZpZyhwcm9wcyksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBleGVjdXRpb25TdGF0dXM6IHByb3BzLmV4ZWN1dGlvblN0YXR1cz8udmFsdWUsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzICYmIE9iamVjdC5rZXlzKHByb3BzLnRhZ3MpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBPYmplY3QuZW50cmllcyhwcm9wcy50YWdzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBFbnN1cmUgdGhlIGV4ZWN1dGlvbiByb2xlJ3MgcG9saWNpZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBMMSByZXNvdXJjZSxcbiAgICAvLyBiZWNhdXNlIEJlZHJvY2tBZ2VudENvcmUgdmFsaWRhdGVzIHJvbGUgcGVybWlzc2lvbnMgYXQgY3JlYXRlIHRpbWUuXG4gICAgaWYgKHRoaXMuZXhlY3V0aW9uUm9sZSBpbnN0YW5jZW9mIGlhbS5Sb2xlICYmIHRoaXMuZXhlY3V0aW9uUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCkge1xuICAgICAgcmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuZXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgdGhpcy5vbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuID0gcmVzb3VyY2UuYXR0ck9ubGluZUV2YWx1YXRpb25Db25maWdBcm47XG4gICAgdGhpcy5vbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQgPSByZXNvdXJjZS5hdHRyT25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkO1xuICAgIHRoaXMuc3RhdHVzID0gcmVzb3VyY2UuYXR0clN0YXR1cztcbiAgICB0aGlzLmV4ZWN1dGlvblN0YXR1cyA9IHJlc291cmNlLmV4ZWN1dGlvblN0YXR1cztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHJlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSByZXNvdXJjZS5hdHRyVXBkYXRlZEF0O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFeGVjdXRpb25Sb2xlKGRhdGFTb3VyY2U6IERhdGFTb3VyY2VDb25maWcpOiBpYW0uSVJvbGUge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG5cbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdFeGVjdXRpb25Sb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2JlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb20nLCB7XG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICdhd3M6U291cmNlQWNjb3VudCc6IHN0YWNrLmFjY291bnQsXG4gICAgICAgICAgICAnYXdzOlJlc291cmNlQWNjb3VudCc6IHN0YWNrLmFjY291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBBcm5MaWtlOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFybic6IFtcbiAgICAgICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnYmVkcm9jay1hZ2VudGNvcmUnLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6ICdldmFsdWF0b3InLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnYmVkcm9jay1hZ2VudGNvcmUnLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6ICdvbmxpbmUtZXZhbHVhdGlvbi1jb25maWcnLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgZGVzY3JpcHRpb246ICdFeGVjdXRpb24gcm9sZSBmb3IgQmVkcm9jayBBZ2VudENvcmUgT25saW5lIEV2YWx1YXRpb24nLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIHNlcnZpY2UgcmVxdWlyZXMgcXVlcnkgYWNjZXNzIHRvIHVzZXItc3BlY2lmaWVkIGxvZyBncm91cHMgQU5EIHRoZVxuICAgIC8vIGltcGxpY2l0IGF3cy9zcGFucyBsb2cgZ3JvdXAgaXQgdXNlcyBpbnRlcm5hbGx5IGZvciB0cmFjZSBkYXRhLlxuICAgIGNvbnN0IGxvZ0dyb3VwQXJucyA9IFtcbiAgICAgIC4uLmRhdGFTb3VyY2UuY2xvdWRXYXRjaExvZ3NDb25maWcubG9nR3JvdXBOYW1lcyxcbiAgICAgICdhd3Mvc3BhbnMnLFxuICAgIF0uZmxhdE1hcChcbiAgICAgIChuYW1lKSA9PiBbXG4gICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdsb2ctZ3JvdXAnLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBuYW1lLFxuICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICApLFxuICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogYCR7bmFtZX06KmAsXG4gICAgICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhY2ssXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICk7XG5cbiAgICAvLyBsb2dzOkRlc2NyaWJlTG9nR3JvdXBzIGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2UtbGV2ZWwgcGVybWlzc2lvbnMuXG4gICAgLy8gVGhlIHJlc291cmNlIG11c3QgYmUgJyonIHBlciB0aGUgSUFNIHNlcnZpY2UgYXV0aG9yaXphdGlvbiByZWZlcmVuY2UuXG4gICAgLy8gU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hbWF6b25jbG91ZHdhdGNobG9ncy5odG1sXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiAnQ2xvdWRXYXRjaExvZ0Rlc2NyaWJlU3RhdGVtZW50JyxcbiAgICAgICAgYWN0aW9uczogRVZBTFVBVElPTl9DTE9VRFdBVENIX0xPR1NfREVTQ1JJQkVfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiAnQ2xvdWRXYXRjaExvZ1F1ZXJ5U3RhdGVtZW50JyxcbiAgICAgICAgYWN0aW9uczogRVZBTFVBVElPTl9DTE9VRFdBVENIX0xPR1NfUVVFUllfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogbG9nR3JvdXBBcm5zLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hMb2dXcml0ZVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1dSSVRFX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiAnbG9ncycsXG4gICAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnL2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ldmFsdWF0aW9ucy8qJyxcbiAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hJbmRleFBvbGljeVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9JTkRFWF9QT0xJQ1lfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICdsb2ctZ3JvdXAnLFxuICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6ICdhd3Mvc3BhbnMnLFxuICAgICAgICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgICksXG4gICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgICByZXNvdXJjZTogJ2xvZy1ncm91cCcsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJ2F3cy9zcGFuczoqJyxcbiAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0JlZHJvY2tJbnZva2VTdGF0ZW1lbnQnLFxuICAgICAgICBhY3Rpb25zOiBFVkFMVUFUSU9OX0JFRFJPQ0tfTU9ERUxfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46JHtBd3MuUEFSVElUSU9OfTpiZWRyb2NrOio6OmZvdW5kYXRpb24tbW9kZWwvKmAsXG4gICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ2JlZHJvY2snLFxuICAgICAgICAgICAgICByZXNvdXJjZTogJ2luZmVyZW5jZS1wcm9maWxlJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICAgICAgICAgIHJlZ2lvbjogJyonLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJvbGU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUnVsZUNvbmZpZyhwcm9wczogT25saW5lRXZhbHVhdGlvbkNvbmZpZ1Byb3BzKTogYmVkcm9ja2FnZW50Y29yZS5DZm5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnLlJ1bGVQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNhbXBsaW5nQ29uZmlnOiB7XG4gICAgICAgIHNhbXBsaW5nUGVyY2VudGFnZTogcHJvcHMuc2FtcGxpbmdQZXJjZW50YWdlID8/IDEwLFxuICAgICAgfSxcbiAgICAgIHNlc3Npb25Db25maWc6IHtcbiAgICAgICAgc2Vzc2lvblRpbWVvdXRNaW51dGVzOiBwcm9wcy5zZXNzaW9uVGltZW91dD8udG9NaW51dGVzKCkgPz8gMTUsXG4gICAgICB9LFxuICAgICAgLi4uKHByb3BzLmZpbHRlcnMgJiYgcHJvcHMuZmlsdGVycy5sZW5ndGggPiAwID8ge1xuICAgICAgICBmaWx0ZXJzOiBwcm9wcy5maWx0ZXJzLm1hcCgoZikgPT4gKHtcbiAgICAgICAgICBrZXk6IGYua2V5LFxuICAgICAgICAgIG9wZXJhdG9yOiBmLm9wZXJhdG9yLnZhbHVlLFxuICAgICAgICAgIHZhbHVlOiBmLnZhbHVlLl9iaW5kKCksXG4gICAgICAgIH0pKSxcbiAgICAgIH0gOiB7fSksXG4gICAgfTtcbiAgfVxufVxuIl19