@microsoft/terraform-cdk-constructs 1.3.0 → 1.3.1

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 (53) hide show
  1. package/.jsii +342 -82
  2. package/lib/azure-actiongroup/lib/action-group.js +1 -1
  3. package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
  4. package/lib/azure-aks/lib/aks-cluster.js +1 -1
  5. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
  6. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
  7. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
  8. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
  9. package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
  10. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
  11. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
  12. package/lib/azure-dnszone/lib/dns-zone.js +1 -1
  13. package/lib/azure-metricalert/lib/metric-alert.js +1 -1
  14. package/lib/azure-networkinterface/lib/network-interface.js +1 -1
  15. package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
  16. package/lib/azure-policyassignment/lib/policy-assignment.d.ts +7 -0
  17. package/lib/azure-policyassignment/lib/policy-assignment.js +11 -2
  18. package/lib/azure-policydefinition/lib/policy-definition.d.ts +21 -0
  19. package/lib/azure-policydefinition/lib/policy-definition.js +40 -3
  20. package/lib/azure-policydefinition/test/policy-definition.spec.js +211 -1
  21. package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
  22. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
  23. package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
  24. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  25. package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
  26. package/lib/azure-roledefinition/lib/role-definition.js +1 -1
  27. package/lib/azure-storageaccount/lib/storage-account.js +1 -1
  28. package/lib/azure-subnet/lib/subnet.js +1 -1
  29. package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
  30. package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
  31. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
  32. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
  33. package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
  34. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
  35. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
  36. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
  37. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +1 -1
  38. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
  39. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +28 -0
  40. package/lib/core-azure/lib/azapi/azapi-resource.js +60 -10
  41. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  42. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  43. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
  44. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  45. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  46. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  47. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
  48. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  49. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  50. package/lib/testing/index.js +2 -2
  51. package/lib/testing/lib/cleanup.js +1 -1
  52. package/lib/testing/lib/metadata.js +1 -1
  53. package/package.json +1 -1
@@ -168,7 +168,7 @@ class ActionGroup extends azapi_resource_1.AzapiResource {
168
168
  }
169
169
  exports.ActionGroup = ActionGroup;
170
170
  _a = JSII_RTTI_SYMBOL_1;
171
- ActionGroup[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ActionGroup", version: "1.3.0" };
171
+ ActionGroup[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ActionGroup", version: "1.3.1" };
172
172
  (() => {
173
173
  azapi_resource_1.AzapiResource.registerSchemas(action_group_schemas_1.ACTION_GROUP_TYPE, action_group_schemas_1.ALL_ACTION_GROUP_VERSIONS);
174
174
  })();
@@ -179,7 +179,7 @@ class ActivityLogAlert extends azapi_resource_1.AzapiResource {
179
179
  }
180
180
  exports.ActivityLogAlert = ActivityLogAlert;
181
181
  _a = JSII_RTTI_SYMBOL_1;
182
- ActivityLogAlert[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ActivityLogAlert", version: "1.3.0" };
182
+ ActivityLogAlert[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ActivityLogAlert", version: "1.3.1" };
183
183
  (() => {
184
184
  azapi_resource_1.AzapiResource.registerSchemas(activity_log_alert_schemas_1.ACTIVITY_LOG_ALERT_TYPE, activity_log_alert_schemas_1.ALL_ACTIVITY_LOG_ALERT_VERSIONS);
185
185
  })();
@@ -459,7 +459,7 @@ class AksCluster extends azapi_resource_1.AzapiResource {
459
459
  }
460
460
  exports.AksCluster = AksCluster;
461
461
  _a = JSII_RTTI_SYMBOL_1;
462
- AksCluster[_a] = { fqn: "@microsoft/terraform-cdk-constructs.AksCluster", version: "1.3.0" };
462
+ AksCluster[_a] = { fqn: "@microsoft/terraform-cdk-constructs.AksCluster", version: "1.3.1" };
463
463
  (() => {
464
464
  azapi_resource_1.AzapiResource.registerSchemas(aks_cluster_schemas_1.AKS_CLUSTER_TYPE, aks_cluster_schemas_1.ALL_AKS_CLUSTER_VERSIONS);
465
465
  })();
@@ -167,7 +167,7 @@ class DiagnosticSettings extends azapi_resource_1.AzapiResource {
167
167
  }
168
168
  exports.DiagnosticSettings = DiagnosticSettings;
169
169
  _a = JSII_RTTI_SYMBOL_1;
170
- DiagnosticSettings[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DiagnosticSettings", version: "1.3.0" };
170
+ DiagnosticSettings[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DiagnosticSettings", version: "1.3.1" };
171
171
  (() => {
172
172
  azapi_resource_1.AzapiResource.registerSchemas(diagnostic_settings_schemas_1.DIAGNOSTIC_SETTINGS_TYPE, diagnostic_settings_schemas_1.ALL_DIAGNOSTIC_SETTINGS_VERSIONS);
173
173
  })();
@@ -207,7 +207,7 @@ class DnsForwardingRuleset extends azapi_resource_1.AzapiResource {
207
207
  }
208
208
  exports.DnsForwardingRuleset = DnsForwardingRuleset;
209
209
  _a = JSII_RTTI_SYMBOL_1;
210
- DnsForwardingRuleset[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsForwardingRuleset", version: "1.3.0" };
210
+ DnsForwardingRuleset[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsForwardingRuleset", version: "1.3.1" };
211
211
  (() => {
212
212
  azapi_resource_1.AzapiResource.registerSchemas(dns_forwarding_ruleset_schemas_1.DNS_FORWARDING_RULESET_TYPE, dns_forwarding_ruleset_schemas_1.ALL_DNS_FORWARDING_RULESET_VERSIONS);
213
213
  })();
@@ -186,7 +186,7 @@ class ForwardingRule extends azapi_resource_1.AzapiResource {
186
186
  }
187
187
  exports.ForwardingRule = ForwardingRule;
188
188
  _a = JSII_RTTI_SYMBOL_1;
189
- ForwardingRule[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ForwardingRule", version: "1.3.0" };
189
+ ForwardingRule[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ForwardingRule", version: "1.3.1" };
190
190
  (() => {
191
191
  azapi_resource_1.AzapiResource.registerSchemas(forwarding_rule_schemas_1.FORWARDING_RULE_TYPE, forwarding_rule_schemas_1.ALL_FORWARDING_RULE_VERSIONS);
192
192
  })();
@@ -171,7 +171,7 @@ class DnsForwardingRulesetVirtualNetworkLink extends azapi_resource_1.AzapiResou
171
171
  }
172
172
  exports.DnsForwardingRulesetVirtualNetworkLink = DnsForwardingRulesetVirtualNetworkLink;
173
173
  _a = JSII_RTTI_SYMBOL_1;
174
- DnsForwardingRulesetVirtualNetworkLink[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsForwardingRulesetVirtualNetworkLink", version: "1.3.0" };
174
+ DnsForwardingRulesetVirtualNetworkLink[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsForwardingRulesetVirtualNetworkLink", version: "1.3.1" };
175
175
  (() => {
176
176
  azapi_resource_1.AzapiResource.registerSchemas(virtual_network_link_schemas_1.VIRTUAL_NETWORK_LINK_TYPE, virtual_network_link_schemas_1.ALL_VIRTUAL_NETWORK_LINK_VERSIONS);
177
177
  })();
@@ -229,7 +229,7 @@ class DnsResolver extends azapi_resource_1.AzapiResource {
229
229
  }
230
230
  exports.DnsResolver = DnsResolver;
231
231
  _a = JSII_RTTI_SYMBOL_1;
232
- DnsResolver[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolver", version: "1.3.0" };
232
+ DnsResolver[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolver", version: "1.3.1" };
233
233
  (() => {
234
234
  azapi_resource_1.AzapiResource.registerSchemas(dns_resolver_schemas_1.DNS_RESOLVER_TYPE, dns_resolver_schemas_1.ALL_DNS_RESOLVER_VERSIONS);
235
235
  })();
@@ -236,7 +236,7 @@ class DnsResolverInboundEndpoint extends azapi_resource_1.AzapiResource {
236
236
  }
237
237
  exports.DnsResolverInboundEndpoint = DnsResolverInboundEndpoint;
238
238
  _a = JSII_RTTI_SYMBOL_1;
239
- DnsResolverInboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverInboundEndpoint", version: "1.3.0" };
239
+ DnsResolverInboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverInboundEndpoint", version: "1.3.1" };
240
240
  (() => {
241
241
  azapi_resource_1.AzapiResource.registerSchemas(inbound_endpoint_schemas_1.DNS_RESOLVER_INBOUND_ENDPOINT_TYPE, inbound_endpoint_schemas_1.ALL_DNS_RESOLVER_INBOUND_ENDPOINT_VERSIONS);
242
242
  })();
@@ -227,7 +227,7 @@ class DnsResolverOutboundEndpoint extends azapi_resource_1.AzapiResource {
227
227
  }
228
228
  exports.DnsResolverOutboundEndpoint = DnsResolverOutboundEndpoint;
229
229
  _a = JSII_RTTI_SYMBOL_1;
230
- DnsResolverOutboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverOutboundEndpoint", version: "1.3.0" };
230
+ DnsResolverOutboundEndpoint[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsResolverOutboundEndpoint", version: "1.3.1" };
231
231
  (() => {
232
232
  azapi_resource_1.AzapiResource.registerSchemas(outbound_endpoint_schemas_1.DNS_RESOLVER_OUTBOUND_ENDPOINT_TYPE, outbound_endpoint_schemas_1.ALL_DNS_RESOLVER_OUTBOUND_ENDPOINT_VERSIONS);
233
233
  })();
@@ -221,7 +221,7 @@ class DnsZone extends azapi_resource_1.AzapiResource {
221
221
  }
222
222
  exports.DnsZone = DnsZone;
223
223
  _a = JSII_RTTI_SYMBOL_1;
224
- DnsZone[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsZone", version: "1.3.0" };
224
+ DnsZone[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsZone", version: "1.3.1" };
225
225
  (() => {
226
226
  azapi_resource_1.AzapiResource.registerSchemas(dns_zone_schemas_1.DNS_ZONE_TYPE, dns_zone_schemas_1.ALL_DNS_ZONE_VERSIONS);
227
227
  })();
@@ -219,7 +219,7 @@ class MetricAlert extends azapi_resource_1.AzapiResource {
219
219
  }
220
220
  exports.MetricAlert = MetricAlert;
221
221
  _a = JSII_RTTI_SYMBOL_1;
222
- MetricAlert[_a] = { fqn: "@microsoft/terraform-cdk-constructs.MetricAlert", version: "1.3.0" };
222
+ MetricAlert[_a] = { fqn: "@microsoft/terraform-cdk-constructs.MetricAlert", version: "1.3.1" };
223
223
  (() => {
224
224
  azapi_resource_1.AzapiResource.registerSchemas(metric_alert_schemas_1.METRIC_ALERT_TYPE, metric_alert_schemas_1.ALL_METRIC_ALERT_VERSIONS);
225
225
  })();
@@ -206,7 +206,7 @@ class NetworkInterface extends azapi_resource_1.AzapiResource {
206
206
  }
207
207
  exports.NetworkInterface = NetworkInterface;
208
208
  _a = JSII_RTTI_SYMBOL_1;
209
- NetworkInterface[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkInterface", version: "1.3.0" };
209
+ NetworkInterface[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkInterface", version: "1.3.1" };
210
210
  (() => {
211
211
  azapi_resource_1.AzapiResource.registerSchemas(network_interface_schemas_1.NETWORK_INTERFACE_TYPE, network_interface_schemas_1.ALL_NETWORK_INTERFACE_VERSIONS);
212
212
  })();
@@ -219,7 +219,7 @@ class NetworkSecurityGroup extends azapi_resource_1.AzapiResource {
219
219
  }
220
220
  exports.NetworkSecurityGroup = NetworkSecurityGroup;
221
221
  _a = JSII_RTTI_SYMBOL_1;
222
- NetworkSecurityGroup[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkSecurityGroup", version: "1.3.0" };
222
+ NetworkSecurityGroup[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkSecurityGroup", version: "1.3.1" };
223
223
  (() => {
224
224
  azapi_resource_1.AzapiResource.registerSchemas(network_security_group_schemas_1.NETWORK_SECURITY_GROUP_TYPE, network_security_group_schemas_1.ALL_NETWORK_SECURITY_GROUP_VERSIONS);
225
225
  })();
@@ -303,6 +303,13 @@ export declare class PolicyAssignment extends AzapiResource {
303
303
  * Uses the framework's schema resolution to get the appropriate schema
304
304
  */
305
305
  protected apiSchema(): ApiSchema;
306
+ /**
307
+ * Policy Assignments do not support tags at the resource level
308
+ * Tags are not a valid property for Microsoft.Authorization/policyAssignments
309
+ * @returns false - Policy Assignments cannot have tags
310
+ * @override
311
+ */
312
+ protected supportsTags(): boolean;
306
313
  /**
307
314
  * Creates the resource body for the Azure API call
308
315
  * Transforms the input properties into the JSON format expected by Azure REST API
@@ -135,6 +135,15 @@ class PolicyAssignment extends azapi_resource_1.AzapiResource {
135
135
  apiSchema() {
136
136
  return this.resolveSchema();
137
137
  }
138
+ /**
139
+ * Policy Assignments do not support tags at the resource level
140
+ * Tags are not a valid property for Microsoft.Authorization/policyAssignments
141
+ * @returns false - Policy Assignments cannot have tags
142
+ * @override
143
+ */
144
+ supportsTags() {
145
+ return false;
146
+ }
138
147
  /**
139
148
  * Creates the resource body for the Azure API call
140
149
  * Transforms the input properties into the JSON format expected by Azure REST API
@@ -221,8 +230,8 @@ class PolicyAssignment extends azapi_resource_1.AzapiResource {
221
230
  }
222
231
  exports.PolicyAssignment = PolicyAssignment;
223
232
  _a = JSII_RTTI_SYMBOL_1;
224
- PolicyAssignment[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicyAssignment", version: "1.3.0" };
233
+ PolicyAssignment[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicyAssignment", version: "1.3.1" };
225
234
  (() => {
226
235
  azapi_resource_1.AzapiResource.registerSchemas(policy_assignment_schemas_1.POLICY_ASSIGNMENT_TYPE, policy_assignment_schemas_1.ALL_POLICY_ASSIGNMENT_VERSIONS);
227
236
  })();
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWFzc2lnbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5YXNzaWdubWVudC9saWIvcG9saWN5LWFzc2lnbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCwrQkFBK0I7QUFFL0IsMkVBR3FDO0FBQ3JDLDhFQUdtRDtBQWtPbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdERztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsOEJBQWE7SUFpQmpELG9CQUFvQjtJQUVwQjs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGdFQUFnRTtRQUNoRSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQ0FBK0MsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLGdDQUFnQztnQkFDN0Ysc0VBQXNFLENBQ3pFLENBQUM7UUFDSixDQUFDO1FBRUQsbUZBQW1GO1FBRW5GLGdGQUFnRjtRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLFdBQVcsRUFBRSxpQ0FBaUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUs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LENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQXZMSCw0Q0F3TEM7OztBQXZMQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQixrREFBc0IsRUFDdEIsMERBQThCLENBQy9CLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBBenVyZSBQb2xpY3kgQXNzaWdubWVudCBpbXBsZW1lbnRhdGlvbiB1c2luZyBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZSBQb2xpY3kgQXNzaWdubWVudHNcbiAqIHVzaW5nIHRoZSBBWkFQSSBwcm92aWRlci4gUG9saWN5IGFzc2lnbm1lbnRzIGFwcGx5IHBvbGljeSBkZWZpbml0aW9ucyB0byBzcGVjaWZpYyBzY29wZXNcbiAqIChzdWJzY3JpcHRpb24sIHJlc291cmNlIGdyb3VwLCBvciByZXNvdXJjZSkgYW5kIGNhbiBwcm92aWRlIHBhcmFtZXRlciB2YWx1ZXMgYW5kXG4gKiBlbmZvcmNlbWVudCBzZXR0aW5ncy5cbiAqXG4gKiBTdXBwb3J0ZWQgQVBJIFZlcnNpb25zOlxuICogLSAyMDIyLTA2LTAxIChBY3RpdmUsIExhdGVzdClcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBTdXBwb3J0IGZvciBlbmZvcmNlbWVudCBtb2RlcyAoRGVmYXVsdCwgRG9Ob3RFbmZvcmNlKVxuICogLSBNYW5hZ2VkIGlkZW50aXR5IHN1cHBvcnQgZm9yIHJlbWVkaWF0aW9uIHBvbGljaWVzXG4gKiAtIEN1c3RvbSBub24tY29tcGxpYW5jZSBtZXNzYWdlc1xuICogLSBTY29wZSBleGNsdXNpb25zIChub3RTY29wZXMpXG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICovXG5cbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIEFMTF9QT0xJQ1lfQVNTSUdOTUVOVF9WRVJTSU9OUyxcbiAgUE9MSUNZX0FTU0lHTk1FTlRfVFlQRSxcbn0gZnJvbSBcIi4vcG9saWN5LWFzc2lnbm1lbnQtc2NoZW1hc1wiO1xuaW1wb3J0IHtcbiAgQXphcGlSZXNvdXJjZSxcbiAgQXphcGlSZXNvdXJjZVByb3BzLFxufSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvYXphcGktcmVzb3VyY2VcIjtcbmltcG9ydCB7IEFwaVNjaGVtYSB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi92ZXJzaW9uLW1hbmFnZXIvaW50ZXJmYWNlcy92ZXJzaW9uLWludGVyZmFjZXNcIjtcblxuLyoqXG4gKiBJZGVudGl0eSBjb25maWd1cmF0aW9uIGZvciBwb2xpY3kgYXNzaWdubWVudHNcbiAqIFJlcXVpcmVkIGZvciBwb2xpY2llcyB3aXRoIGRlcGxveUlmTm90RXhpc3RzIG9yIG1vZGlmeSBlZmZlY3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5QXNzaWdubWVudElkZW50aXR5IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIG1hbmFnZWQgaWRlbnRpdHlcbiAgICogQGV4YW1wbGUgXCJTeXN0ZW1Bc3NpZ25lZFwiLCBcIlVzZXJBc3NpZ25lZFwiLCBcIk5vbmVcIlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdXNlciBhc3NpZ25lZCBpZGVudGl0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogUmVxdWlyZWQgd2hlbiB0eXBlIGlzIFVzZXJBc3NpZ25lZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmcvcHJvdmlkZXJzL01pY3Jvc29mdC5NYW5hZ2VkSWRlbnRpdHkvdXNlckFzc2lnbmVkSWRlbnRpdGllcy9pZGVudGl0eVwiOiB7fVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSB1c2VyQXNzaWduZWRJZGVudGl0aWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBOb24tY29tcGxpYW5jZSBtZXNzYWdlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lBc3NpZ25tZW50Tm9uQ29tcGxpYW5jZU1lc3NhZ2Uge1xuICAvKipcbiAgICogVGhlIG5vbi1jb21wbGlhbmNlIG1lc3NhZ2UgZm9yIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGRlZmluaXRpb24gcmVmZXJlbmNlIElEIHdpdGhpbiBhIHBvbGljeSBzZXQgZGVmaW5pdGlvblxuICAgKiBPcHRpb25hbCAtIGlmIHNwZWNpZmllZCwgdGhpcyBtZXNzYWdlIGFwcGxpZXMgb25seSB0byB0aGUgc3BlY2lmaWVkIHBvbGljeSB3aXRoaW4gdGhlIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RGVmaW5pdGlvblJlZmVyZW5jZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSB1bmlmaWVkIEF6dXJlIFBvbGljeSBBc3NpZ25tZW50XG4gKlxuICogRXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMgd2l0aCBQb2xpY3kgQXNzaWdubWVudCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5QXNzaWdubWVudFByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgZGVmaW5pdGlvbiBJRCB0byBhc3NpZ25cbiAgICogVGhpcyBjYW4gYmUgYSBidWlsdC1pbiBvciBjdXN0b20gcG9saWN5IGRlZmluaXRpb25cbiAgICogUmVxdWlyZWQgcHJvcGVydHlcbiAgICpcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3BvbGljeS1uYW1lXCJcbiAgICogQGV4YW1wbGUgXCIvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zLzA2YTc4ZTIwLTkzNTgtNDFjOS05MjNjLWZiNzM2ZDM4MmE0ZFwiIChidWlsdC1pbilcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeURlZmluaXRpb25JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgYXQgd2hpY2ggdGhlIHBvbGljeSBhc3NpZ25tZW50IGlzIGFwcGxpZWRcbiAgICogQ2FuIGJlIGEgc3Vic2NyaXB0aW9uLCByZXNvdXJjZSBncm91cCwgb3IgcmVzb3VyY2VcbiAgICogUmVxdWlyZWQgcHJvcGVydHlcbiAgICpcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIlxuICAgKiBAZXhhbXBsZSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9yZy1uYW1lXCJcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIGFzc2lnbm1lbnRcbiAgICpcbiAgICogQGV4YW1wbGUgXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXMgaW4gcHJvZHVjdGlvblwiXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBhc3NpZ25tZW50IGRlc2NyaXB0aW9uXG4gICAqIFByb3ZpZGVzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhc3NpZ25tZW50XG4gICAqXG4gICAqIEBleGFtcGxlIFwiRW5mb3JjZXMgcmVxdWlyZWQgdGFncyBvbiBhbGwgcmVzb3VyY2VzIGluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmZvcmNlbWVudCBtb2RlIG9mIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBAZGVmYXVsdCBcIkRlZmF1bHRcIlxuICAgKiBAZXhhbXBsZSBcIkRlZmF1bHRcIiAtIFBvbGljeSBlZmZlY3QgaXMgZW5mb3JjZWQgZHVyaW5nIHJlc291cmNlIGNyZWF0aW9uL3VwZGF0ZVxuICAgKiBAZXhhbXBsZSBcIkRvTm90RW5mb3JjZVwiIC0gUG9saWN5IGVmZmVjdCBpcyBub3QgZW5mb3JjZWQgKGF1ZGl0IG9ubHkpXG4gICAqL1xuICByZWFkb25seSBlbmZvcmNlbWVudE1vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlcnMgZm9yIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBQcm92aWRlcyB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIHRhZ05hbWU6IHtcbiAgICogICAgIHZhbHVlOiBcIkVudmlyb25tZW50XCJcbiAgICogICB9LFxuICAgKiAgIHRhZ1ZhbHVlOiB7XG4gICAqICAgICB2YWx1ZTogXCJQcm9kdWN0aW9uXCJcbiAgICogICB9XG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogVXNlZCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGxpa2UgYXNzaWduZWRCeSwgcGFyYW1ldGVyU2NvcGVzLCBldGMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHtcbiAgICogICBhc3NpZ25lZEJ5OiBcImFkbWluQGV4YW1wbGUuY29tXCIsXG4gICAqICAgcGFyYW1ldGVyU2NvcGVzOiB7fVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IGFueTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZWQgaWRlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBSZXF1aXJlZCBmb3IgcG9saWNpZXMgd2l0aCBkZXBsb3lJZk5vdEV4aXN0cyBvciBtb2RpZnkgZWZmZWN0c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgdHlwZTogXCJTeXN0ZW1Bc3NpZ25lZFwiXG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IGlkZW50aXR5PzogUG9saWN5QXNzaWdubWVudElkZW50aXR5O1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5J3MgZXhjbHVkZWQgc2NvcGVzXG4gICAqIFJlc291cmNlcyB3aXRoaW4gdGhlc2Ugc2NvcGVzIHdpbGwgbm90IGJlIGV2YWx1YXRlZCBieSB0aGUgcG9saWN5XG4gICAqXG4gICAqIEBleGFtcGxlIFtcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9leGNsdWRlZC1yZ1wiXVxuICAgKi9cbiAgcmVhZG9ubHkgbm90U2NvcGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBub24tY29tcGxpYW5jZSBtZXNzYWdlcyBmb3IgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqIFByb3ZpZGVzIGN1c3RvbSBtZXNzYWdlcyB3aGVuIHJlc291cmNlcyBhcmUgbm9uLWNvbXBsaWFudFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBbXG4gICAqICAge1xuICAgKiAgICAgbWVzc2FnZTogXCJSZXNvdXJjZSBtdXN0IGhhdmUgdGhlIEVudmlyb25tZW50IHRhZ1wiXG4gICAqICAgfVxuICAgKiBdXG4gICAqL1xuICByZWFkb25seSBub25Db21wbGlhbmNlTWVzc2FnZXM/OiBQb2xpY3lBc3NpZ25tZW50Tm9uQ29tcGxpYW5jZU1lc3NhZ2VbXTtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJtZXRhZGF0YVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlQ2hhbmdlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgaW50ZXJmYWNlIGZvciBBenVyZSBQb2xpY3kgQXNzaWdubWVudFxuICogVGhpcyBpcyByZXF1aXJlZCBmb3IgSlNJSSBjb21wbGlhbmNlIHRvIHN1cHBvcnQgbXVsdGktbGFuZ3VhZ2UgY29kZSBnZW5lcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5QXNzaWdubWVudFByb3BlcnRpZXMge1xuICAvKipcbiAgICogVGhlIHBvbGljeSBkZWZpbml0aW9uIElEXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lEZWZpbml0aW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNjb3BlIG9mIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGFzc2lnbm1lbnQgZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5mb3JjZW1lbnQgbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5mb3JjZW1lbnRNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5J3MgZXhjbHVkZWQgc2NvcGVzXG4gICAqL1xuICByZWFkb25seSBub3RTY29wZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5vbi1jb21wbGlhbmNlIG1lc3NhZ2VzXG4gICAqL1xuICByZWFkb25seSBub25Db21wbGlhbmNlTWVzc2FnZXM/OiBQb2xpY3lBc3NpZ25tZW50Tm9uQ29tcGxpYW5jZU1lc3NhZ2VbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgYm9keSBpbnRlcmZhY2UgZm9yIEF6dXJlIFBvbGljeSBBc3NpZ25tZW50IEFQSSBjYWxsc1xuICogVGhpcyBtYXRjaGVzIHRoZSBBenVyZSBSRVNUIEFQSSBzY2hlbWEgZm9yIHBvbGljeSBhc3NpZ25tZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUFzc2lnbm1lbnRCb2R5IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydGllczogUG9saWN5QXNzaWdubWVudFByb3BlcnRpZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBtYW5hZ2VkIGlkZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGlkZW50aXR5PzogUG9saWN5QXNzaWdubWVudElkZW50aXR5O1xufVxuXG4vKipcbiAqIFVuaWZpZWQgQXp1cmUgUG9saWN5IEFzc2lnbm1lbnQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZVxuICogUG9saWN5IEFzc2lnbm1lbnRzLiBJdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbixcbiAqIGFuZCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbi5cbiAqXG4gKiBOb3RlOiBQb2xpY3kgYXNzaWdubWVudHMgY2FuIGJlIGRlcGxveWVkIGF0IHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG9yIHJlc291cmNlIHNjb3BlLlxuICogTGlrZSBwb2xpY3kgZGVmaW5pdGlvbnMsIHRoZXkgZG8gbm90IGhhdmUgYSBsb2NhdGlvbiBwcm9wZXJ0eSBhcyB0aGV5IGFyZSBub3QgcmVnaW9uLXNwZWNpZmljLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyBwb2xpY3kgYXNzaWdubWVudDpcbiAqIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudCh0aGlzLCBcImFzc2lnbm1lbnRcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLWFzc2lnbm1lbnRcIixcbiAqICAgcG9saWN5RGVmaW5pdGlvbklkOiBwb2xpY3lEZWZpbml0aW9uLmlkLFxuICogICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmctbmFtZVwiLFxuICogICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXNcIixcbiAqICAgZGVzY3JpcHRpb246IFwiRW5mb3JjZXMgcmVxdWlyZWQgdGFncyBvbiByZXNvdXJjZXNcIlxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBvbGljeSBhc3NpZ25tZW50IHdpdGggcGFyYW1ldGVyczpcbiAqIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudCh0aGlzLCBcImFzc2lnbm1lbnRcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLWFzc2lnbm1lbnRcIixcbiAqICAgcG9saWN5RGVmaW5pdGlvbklkOiBwb2xpY3lEZWZpbml0aW9uLmlkLFxuICogICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAqICAgcGFyYW1ldGVyczoge1xuICogICAgIHRhZ05hbWU6IHtcbiAqICAgICAgIHZhbHVlOiBcIkVudmlyb25tZW50XCJcbiAqICAgICB9LFxuICogICAgIHRhZ1ZhbHVlOiB7XG4gKiAgICAgICB2YWx1ZTogXCJQcm9kdWN0aW9uXCJcbiAqICAgICB9XG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQb2xpY3kgYXNzaWdubWVudCB3aXRoIG1hbmFnZWQgaWRlbnRpdHk6XG4gKiBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQodGhpcywgXCJhc3NpZ25tZW50XCIsIHtcbiAqICAgbmFtZTogXCJkZXBsb3ktbW9uaXRvcmluZy1hc3NpZ25tZW50XCIsXG4gKiAgIHBvbGljeURlZmluaXRpb25JZDogXCIvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3BvbGljeS1pZFwiLFxuICogICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAqICAgaWRlbnRpdHk6IHtcbiAqICAgICB0eXBlOiBcIlN5c3RlbUFzc2lnbmVkXCJcbiAqICAgfVxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFBvbGljeUFzc2lnbm1lbnQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIFBPTElDWV9BU1NJR05NRU5UX1RZUEUsXG4gICAgICBBTExfUE9MSUNZX0FTU0lHTk1FTlRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcHJvcGVydGllcyBmb3IgdGhpcyBQb2xpY3kgQXNzaWdubWVudCBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBQb2xpY3lBc3NpZ25tZW50UHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvLyBQdWJsaWMgcHJvcGVydGllc1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEF6dXJlIFBvbGljeSBBc3NpZ25tZW50IHVzaW5nIHRoZSBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICAgKlxuICAgKiBUaGUgY29uc3RydWN0b3IgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHJlZ2lzdHJhdGlvbixcbiAgICogdmFsaWRhdGlvbiwgYW5kIHJlc291cmNlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBQb2xpY3kgQXNzaWdubWVudFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBvbGljeUFzc2lnbm1lbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBsb2NhdGlvbiBpcyBwcm92aWRlZCB3aGVuIGlkZW50aXR5IGlzIHNwZWNpZmllZFxuICAgIGlmIChwcm9wcy5pZGVudGl0eSAmJiAhdGhpcy5sb2NhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTG9jYXRpb24gaXMgcmVxdWlyZWQgZm9yIFBvbGljeSBBc3NpZ25tZW50IFwiJHtwcm9wcy5uYW1lIHx8IGlkfVwiIHdoZW4gaWRlbnRpdHkgaXMgc3BlY2lmaWVkLiBgICtcbiAgICAgICAgICBgVGhlIG1hbmFnZWQgaWRlbnRpdHkgbXVzdCBiZSBwcm92aXNpb25lZCBpbiBhIHNwZWNpZmljIEF6dXJlIHJlZ2lvbi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmcgZnJvbSBvdGhlciByZXNvdXJjZXNcbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBQb2xpY3kgQXNzaWdubWVudFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFBvbGljeSBBc3NpZ25tZW50XCIsXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSBsb2dpY2FsIElEcyB0byBtYXRjaCBvcmlnaW5hbCBuYW1pbmcgY29udmVudGlvblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuXG4gICAgLy8gQXBwbHkgaWdub3JlIGNoYW5nZXMgaWYgc3BlY2lmaWVkXG4gICAgdGhpcy5fYXBwbHlJZ25vcmVDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVFVSVJFRCBBQlNUUkFDVCBNRVRIT0RTIEZST00gQXphcGlSZXNvdXJjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG5vIGV4cGxpY2l0IHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gICAqIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHN0YWJsZSB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDIyLTA2LTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgUG9saWN5IEFzc2lnbm1lbnRzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFBPTElDWV9BU1NJR05NRU5UX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICogVXNlcyB0aGUgZnJhbWV3b3JrJ3Mgc2NoZW1hIHJlc29sdXRpb24gdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBzY2hlbWFcbiAgICovXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcmVzb3VyY2UgYm9keSBmb3IgdGhlIEF6dXJlIEFQSSBjYWxsXG4gICAqIFRyYW5zZm9ybXMgdGhlIGlucHV0IHByb3BlcnRpZXMgaW50byB0aGUgSlNPTiBmb3JtYXQgZXhwZWN0ZWQgYnkgQXp1cmUgUkVTVCBBUElcbiAgICpcbiAgICogTm90ZTogUG9saWN5IGFzc2lnbm1lbnRzIGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmVcbiAgICogc2NvcGVkIHJlc291cmNlcyAoc3Vic2NyaXB0aW9uLCByZXNvdXJjZSBncm91cCwgb3IgcmVzb3VyY2UgbGV2ZWwpLlxuICAgKiBUaGUgc2NvcGUgcHJvcGVydHkgaXMgTk9UIGluY2x1ZGVkIGluIHRoZSBib2R5IGFzIGl0J3MgcmVhZC1vbmx5IGFuZFxuICAgKiBhdXRvbWF0aWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgcGFyZW50SWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQb2xpY3lBc3NpZ25tZW50UHJvcHM7XG5cbiAgICBjb25zdCBib2R5OiBhbnkgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDogdHlwZWRQcm9wcy5wb2xpY3lEZWZpbml0aW9uSWQsXG4gICAgICAgIC8vIE5vdGU6IHNjb3BlIGlzIE5PVCBpbmNsdWRlZCBoZXJlIC0gaXQncyByZWFkLW9ubHkgYW5kIGRlcml2ZWQgZnJvbSBwYXJlbnRJZFxuICAgICAgICBkaXNwbGF5TmFtZTogdHlwZWRQcm9wcy5kaXNwbGF5TmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHR5cGVkUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgIGVuZm9yY2VtZW50TW9kZTogdHlwZWRQcm9wcy5lbmZvcmNlbWVudE1vZGUgfHwgXCJEZWZhdWx0XCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHR5cGVkUHJvcHMucGFyYW1ldGVycyxcbiAgICAgICAgbWV0YWRhdGE6IHR5cGVkUHJvcHMubWV0YWRhdGEsXG4gICAgICAgIG5vdFNjb3BlczogdHlwZWRQcm9wcy5ub3RTY29wZXMsXG4gICAgICAgIG5vbkNvbXBsaWFuY2VNZXNzYWdlczogdHlwZWRQcm9wcy5ub25Db21wbGlhbmNlTWVzc2FnZXMsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBBZGQgaWRlbnRpdHkgaWYgcHJvdmlkZWRcbiAgICBpZiAodHlwZWRQcm9wcy5pZGVudGl0eSkge1xuICAgICAgYm9keS5pZGVudGl0eSA9IHR5cGVkUHJvcHMuaWRlbnRpdHk7XG4gICAgICAvLyBBenVyZSByZXF1aXJlcyBsb2NhdGlvbiB3aGVuIGlkZW50aXR5IGlzIHNwZWNpZmllZCBmb3IgbWFuYWdlZCBpZGVudGl0eSBwcm92aXNpb25pbmdcbiAgICAgIGJvZHkubG9jYXRpb24gPSB0eXBlZFByb3BzLmxvY2F0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBwYXJlbnQgSUQgcmVzb2x1dGlvbiB0byB1c2UgdGhlIHNjb3BlIGZyb20gcHJvcHNcbiAgICogUG9saWN5IGFzc2lnbm1lbnRzIGFyZSBzY29wZWQgcmVzb3VyY2VzIHdoZXJlIHRoZSBzY29wZSBJUyB0aGUgcGFyZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBQb2xpY3lBc3NpZ25tZW50UHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMuc2NvcGU7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQVUJMSUMgTUVUSE9EUyBGT1IgUE9MSUNZIEFTU0lHTk1FTlQgT1BFUkFUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdXNlIGluIG90aGVyIEF6dXJlIHJlc291cmNlc1xuICAgKiBBbGlhcyBmb3IgdGhlIGlkIHByb3BlcnR5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvbGljeSBkZWZpbml0aW9uIElEIHRoaXMgYXNzaWdubWVudCByZWZlcmVuY2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvbGljeURlZmluaXRpb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBvbGljeURlZmluaXRpb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNjb3BlIG9mIHRoaXMgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHB1YmxpYyBnZXQgYXNzaWdubWVudFNjb3BlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc2NvcGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBlbmZvcmNlbWVudCBtb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVuZm9yY2VtZW50TW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVuZm9yY2VtZW50TW9kZSB8fCBcIkRlZmF1bHRcIjtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZ25vcmVfY2hhbmdlczogdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuICB9XG59XG4iXX0=
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWFzc2lnbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5YXNzaWdubWVudC9saWIvcG9saWN5LWFzc2lnbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCwrQkFBK0I7QUFFL0IsMkVBR3FDO0FBQ3JDLDhFQUdtRDtBQWtPbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdERztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsOEJBQWE7SUFpQmpELG9CQUFvQjtJQUVwQjs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGdFQUFnRTtRQUNoRSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQ0FBK0MsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLGdDQUFnQztnQkFDN0Ysc0VBQXNFLENBQ3pFLENBQUM7UUFDSixDQUFDO1FBRUQsbUZBQW1GO1FBRW5GLGdGQUFnRjtRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLFdBQVcsRUFBRSxpQ0FBaUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUs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OUM7b0JBQ0UsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTtpQkFDekM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUFqTUgsNENBa01DOzs7QUFqTUM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FDM0Isa0RBQXNCLEVBQ3RCLDBEQUE4QixDQUMvQixDQUFDO0FBQ0osQ0FBQyxHQUFBLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgQXp1cmUgUG9saWN5IEFzc2lnbm1lbnQgaW1wbGVtZW50YXRpb24gdXNpbmcgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdmVyc2lvbi1hd2FyZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWFuYWdpbmcgQXp1cmUgUG9saWN5IEFzc2lnbm1lbnRzXG4gKiB1c2luZyB0aGUgQVpBUEkgcHJvdmlkZXIuIFBvbGljeSBhc3NpZ25tZW50cyBhcHBseSBwb2xpY3kgZGVmaW5pdGlvbnMgdG8gc3BlY2lmaWMgc2NvcGVzXG4gKiAoc3Vic2NyaXB0aW9uLCByZXNvdXJjZSBncm91cCwgb3IgcmVzb3VyY2UpIGFuZCBjYW4gcHJvdmlkZSBwYXJhbWV0ZXIgdmFsdWVzIGFuZFxuICogZW5mb3JjZW1lbnQgc2V0dGluZ3MuXG4gKlxuICogU3VwcG9ydGVkIEFQSSBWZXJzaW9uczpcbiAqIC0gMjAyMi0wNi0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gU3VwcG9ydCBmb3IgZW5mb3JjZW1lbnQgbW9kZXMgKERlZmF1bHQsIERvTm90RW5mb3JjZSlcbiAqIC0gTWFuYWdlZCBpZGVudGl0eSBzdXBwb3J0IGZvciByZW1lZGlhdGlvbiBwb2xpY2llc1xuICogLSBDdXN0b20gbm9uLWNvbXBsaWFuY2UgbWVzc2FnZXNcbiAqIC0gU2NvcGUgZXhjbHVzaW9ucyAobm90U2NvcGVzKVxuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfUE9MSUNZX0FTU0lHTk1FTlRfVkVSU0lPTlMsXG4gIFBPTElDWV9BU1NJR05NRU5UX1RZUEUsXG59IGZyb20gXCIuL3BvbGljeS1hc3NpZ25tZW50LXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogSWRlbnRpdHkgY29uZmlndXJhdGlvbiBmb3IgcG9saWN5IGFzc2lnbm1lbnRzXG4gKiBSZXF1aXJlZCBmb3IgcG9saWNpZXMgd2l0aCBkZXBsb3lJZk5vdEV4aXN0cyBvciBtb2RpZnkgZWZmZWN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUFzc2lnbm1lbnRJZGVudGl0eSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBtYW5hZ2VkIGlkZW50aXR5XG4gICAqIEBleGFtcGxlIFwiU3lzdGVtQXNzaWduZWRcIiwgXCJVc2VyQXNzaWduZWRcIiwgXCJOb25lXCJcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVzZXIgYXNzaWduZWQgaWRlbnRpdGllcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqIFJlcXVpcmVkIHdoZW4gdHlwZSBpcyBVc2VyQXNzaWduZWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3JnL3Byb3ZpZGVycy9NaWNyb3NvZnQuTWFuYWdlZElkZW50aXR5L3VzZXJBc3NpZ25lZElkZW50aXRpZXMvaWRlbnRpdHlcIjoge31cbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckFzc2lnbmVkSWRlbnRpdGllcz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogTm9uLWNvbXBsaWFuY2UgbWVzc2FnZSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5QXNzaWdubWVudE5vbkNvbXBsaWFuY2VNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBub24tY29tcGxpYW5jZSBtZXNzYWdlIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBkZWZpbml0aW9uIHJlZmVyZW5jZSBJRCB3aXRoaW4gYSBwb2xpY3kgc2V0IGRlZmluaXRpb25cbiAgICogT3B0aW9uYWwgLSBpZiBzcGVjaWZpZWQsIHRoaXMgbWVzc2FnZSBhcHBsaWVzIG9ubHkgdG8gdGhlIHNwZWNpZmllZCBwb2xpY3kgd2l0aGluIHRoZSBzZXRcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeURlZmluaXRpb25SZWZlcmVuY2VJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgdW5pZmllZCBBenVyZSBQb2xpY3kgQXNzaWdubWVudFxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggUG9saWN5IEFzc2lnbm1lbnQgc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUFzc2lnbm1lbnRQcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGRlZmluaXRpb24gSUQgdG8gYXNzaWduXG4gICAqIFRoaXMgY2FuIGJlIGEgYnVpbHQtaW4gb3IgY3VzdG9tIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy9wb2xpY3ktbmFtZVwiXG4gICAqIEBleGFtcGxlIFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy8wNmE3OGUyMC05MzU4LTQxYzktOTIzYy1mYjczNmQzODJhNGRcIiAoYnVpbHQtaW4pXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lEZWZpbml0aW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNjb3BlIGF0IHdoaWNoIHRoZSBwb2xpY3kgYXNzaWdubWVudCBpcyBhcHBsaWVkXG4gICAqIENhbiBiZSBhIHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG9yIHJlc291cmNlXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCJcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmctbmFtZVwiXG4gICAqL1xuICByZWFkb25seSBzY29wZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSBhc3NpZ25tZW50XG4gICAqXG4gICAqIEBleGFtcGxlIFwiUmVxdWlyZSB0YWcgb24gcmVzb3VyY2VzIGluIHByb2R1Y3Rpb25cIlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgYXNzaWdubWVudCBkZXNjcmlwdGlvblxuICAgKiBQcm92aWRlcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXNzaWdubWVudFxuICAgKlxuICAgKiBAZXhhbXBsZSBcIkVuZm9yY2VzIHJlcXVpcmVkIHRhZ3Mgb24gYWxsIHJlc291cmNlcyBpbiBwcm9kdWN0aW9uIGVudmlyb25tZW50XCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5mb3JjZW1lbnQgbW9kZSBvZiB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogQGRlZmF1bHQgXCJEZWZhdWx0XCJcbiAgICogQGV4YW1wbGUgXCJEZWZhdWx0XCIgLSBQb2xpY3kgZWZmZWN0IGlzIGVuZm9yY2VkIGR1cmluZyByZXNvdXJjZSBjcmVhdGlvbi91cGRhdGVcbiAgICogQGV4YW1wbGUgXCJEb05vdEVuZm9yY2VcIiAtIFBvbGljeSBlZmZlY3QgaXMgbm90IGVuZm9yY2VkIChhdWRpdCBvbmx5KVxuICAgKi9cbiAgcmVhZG9ubHkgZW5mb3JjZW1lbnRNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogUHJvdmlkZXMgdmFsdWVzIGZvciBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHtcbiAgICogICB0YWdOYW1lOiB7XG4gICAqICAgICB2YWx1ZTogXCJFbnZpcm9ubWVudFwiXG4gICAqICAgfSxcbiAgICogICB0YWdWYWx1ZToge1xuICAgKiAgICAgdmFsdWU6IFwiUHJvZHVjdGlvblwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogYW55O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBmb3IgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqIFVzZWQgdG8gc3RvcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBsaWtlIGFzc2lnbmVkQnksIHBhcmFtZXRlclNjb3BlcywgZXRjLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgYXNzaWduZWRCeTogXCJhZG1pbkBleGFtcGxlLmNvbVwiLFxuICAgKiAgIHBhcmFtZXRlclNjb3Blczoge31cbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBtYW5hZ2VkIGlkZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogUmVxdWlyZWQgZm9yIHBvbGljaWVzIHdpdGggZGVwbG95SWZOb3RFeGlzdHMgb3IgbW9kaWZ5IGVmZmVjdHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIHR5cGU6IFwiU3lzdGVtQXNzaWduZWRcIlxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBpZGVudGl0eT86IFBvbGljeUFzc2lnbm1lbnRJZGVudGl0eTtcblxuICAvKipcbiAgICogVGhlIHBvbGljeSdzIGV4Y2x1ZGVkIHNjb3Blc1xuICAgKiBSZXNvdXJjZXMgd2l0aGluIHRoZXNlIHNjb3BlcyB3aWxsIG5vdCBiZSBldmFsdWF0ZWQgYnkgdGhlIHBvbGljeVxuICAgKlxuICAgKiBAZXhhbXBsZSBbXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvZXhjbHVkZWQtcmdcIl1cbiAgICovXG4gIHJlYWRvbmx5IG5vdFNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbm9uLWNvbXBsaWFuY2UgbWVzc2FnZXMgZm9yIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBQcm92aWRlcyBjdXN0b20gbWVzc2FnZXMgd2hlbiByZXNvdXJjZXMgYXJlIG5vbi1jb21wbGlhbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogW1xuICAgKiAgIHtcbiAgICogICAgIG1lc3NhZ2U6IFwiUmVzb3VyY2UgbXVzdCBoYXZlIHRoZSBFbnZpcm9ubWVudCB0YWdcIlxuICAgKiAgIH1cbiAgICogXVxuICAgKi9cbiAgcmVhZG9ubHkgbm9uQ29tcGxpYW5jZU1lc3NhZ2VzPzogUG9saWN5QXNzaWdubWVudE5vbkNvbXBsaWFuY2VNZXNzYWdlW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogQGV4YW1wbGUgW1wibWV0YWRhdGFcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGludGVyZmFjZSBmb3IgQXp1cmUgUG9saWN5IEFzc2lnbm1lbnRcbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIEpTSUkgY29tcGxpYW5jZSB0byBzdXBwb3J0IG11bHRpLWxhbmd1YWdlIGNvZGUgZ2VuZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUFzc2lnbm1lbnRQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgZGVmaW5pdGlvbiBJRFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RGVmaW5pdGlvbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzY29wZSBvZiB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBhc3NpZ25tZW50IGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVuZm9yY2VtZW50IG1vZGVcbiAgICovXG4gIHJlYWRvbmx5IGVuZm9yY2VtZW50TW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogUGFyYW1ldGVycyBmb3IgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogYW55O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBmb3IgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IGFueTtcblxuICAvKipcbiAgICogVGhlIHBvbGljeSdzIGV4Y2x1ZGVkIHNjb3Blc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90U2NvcGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBub24tY29tcGxpYW5jZSBtZXNzYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9uQ29tcGxpYW5jZU1lc3NhZ2VzPzogUG9saWN5QXNzaWdubWVudE5vbkNvbXBsaWFuY2VNZXNzYWdlW107XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBQb2xpY3kgQXNzaWdubWVudCBBUEkgY2FsbHNcbiAqIFRoaXMgbWF0Y2hlcyB0aGUgQXp1cmUgUkVTVCBBUEkgc2NoZW1hIGZvciBwb2xpY3kgYXNzaWdubWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lBc3NpZ25tZW50Qm9keSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFBvbGljeUFzc2lnbm1lbnRQcm9wZXJ0aWVzO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFuYWdlZCBpZGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBpZGVudGl0eT86IFBvbGljeUFzc2lnbm1lbnRJZGVudGl0eTtcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFBvbGljeSBBc3NpZ25tZW50IGltcGxlbWVudGF0aW9uXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbmdsZSwgdmVyc2lvbi1hd2FyZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWFuYWdpbmcgQXp1cmVcbiAqIFBvbGljeSBBc3NpZ25tZW50cy4gSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sXG4gKiBhbmQgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24uXG4gKlxuICogTm90ZTogUG9saWN5IGFzc2lnbm1lbnRzIGNhbiBiZSBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24sIHJlc291cmNlIGdyb3VwLCBvciByZXNvdXJjZSBzY29wZS5cbiAqIExpa2UgcG9saWN5IGRlZmluaXRpb25zLCB0aGV5IGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmUgbm90IHJlZ2lvbi1zcGVjaWZpYy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgcG9saWN5IGFzc2lnbm1lbnQ6XG4gKiBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQodGhpcywgXCJhc3NpZ25tZW50XCIsIHtcbiAqICAgbmFtZTogXCJyZXF1aXJlLXRhZy1hc3NpZ25tZW50XCIsXG4gKiAgIHBvbGljeURlZmluaXRpb25JZDogcG9saWN5RGVmaW5pdGlvbi5pZCxcbiAqICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3JnLW5hbWVcIixcbiAqICAgZGlzcGxheU5hbWU6IFwiUmVxdWlyZSB0YWcgb24gcmVzb3VyY2VzXCIsXG4gKiAgIGRlc2NyaXB0aW9uOiBcIkVuZm9yY2VzIHJlcXVpcmVkIHRhZ3Mgb24gcmVzb3VyY2VzXCJcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQb2xpY3kgYXNzaWdubWVudCB3aXRoIHBhcmFtZXRlcnM6XG4gKiBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQodGhpcywgXCJhc3NpZ25tZW50XCIsIHtcbiAqICAgbmFtZTogXCJyZXF1aXJlLXRhZy1hc3NpZ25tZW50XCIsXG4gKiAgIHBvbGljeURlZmluaXRpb25JZDogcG9saWN5RGVmaW5pdGlvbi5pZCxcbiAqICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gKiAgIHBhcmFtZXRlcnM6IHtcbiAqICAgICB0YWdOYW1lOiB7XG4gKiAgICAgICB2YWx1ZTogXCJFbnZpcm9ubWVudFwiXG4gKiAgICAgfSxcbiAqICAgICB0YWdWYWx1ZToge1xuICogICAgICAgdmFsdWU6IFwiUHJvZHVjdGlvblwiXG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUG9saWN5IGFzc2lnbm1lbnQgd2l0aCBtYW5hZ2VkIGlkZW50aXR5OlxuICogY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHRoaXMsIFwiYXNzaWdubWVudFwiLCB7XG4gKiAgIG5hbWU6IFwiZGVwbG95LW1vbml0b3JpbmctYXNzaWdubWVudFwiLFxuICogICBwb2xpY3lEZWZpbml0aW9uSWQ6IFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy9wb2xpY3ktaWRcIixcbiAqICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gKiAgIGlkZW50aXR5OiB7XG4gKiAgICAgdHlwZTogXCJTeXN0ZW1Bc3NpZ25lZFwiXG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lBc3NpZ25tZW50IGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBQT0xJQ1lfQVNTSUdOTUVOVF9UWVBFLFxuICAgICAgQUxMX1BPTElDWV9BU1NJR05NRU5UX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgUG9saWN5IEFzc2lnbm1lbnQgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogUG9saWN5QXNzaWdubWVudFByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLy8gUHVibGljIHByb3BlcnRpZXNcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBQb2xpY3kgQXNzaWdubWVudCB1c2luZyB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIHJlc29sdXRpb24sIHNjaGVtYSByZWdpc3RyYXRpb24sXG4gICAqIHZhbGlkYXRpb24sIGFuZCByZXNvdXJjZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUG9saWN5IEFzc2lnbm1lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQb2xpY3lBc3NpZ25tZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgbG9jYXRpb24gaXMgcHJvdmlkZWQgd2hlbiBpZGVudGl0eSBpcyBzcGVjaWZpZWRcbiAgICBpZiAocHJvcHMuaWRlbnRpdHkgJiYgIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYExvY2F0aW9uIGlzIHJlcXVpcmVkIGZvciBQb2xpY3kgQXNzaWdubWVudCBcIiR7cHJvcHMubmFtZSB8fCBpZH1cIiB3aGVuIGlkZW50aXR5IGlzIHNwZWNpZmllZC4gYCArXG4gICAgICAgICAgYFRoZSBtYW5hZ2VkIGlkZW50aXR5IG11c3QgYmUgcHJvdmlzaW9uZWQgaW4gYSBzcGVjaWZpYyBBenVyZSByZWdpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCBwcm9wZXJ0aWVzIGZyb20gdGhlIEFaQVBJIHJlc291cmNlIG91dHB1dHMgdXNpbmcgVGVycmFmb3JtIGludGVycG9sYXRpb25cblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgUG9saWN5IEFzc2lnbm1lbnRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBQb2xpY3kgQXNzaWdubWVudFwiLFxuICAgIH0pO1xuXG4gICAgLy8gT3ZlcnJpZGUgbG9naWNhbCBJRHMgdG8gbWF0Y2ggb3JpZ2luYWwgbmFtaW5nIGNvbnZlbnRpb25cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcblxuICAgIC8vIEFwcGx5IGlnbm9yZSBjaGFuZ2VzIGlmIHNwZWNpZmllZFxuICAgIHRoaXMuX2FwcGx5SWdub3JlQ2hhbmdlcygpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVRVUlSRUQgQUJTVFJBQ1QgTUVUSE9EUyBGUk9NIEF6YXBpUmVzb3VyY2VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGVmYXVsdCBBUEkgdmVyc2lvbiB0byB1c2Ugd2hlbiBubyBleHBsaWNpdCB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICAgKiBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudCBzdGFibGUgdmVyc2lvbiBhcyB0aGUgZGVmYXVsdFxuICAgKi9cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAyMi0wNi0wMVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEF6dXJlIHJlc291cmNlIHR5cGUgZm9yIFBvbGljeSBBc3NpZ25tZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBQT0xJQ1lfQVNTSUdOTUVOVF9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqIFVzZXMgdGhlIGZyYW1ld29yaydzIHNjaGVtYSByZXNvbHV0aW9uIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgc2NoZW1hXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGljeSBBc3NpZ25tZW50cyBkbyBub3Qgc3VwcG9ydCB0YWdzIGF0IHRoZSByZXNvdXJjZSBsZXZlbFxuICAgKiBUYWdzIGFyZSBub3QgYSB2YWxpZCBwcm9wZXJ0eSBmb3IgTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5QXNzaWdubWVudHNcbiAgICogQHJldHVybnMgZmFsc2UgLSBQb2xpY3kgQXNzaWdubWVudHMgY2Fubm90IGhhdmUgdGFnc1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHJlc291cmNlIGJvZHkgZm9yIHRoZSBBenVyZSBBUEkgY2FsbFxuICAgKiBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIGludG8gdGhlIEpTT04gZm9ybWF0IGV4cGVjdGVkIGJ5IEF6dXJlIFJFU1QgQVBJXG4gICAqXG4gICAqIE5vdGU6IFBvbGljeSBhc3NpZ25tZW50cyBkbyBub3QgaGF2ZSBhIGxvY2F0aW9uIHByb3BlcnR5IGFzIHRoZXkgYXJlXG4gICAqIHNjb3BlZCByZXNvdXJjZXMgKHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG9yIHJlc291cmNlIGxldmVsKS5cbiAgICogVGhlIHNjb3BlIHByb3BlcnR5IGlzIE5PVCBpbmNsdWRlZCBpbiB0aGUgYm9keSBhcyBpdCdzIHJlYWQtb25seSBhbmRcbiAgICogYXV0b21hdGljYWxseSBkZXJpdmVkIGZyb20gdGhlIHBhcmVudElkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUG9saWN5QXNzaWdubWVudFByb3BzO1xuXG4gICAgY29uc3QgYm9keTogYW55ID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6IHR5cGVkUHJvcHMucG9saWN5RGVmaW5pdGlvbklkLFxuICAgICAgICAvLyBOb3RlOiBzY29wZSBpcyBOT1QgaW5jbHVkZWQgaGVyZSAtIGl0J3MgcmVhZC1vbmx5IGFuZCBkZXJpdmVkIGZyb20gcGFyZW50SWRcbiAgICAgICAgZGlzcGxheU5hbWU6IHR5cGVkUHJvcHMuZGlzcGxheU5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0eXBlZFByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICBlbmZvcmNlbWVudE1vZGU6IHR5cGVkUHJvcHMuZW5mb3JjZW1lbnRNb2RlIHx8IFwiRGVmYXVsdFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0eXBlZFByb3BzLnBhcmFtZXRlcnMsXG4gICAgICAgIG1ldGFkYXRhOiB0eXBlZFByb3BzLm1ldGFkYXRhLFxuICAgICAgICBub3RTY29wZXM6IHR5cGVkUHJvcHMubm90U2NvcGVzLFxuICAgICAgICBub25Db21wbGlhbmNlTWVzc2FnZXM6IHR5cGVkUHJvcHMubm9uQ29tcGxpYW5jZU1lc3NhZ2VzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIGlkZW50aXR5IGlmIHByb3ZpZGVkXG4gICAgaWYgKHR5cGVkUHJvcHMuaWRlbnRpdHkpIHtcbiAgICAgIGJvZHkuaWRlbnRpdHkgPSB0eXBlZFByb3BzLmlkZW50aXR5O1xuICAgICAgLy8gQXp1cmUgcmVxdWlyZXMgbG9jYXRpb24gd2hlbiBpZGVudGl0eSBpcyBzcGVjaWZpZWQgZm9yIG1hbmFnZWQgaWRlbnRpdHkgcHJvdmlzaW9uaW5nXG4gICAgICBib2R5LmxvY2F0aW9uID0gdHlwZWRQcm9wcy5sb2NhdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgcGFyZW50IElEIHJlc29sdXRpb24gdG8gdXNlIHRoZSBzY29wZSBmcm9tIHByb3BzXG4gICAqIFBvbGljeSBhc3NpZ25tZW50cyBhcmUgc2NvcGVkIHJlc291cmNlcyB3aGVyZSB0aGUgc2NvcGUgSVMgdGhlIHBhcmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUG9saWN5QXNzaWdubWVudFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLnNjb3BlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFVCTElDIE1FVEhPRFMgRk9SIFBPTElDWSBBU1NJR05NRU5UIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHJlc291cmNlIGlkZW50aWZpZXIgZm9yIHVzZSBpbiBvdGhlciBBenVyZSByZXNvdXJjZXNcbiAgICogQWxpYXMgZm9yIHRoZSBpZCBwcm9wZXJ0eVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb2xpY3kgZGVmaW5pdGlvbiBJRCB0aGlzIGFzc2lnbm1lbnQgcmVmZXJlbmNlc1xuICAgKi9cbiAgcHVibGljIGdldCBwb2xpY3lEZWZpbml0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wb2xpY3lEZWZpbml0aW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzY29wZSBvZiB0aGlzIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGFzc2lnbm1lbnRTY29wZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnNjb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZW5mb3JjZW1lbnQgbW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBlbmZvcmNlbWVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbmZvcmNlbWVudE1vZGUgfHwgXCJEZWZhdWx0XCI7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgJiYgdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJsaWZlY3ljbGVcIiwgW1xuICAgICAgICB7XG4gICAgICAgICAgaWdub3JlX2NoYW5nZXM6IHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -240,6 +240,27 @@ export declare class PolicyDefinition extends AzapiResource {
240
240
  * subscription or management group scoped resources.
241
241
  */
242
242
  protected createResourceBody(props: any): any;
243
+ /**
244
+ * Policy Definitions do not support tags at the resource level
245
+ * Tags are not a valid property for Microsoft.Authorization/policyDefinitions
246
+ * @returns false - Policy Definitions cannot have tags
247
+ * @override
248
+ */
249
+ protected supportsTags(): boolean;
250
+ /**
251
+ * Customizes the AZAPI ResourceConfig for policy-specific requirements
252
+ *
253
+ * Policy definitions require special handling because:
254
+ * 1. They contain complex nested objects (ARM templates in DeployIfNotExists policies)
255
+ * 2. They use Azure Policy expressions like [field()], [parameters()], [variables()]
256
+ * which are NOT Terraform interpolations but Azure-native expressions
257
+ * 3. Schema validation may strip unknown properties from deeply nested structures
258
+ *
259
+ * @param config - The base ResourceConfig
260
+ * @returns Modified ResourceConfig with policy-specific settings
261
+ * @override
262
+ */
263
+ protected customizeResourceConfig(config: any): any;
243
264
  /**
244
265
  * Get the full resource identifier for use in other Azure resources
245
266
  * Alias for the id property
@@ -146,12 +146,49 @@ class PolicyDefinition extends azapi_resource_1.AzapiResource {
146
146
  description: typedProps.description,
147
147
  policyType: typedProps.policyType || "Custom",
148
148
  mode: typedProps.mode || "All",
149
- policyRule: typedProps.policyRule,
149
+ // Deep clone policyRule to preserve all nested objects and Azure Policy expressions
150
+ // This ensures complex DeployIfNotExists policies with ARM templates are fully serialized
151
+ // Azure Policy expressions like [field()], [parameters()], [variables()] are preserved
152
+ policyRule: JSON.parse(JSON.stringify(typedProps.policyRule)),
150
153
  parameters: typedProps.parameters,
151
154
  metadata: typedProps.metadata,
152
155
  },
153
156
  };
154
157
  }
158
+ /**
159
+ * Policy Definitions do not support tags at the resource level
160
+ * Tags are not a valid property for Microsoft.Authorization/policyDefinitions
161
+ * @returns false - Policy Definitions cannot have tags
162
+ * @override
163
+ */
164
+ supportsTags() {
165
+ return false;
166
+ }
167
+ /**
168
+ * Customizes the AZAPI ResourceConfig for policy-specific requirements
169
+ *
170
+ * Policy definitions require special handling because:
171
+ * 1. They contain complex nested objects (ARM templates in DeployIfNotExists policies)
172
+ * 2. They use Azure Policy expressions like [field()], [parameters()], [variables()]
173
+ * which are NOT Terraform interpolations but Azure-native expressions
174
+ * 3. Schema validation may strip unknown properties from deeply nested structures
175
+ *
176
+ * @param config - The base ResourceConfig
177
+ * @returns Modified ResourceConfig with policy-specific settings
178
+ * @override
179
+ */
180
+ customizeResourceConfig(config) {
181
+ return {
182
+ ...config,
183
+ // Disable schema validation to preserve all nested properties
184
+ // Azure Policy definitions can contain deeply nested ARM templates and expressions
185
+ // that the AZAPI provider's schema validation may not recognize
186
+ schemaValidationEnabled: false,
187
+ // Allow properties not in the schema to prevent stripping of nested content
188
+ // This is essential for DeployIfNotExists policies with ARM template deployments
189
+ ignoreMissingProperty: true,
190
+ };
191
+ }
155
192
  // =============================================================================
156
193
  // PUBLIC METHODS FOR POLICY DEFINITION OPERATIONS
157
194
  // =============================================================================
@@ -192,8 +229,8 @@ class PolicyDefinition extends azapi_resource_1.AzapiResource {
192
229
  }
193
230
  exports.PolicyDefinition = PolicyDefinition;
194
231
  _a = JSII_RTTI_SYMBOL_1;
195
- PolicyDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicyDefinition", version: "1.3.0" };
232
+ PolicyDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicyDefinition", version: "1.3.1" };
196
233
  (() => {
197
234
  azapi_resource_1.AzapiResource.registerSchemas(policy_definition_schemas_1.POLICY_DEFINITION_TYPE, policy_definition_schemas_1.ALL_POLICY_DEFINITION_VERSIONS);
198
235
  })();
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5ZGVmaW5pdGlvbi9saWIvcG9saWN5LWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVILCtCQUErQjtBQUUvQiwyRUFHcUM7QUFDckMsOEVBR21EO0FBa0puRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxREc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDhCQUFhO0lBaUJqRCxvQkFBb0I7SUFFcEI7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFFbkYsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLG1DQUFtQztTQUNqRCxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLCtDQUErQztJQUMvQyxnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sa0RBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBOEIsQ0FBQztRQUNsRCxPQUFPO1lBQ0wsVUFBVSxFQUFFO2dCQUNWLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztnQkFDbkMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsSUFBSSxRQUFRO2dCQUM3QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxLQUFLO2dCQUM5QixVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7Z0JBQ2pDLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtnQkFDakMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2FBQzlCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsa0RBQWtEO0lBQ2xELGdGQUFnRjtJQUVoRjs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELGdGQUFnRjtJQUNoRix5QkFBeUI7SUFDekIsZ0ZBQWdGO0lBRWhGOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUM5QztvQkFDRSxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2lCQUN6QzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQWpKSCw0Q0FrSkM7OztBQWpKQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQixrREFBc0IsRUFDdEIsMERBQThCLENBQy9CLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBBenVyZSBQb2xpY3kgRGVmaW5pdGlvbiBpbXBsZW1lbnRhdGlvbiB1c2luZyBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZSBQb2xpY3kgRGVmaW5pdGlvbnNcbiAqIHVzaW5nIHRoZSBBWkFQSSBwcm92aWRlci4gUG9saWN5IGRlZmluaXRpb25zIGFyZSBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudFxuICogZ3JvdXAgc2NvcGUgYW5kIGRlZmluZSB0aGUgcnVsZXMgYW5kIHBhcmFtZXRlcnMgZm9yIHBvbGljeSBlbmZvcmNlbWVudC5cbiAqXG4gKiBTdXBwb3J0ZWQgQVBJIFZlcnNpb25zOlxuICogLSAyMDIxLTA2LTAxIChBY3RpdmUsIExhdGVzdClcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBTdXBwb3J0IGZvciBjdXN0b20gcG9saWN5IHJ1bGVzIGFuZCBwYXJhbWV0ZXJzXG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICovXG5cbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIEFMTF9QT0xJQ1lfREVGSU5JVElPTl9WRVJTSU9OUyxcbiAgUE9MSUNZX0RFRklOSVRJT05fVFlQRSxcbn0gZnJvbSBcIi4vcG9saWN5LWRlZmluaXRpb24tc2NoZW1hc1wiO1xuaW1wb3J0IHtcbiAgQXphcGlSZXNvdXJjZSxcbiAgQXphcGlSZXNvdXJjZVByb3BzLFxufSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvYXphcGktcmVzb3VyY2VcIjtcbmltcG9ydCB7IEFwaVNjaGVtYSB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi92ZXJzaW9uLW1hbmFnZXIvaW50ZXJmYWNlcy92ZXJzaW9uLWludGVyZmFjZXNcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgdW5pZmllZCBBenVyZSBQb2xpY3kgRGVmaW5pdGlvblxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggUG9saWN5IERlZmluaXRpb24gc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeURlZmluaXRpb25Qcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBwb2xpY3kgZGVmaW5pdGlvblxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSBwb2xpY3lcbiAgICpcbiAgICogQGV4YW1wbGUgXCJSZXF1aXJlIHRhZyBhbmQgaXRzIHZhbHVlIG9uIHJlc291cmNlc1wiXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBkZWZpbml0aW9uIGRlc2NyaXB0aW9uXG4gICAqIFByb3ZpZGVzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIHBvbGljeSBlbmZvcmNlc1xuICAgKlxuICAgKiBAZXhhbXBsZSBcIkVuZm9yY2VzIGEgcmVxdWlyZWQgdGFnIGFuZCBpdHMgdmFsdWUgb24gcmVzb3VyY2VzXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBwb2xpY3kgZGVmaW5pdGlvblxuICAgKiBAZGVmYXVsdCBcIkN1c3RvbVwiXG4gICAqIEBleGFtcGxlIFwiQ3VzdG9tXCIsIFwiQnVpbHRJblwiLCBcIlN0YXRpY1wiLCBcIk5vdFNwZWNpZmllZFwiXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IG1vZGVcbiAgICogRGV0ZXJtaW5lcyB3aGljaCByZXNvdXJjZSB0eXBlcyB3aWxsIGJlIGV2YWx1YXRlZFxuICAgKiBAZGVmYXVsdCBcIkFsbFwiXG4gICAqIEBleGFtcGxlIFwiQWxsXCIsIFwiSW5kZXhlZFwiLCBcIk1pY3Jvc29mdC5LZXlWYXVsdC5EYXRhXCJcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgcnVsZSBhcyBhIEpTT04gb2JqZWN0XG4gICAqIERlZmluZXMgdGhlIGlmL3RoZW4gbG9naWMgdGhhdCBkZXRlcm1pbmVzIHBvbGljeSBlbmZvcmNlbWVudFxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBhbGwgcG9saWN5IGRlZmluaXRpb25zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHtcbiAgICogICBpZjoge1xuICAgKiAgICAgZmllbGQ6IFwidGFnc1snRW52aXJvbm1lbnQnXVwiLFxuICAgKiAgICAgZXhpc3RzOiBcImZhbHNlXCJcbiAgICogICB9LFxuICAgKiAgIHRoZW46IHtcbiAgICogICAgIGVmZmVjdDogXCJkZW55XCJcbiAgICogICB9XG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeVJ1bGU6IGFueTtcblxuICAvKipcbiAgICogUGFyYW1ldGVycyBmb3IgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIEFsbG93cyBwb2xpY3kgYXNzaWdubWVudHMgdG8gcHJvdmlkZSB2YWx1ZXMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgcG9saWN5IHJ1bGVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIHRhZ05hbWU6IHtcbiAgICogICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAqICAgICBtZXRhZGF0YToge1xuICAgKiAgICAgICBkaXNwbGF5TmFtZTogXCJUYWcgTmFtZVwiLFxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogXCJOYW1lIG9mIHRoZSB0YWcgdG8gZW5mb3JjZVwiXG4gICAqICAgICB9XG4gICAqICAgfVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogYW55O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBmb3IgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIFVzZWQgdG8gc3RvcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBsaWtlIGNhdGVnb3J5LCB2ZXJzaW9uLCBldGMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHtcbiAgICogICBjYXRlZ29yeTogXCJUYWdzXCIsXG4gICAqICAgdmVyc2lvbjogXCIxLjAuMFwiXG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHJ1bGVzIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAqIEBleGFtcGxlIFtcIm1ldGFkYXRhXCJdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBpbnRlcmZhY2UgZm9yIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBKU0lJIGNvbXBsaWFuY2UgdG8gc3VwcG9ydCBtdWx0aS1sYW5ndWFnZSBjb2RlIGdlbmVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lEZWZpbml0aW9uUHJvcGVydGllcyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBwb2xpY3kgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgZGVmaW5pdGlvbiBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHBvbGljeSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IG1vZGVcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgcnVsZSBvYmplY3RcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeVJ1bGU6IGFueTtcblxuICAvKipcbiAgICogUGFyYW1ldGVycyBmb3IgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogYW55O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBmb3IgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IGFueTtcbn1cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgYm9keSBpbnRlcmZhY2UgZm9yIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uIEFQSSBjYWxsc1xuICogVGhpcyBtYXRjaGVzIHRoZSBBenVyZSBSRVNUIEFQSSBzY2hlbWEgZm9yIHBvbGljeSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeURlZmluaXRpb25Cb2R5IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwb2xpY3kgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydGllczogUG9saWN5RGVmaW5pdGlvblByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogVW5pZmllZCBBenVyZSBQb2xpY3kgRGVmaW5pdGlvbiBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW5nbGUsIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gZm9yIG1hbmFnaW5nIEF6dXJlXG4gKiBQb2xpY3kgRGVmaW5pdGlvbnMuIEl0IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIHJlc29sdXRpb24sIHNjaGVtYSB2YWxpZGF0aW9uLFxuICogYW5kIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uLlxuICpcbiAqIE5vdGU6IFBvbGljeSBkZWZpbml0aW9ucyBhcmUgZGVwbG95ZWQgYXQgc3Vic2NyaXB0aW9uIG9yIG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGUuXG4gKiBVbmxpa2UgbW9zdCBBenVyZSByZXNvdXJjZXMsIHRoZXkgZG8gbm90IGhhdmUgYSBsb2NhdGlvbiBwcm9wZXJ0eSBhcyB0aGV5IGFyZVxuICogbm90IHJlZ2lvbi1zcGVjaWZpYy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgY3VzdG9tIHBvbGljeSBkZWZpbml0aW9uOlxuICogY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHRoaXMsIFwicG9saWN5XCIsIHtcbiAqICAgbmFtZTogXCJyZXF1aXJlLXRhZy1wb2xpY3lcIixcbiAqICAgZGlzcGxheU5hbWU6IFwiUmVxdWlyZSB0YWcgb24gcmVzb3VyY2VzXCIsXG4gKiAgIGRlc2NyaXB0aW9uOiBcIkVuZm9yY2VzIGEgcmVxdWlyZWQgdGFnIG9uIHJlc291cmNlc1wiLFxuICogICBwb2xpY3lSdWxlOiB7XG4gKiAgICAgaWY6IHtcbiAqICAgICAgIGZpZWxkOiBcInRhZ3NbJ0Vudmlyb25tZW50J11cIixcbiAqICAgICAgIGV4aXN0czogXCJmYWxzZVwiXG4gKiAgICAgfSxcbiAqICAgICB0aGVuOiB7XG4gKiAgICAgICBlZmZlY3Q6IFwiZGVueVwiXG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUG9saWN5IGRlZmluaXRpb24gd2l0aCBwYXJhbWV0ZXJzOlxuICogY29uc3QgcG9saWN5RGVmaW5pdGlvbiA9IG5ldyBQb2xpY3lEZWZpbml0aW9uKHRoaXMsIFwicG9saWN5XCIsIHtcbiAqICAgbmFtZTogXCJyZXF1aXJlLXRhZy1wb2xpY3lcIixcbiAqICAgZGlzcGxheU5hbWU6IFwiUmVxdWlyZSB0YWcgb24gcmVzb3VyY2VzXCIsXG4gKiAgIHBvbGljeVJ1bGU6IHtcbiAqICAgICBpZjoge1xuICogICAgICAgZmllbGQ6IFwiW2NvbmNhdCgndGFnc1snLCBwYXJhbWV0ZXJzKCd0YWdOYW1lJyksICddJyldXCIsXG4gKiAgICAgICBleGlzdHM6IFwiZmFsc2VcIlxuICogICAgIH0sXG4gKiAgICAgdGhlbjoge1xuICogICAgICAgZWZmZWN0OiBcImRlbnlcIlxuICogICAgIH1cbiAqICAgfSxcbiAqICAgcGFyYW1ldGVyczoge1xuICogICAgIHRhZ05hbWU6IHtcbiAqICAgICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gKiAgICAgICBtZXRhZGF0YToge1xuICogICAgICAgICBkaXNwbGF5TmFtZTogXCJUYWcgTmFtZVwiXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgUG9saWN5RGVmaW5pdGlvbiBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgUE9MSUNZX0RFRklOSVRJT05fVFlQRSxcbiAgICAgIEFMTF9QT0xJQ1lfREVGSU5JVElPTl9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGlzIFBvbGljeSBEZWZpbml0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IFBvbGljeURlZmluaXRpb25Qcm9wcztcblxuICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nXG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgUG9saWN5IERlZmluaXRpb24gdXNpbmcgdGhlIFZlcnNpb25lZEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgcmVnaXN0cmF0aW9uLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgcmVzb3VyY2UgY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFBvbGljeSBEZWZpbml0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmcgZnJvbSBvdGhlciByZXNvdXJjZXNcbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBQb2xpY3kgRGVmaW5pdGlvblwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFBvbGljeSBEZWZpbml0aW9uXCIsXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSBsb2dpY2FsIElEcyB0byBtYXRjaCBvcmlnaW5hbCBuYW1pbmcgY29udmVudGlvblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuXG4gICAgLy8gQXBwbHkgaWdub3JlIGNoYW5nZXMgaWYgc3BlY2lmaWVkXG4gICAgdGhpcy5fYXBwbHlJZ25vcmVDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVFVSVJFRCBBQlNUUkFDVCBNRVRIT0RTIEZST00gQXphcGlSZXNvdXJjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG5vIGV4cGxpY2l0IHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gICAqIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHN0YWJsZSB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDIxLTA2LTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgUG9saWN5IERlZmluaXRpb25zXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFBPTElDWV9ERUZJTklUSU9OX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICogVXNlcyB0aGUgZnJhbWV3b3JrJ3Mgc2NoZW1hIHJlc29sdXRpb24gdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBzY2hlbWFcbiAgICovXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcmVzb3VyY2UgYm9keSBmb3IgdGhlIEF6dXJlIEFQSSBjYWxsXG4gICAqIFRyYW5zZm9ybXMgdGhlIGlucHV0IHByb3BlcnRpZXMgaW50byB0aGUgSlNPTiBmb3JtYXQgZXhwZWN0ZWQgYnkgQXp1cmUgUkVTVCBBUElcbiAgICpcbiAgICogTm90ZTogUG9saWN5IGRlZmluaXRpb25zIGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmVcbiAgICogc3Vic2NyaXB0aW9uIG9yIG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGVkIHJlc291cmNlcy5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFBvbGljeURlZmluaXRpb25Qcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBkaXNwbGF5TmFtZTogdHlwZWRQcm9wcy5kaXNwbGF5TmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHR5cGVkUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgIHBvbGljeVR5cGU6IHR5cGVkUHJvcHMucG9saWN5VHlwZSB8fCBcIkN1c3RvbVwiLFxuICAgICAgICBtb2RlOiB0eXBlZFByb3BzLm1vZGUgfHwgXCJBbGxcIixcbiAgICAgICAgcG9saWN5UnVsZTogdHlwZWRQcm9wcy5wb2xpY3lSdWxlLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0eXBlZFByb3BzLnBhcmFtZXRlcnMsXG4gICAgICAgIG1ldGFkYXRhOiB0eXBlZFByb3BzLm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFVCTElDIE1FVEhPRFMgRk9SIFBPTElDWSBERUZJTklUSU9OIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHJlc291cmNlIGlkZW50aWZpZXIgZm9yIHVzZSBpbiBvdGhlciBBenVyZSByZXNvdXJjZXNcbiAgICogQWxpYXMgZm9yIHRoZSBpZCBwcm9wZXJ0eVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb2xpY3kgdHlwZVxuICAgKi9cbiAgcHVibGljIGdldCBwb2xpY3lUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucG9saWN5VHlwZSB8fCBcIkN1c3RvbVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9saWN5IG1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcG9saWN5TW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGUgfHwgXCJBbGxcIjtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZ25vcmVfY2hhbmdlczogdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuICB9XG59XG4iXX0=
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5ZGVmaW5pdGlvbi9saWIvcG9saWN5LWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVILCtCQUErQjtBQUUvQiwyRUFHcUM7QUFDckMsOEVBR21EO0FBa0puRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxREc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDhCQUFhO0lBaUJqRCxvQkFBb0I7SUFFcEI7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFFbkYsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLG1DQUFtQztTQUNqRCxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLCtDQUErQztJQUMvQyxnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sa0RBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBOEIsQ0FBQztRQUNsRCxPQUFPO1lBQ0wsVUFBVSxFQUFFO2dCQUNWLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztnQkFDbkMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsSUFBSSxRQUFRO2dCQUM3QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxLQUFLO2dCQUM5QixvRkFBb0Y7Z0JBQ3BGLDBGQUEwRjtnQkFDMUYsdUZBQXVGO2dCQUN2RixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0QsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO2dCQUNqQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7YUFDOUI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sWUFBWTtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDTyx1QkFBdUIsQ0FBQyxNQUFXO1FBQzNDLE9BQU87WUFDTCxHQUFHLE1BQU07WUFDVCw4REFBOEQ7WUFDOUQsbUZBQW1GO1lBQ25GLGdFQUFnRTtZQUNoRSx1QkFBdUIsRUFBRSxLQUFLO1lBQzlCLDRFQUE0RTtZQUM1RSxpRkFBaUY7WUFDakYscUJBQXFCLEVBQUUsSUFBSTtTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELGdGQUFnRjtJQUNoRixrREFBa0Q7SUFDbEQsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHlCQUF5QjtJQUN6QixnRkFBZ0Y7SUFFaEY7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlDO29CQUNFLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7aUJBQ3pDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBeExILDRDQXlMQzs7O0FBeExDO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLGtEQUFzQixFQUN0QiwwREFBOEIsQ0FDL0IsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uIGltcGxlbWVudGF0aW9uIHVzaW5nIFZlcnNpb25lZEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gZm9yIG1hbmFnaW5nIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uc1xuICogdXNpbmcgdGhlIEFaQVBJIHByb3ZpZGVyLiBQb2xpY3kgZGVmaW5pdGlvbnMgYXJlIGRlcGxveWVkIGF0IHN1YnNjcmlwdGlvbiBvciBtYW5hZ2VtZW50XG4gKiBncm91cCBzY29wZSBhbmQgZGVmaW5lIHRoZSBydWxlcyBhbmQgcGFyYW1ldGVycyBmb3IgcG9saWN5IGVuZm9yY2VtZW50LlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjEtMDYtMDEgKEFjdGl2ZSwgTGF0ZXN0KVxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBBdXRvbWF0aWMgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvbiB3aGVuIG5vIHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gKiAtIEV4cGxpY2l0IHZlcnNpb24gcGlubmluZyBmb3Igc3RhYmlsaXR5IHJlcXVpcmVtZW50c1xuICogLSBTY2hlbWEtZHJpdmVuIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uXG4gKiAtIFN1cHBvcnQgZm9yIGN1c3RvbSBwb2xpY3kgcnVsZXMgYW5kIHBhcmFtZXRlcnNcbiAqIC0gSlNJSSBjb21wbGlhbmNlIGZvciBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0XG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQUxMX1BPTElDWV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICBQT0xJQ1lfREVGSU5JVElPTl9UWVBFLFxufSBmcm9tIFwiLi9wb2xpY3ktZGVmaW5pdGlvbi1zY2hlbWFzXCI7XG5pbXBvcnQge1xuICBBemFwaVJlc291cmNlLFxuICBBemFwaVJlc291cmNlUHJvcHMsXG59IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9hemFwaS1yZXNvdXJjZVwiO1xuaW1wb3J0IHsgQXBpU2NoZW1hIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSB1bmlmaWVkIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uXG4gKlxuICogRXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMgd2l0aCBQb2xpY3kgRGVmaW5pdGlvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RGVmaW5pdGlvblByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIHBvbGljeVxuICAgKlxuICAgKiBAZXhhbXBsZSBcIlJlcXVpcmUgdGFnIGFuZCBpdHMgdmFsdWUgb24gcmVzb3VyY2VzXCJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGRlZmluaXRpb24gZGVzY3JpcHRpb25cbiAgICogUHJvdmlkZXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgcG9saWN5IGVuZm9yY2VzXG4gICAqXG4gICAqIEBleGFtcGxlIFwiRW5mb3JjZXMgYSByZXF1aXJlZCB0YWcgYW5kIGl0cyB2YWx1ZSBvbiByZXNvdXJjZXNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIEBkZWZhdWx0IFwiQ3VzdG9tXCJcbiAgICogQGV4YW1wbGUgXCJDdXN0b21cIiwgXCJCdWlsdEluXCIsIFwiU3RhdGljXCIsIFwiTm90U3BlY2lmaWVkXCJcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgbW9kZVxuICAgKiBEZXRlcm1pbmVzIHdoaWNoIHJlc291cmNlIHR5cGVzIHdpbGwgYmUgZXZhbHVhdGVkXG4gICAqIEBkZWZhdWx0IFwiQWxsXCJcbiAgICogQGV4YW1wbGUgXCJBbGxcIiwgXCJJbmRleGVkXCIsIFwiTWljcm9zb2Z0LktleVZhdWx0LkRhdGFcIlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBydWxlIGFzIGEgSlNPTiBvYmplY3RcbiAgICogRGVmaW5lcyB0aGUgaWYvdGhlbiBsb2dpYyB0aGF0IGRldGVybWluZXMgcG9saWN5IGVuZm9yY2VtZW50XG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBwb2xpY3kgZGVmaW5pdGlvbnNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIGlmOiB7XG4gICAqICAgICBmaWVsZDogXCJ0YWdzWydFbnZpcm9ubWVudCddXCIsXG4gICAqICAgICBleGlzdHM6IFwiZmFsc2VcIlxuICAgKiAgIH0sXG4gICAqICAgdGhlbjoge1xuICAgKiAgICAgZWZmZWN0OiBcImRlbnlcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UnVsZTogYW55O1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICogQWxsb3dzIHBvbGljeSBhc3NpZ25tZW50cyB0byBwcm92aWRlIHZhbHVlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBwb2xpY3kgcnVsZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgdGFnTmFtZToge1xuICAgKiAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAgICogICAgIG1ldGFkYXRhOiB7XG4gICAqICAgICAgIGRpc3BsYXlOYW1lOiBcIlRhZyBOYW1lXCIsXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgb2YgdGhlIHRhZyB0byBlbmZvcmNlXCJcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICogVXNlZCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGxpa2UgY2F0ZWdvcnksIHZlcnNpb24sIGV0Yy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIGNhdGVnb3J5OiBcIlRhZ3NcIixcbiAgICogICB2ZXJzaW9uOiBcIjEuMC4wXCJcbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogQGV4YW1wbGUgW1wibWV0YWRhdGFcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGludGVyZmFjZSBmb3IgQXp1cmUgUG9saWN5IERlZmluaXRpb25cbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIEpTSUkgY29tcGxpYW5jZSB0byBzdXBwb3J0IG11bHRpLWxhbmd1YWdlIGNvZGUgZ2VuZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeURlZmluaXRpb25Qcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBkZWZpbml0aW9uIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBydWxlIG9iamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UnVsZTogYW55O1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogYW55O1xufVxuXG4vKipcbiAqIFRoZSByZXNvdXJjZSBib2R5IGludGVyZmFjZSBmb3IgQXp1cmUgUG9saWN5IERlZmluaXRpb24gQVBJIGNhbGxzXG4gKiBUaGlzIG1hdGNoZXMgdGhlIEF6dXJlIFJFU1QgQVBJIHNjaGVtYSBmb3IgcG9saWN5IGRlZmluaXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RGVmaW5pdGlvbkJvZHkge1xuICAvKipcbiAgICogVGhlIHByb3BlcnRpZXMgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBQb2xpY3lEZWZpbml0aW9uUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uIGltcGxlbWVudGF0aW9uXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbmdsZSwgdmVyc2lvbi1hd2FyZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWFuYWdpbmcgQXp1cmVcbiAqIFBvbGljeSBEZWZpbml0aW9ucy4gSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sXG4gKiBhbmQgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24uXG4gKlxuICogTm90ZTogUG9saWN5IGRlZmluaXRpb25zIGFyZSBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudCBncm91cCBzY29wZS5cbiAqIFVubGlrZSBtb3N0IEF6dXJlIHJlc291cmNlcywgdGhleSBkbyBub3QgaGF2ZSBhIGxvY2F0aW9uIHByb3BlcnR5IGFzIHRoZXkgYXJlXG4gKiBub3QgcmVnaW9uLXNwZWNpZmljLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyBjdXN0b20gcG9saWN5IGRlZmluaXRpb246XG4gKiBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24odGhpcywgXCJwb2xpY3lcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLXBvbGljeVwiLFxuICogICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXNcIixcbiAqICAgZGVzY3JpcHRpb246IFwiRW5mb3JjZXMgYSByZXF1aXJlZCB0YWcgb24gcmVzb3VyY2VzXCIsXG4gKiAgIHBvbGljeVJ1bGU6IHtcbiAqICAgICBpZjoge1xuICogICAgICAgZmllbGQ6IFwidGFnc1snRW52aXJvbm1lbnQnXVwiLFxuICogICAgICAgZXhpc3RzOiBcImZhbHNlXCJcbiAqICAgICB9LFxuICogICAgIHRoZW46IHtcbiAqICAgICAgIGVmZmVjdDogXCJkZW55XCJcbiAqICAgICB9XG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQb2xpY3kgZGVmaW5pdGlvbiB3aXRoIHBhcmFtZXRlcnM6XG4gKiBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24odGhpcywgXCJwb2xpY3lcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLXBvbGljeVwiLFxuICogICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXNcIixcbiAqICAgcG9saWN5UnVsZToge1xuICogICAgIGlmOiB7XG4gKiAgICAgICBmaWVsZDogXCJbY29uY2F0KCd0YWdzWycsIHBhcmFtZXRlcnMoJ3RhZ05hbWUnKSwgJ10nKV1cIixcbiAqICAgICAgIGV4aXN0czogXCJmYWxzZVwiXG4gKiAgICAgfSxcbiAqICAgICB0aGVuOiB7XG4gKiAgICAgICBlZmZlY3Q6IFwiZGVueVwiXG4gKiAgICAgfVxuICogICB9LFxuICogICBwYXJhbWV0ZXJzOiB7XG4gKiAgICAgdGFnTmFtZToge1xuICogICAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAqICAgICAgIG1ldGFkYXRhOiB7XG4gKiAgICAgICAgIGRpc3BsYXlOYW1lOiBcIlRhZyBOYW1lXCJcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lEZWZpbml0aW9uIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBQT0xJQ1lfREVGSU5JVElPTl9UWVBFLFxuICAgICAgQUxMX1BPTElDWV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgUG9saWN5IERlZmluaXRpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLy8gUHVibGljIHByb3BlcnRpZXNcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBQb2xpY3kgRGVmaW5pdGlvbiB1c2luZyB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIHJlc29sdXRpb24sIHNjaGVtYSByZWdpc3RyYXRpb24sXG4gICAqIHZhbGlkYXRpb24sIGFuZCByZXNvdXJjZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUG9saWN5IERlZmluaXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQb2xpY3lEZWZpbml0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIEV4dHJhY3QgcHJvcGVydGllcyBmcm9tIHRoZSBBWkFQSSByZXNvdXJjZSBvdXRwdXRzIHVzaW5nIFRlcnJhZm9ybSBpbnRlcnBvbGF0aW9uXG5cbiAgICAvLyBDcmVhdGUgVGVycmFmb3JtIG91dHB1dHMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZyBmcm9tIG90aGVyIHJlc291cmNlc1xuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFBvbGljeSBEZWZpbml0aW9uXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgUG9saWN5IERlZmluaXRpb25cIixcbiAgICB9KTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG9yaWdpbmFsIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgc3RhYmxlIHZlcnNpb24gYXMgdGhlIGRlZmF1bHRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjEtMDYtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBQb2xpY3kgRGVmaW5pdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUE9MSUNZX0RFRklOSVRJT05fVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKiBVc2VzIHRoZSBmcmFtZXdvcmsncyBzY2hlbWEgcmVzb2x1dGlvbiB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHNjaGVtYVxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGZvcm1hdCBleHBlY3RlZCBieSBBenVyZSBSRVNUIEFQSVxuICAgKlxuICAgKiBOb3RlOiBQb2xpY3kgZGVmaW5pdGlvbnMgZG8gbm90IGhhdmUgYSBsb2NhdGlvbiBwcm9wZXJ0eSBhcyB0aGV5IGFyZVxuICAgKiBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudCBncm91cCBzY29wZWQgcmVzb3VyY2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUG9saWN5RGVmaW5pdGlvblByb3BzO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiB0eXBlZFByb3BzLmRpc3BsYXlOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdHlwZWRQcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgICAgcG9saWN5VHlwZTogdHlwZWRQcm9wcy5wb2xpY3lUeXBlIHx8IFwiQ3VzdG9tXCIsXG4gICAgICAgIG1vZGU6IHR5cGVkUHJvcHMubW9kZSB8fCBcIkFsbFwiLFxuICAgICAgICAvLyBEZWVwIGNsb25lIHBvbGljeVJ1bGUgdG8gcHJlc2VydmUgYWxsIG5lc3RlZCBvYmplY3RzIGFuZCBBenVyZSBQb2xpY3kgZXhwcmVzc2lvbnNcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIGNvbXBsZXggRGVwbG95SWZOb3RFeGlzdHMgcG9saWNpZXMgd2l0aCBBUk0gdGVtcGxhdGVzIGFyZSBmdWxseSBzZXJpYWxpemVkXG4gICAgICAgIC8vIEF6dXJlIFBvbGljeSBleHByZXNzaW9ucyBsaWtlIFtmaWVsZCgpXSwgW3BhcmFtZXRlcnMoKV0sIFt2YXJpYWJsZXMoKV0gYXJlIHByZXNlcnZlZFxuICAgICAgICBwb2xpY3lSdWxlOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR5cGVkUHJvcHMucG9saWN5UnVsZSkpLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0eXBlZFByb3BzLnBhcmFtZXRlcnMsXG4gICAgICAgIG1ldGFkYXRhOiB0eXBlZFByb3BzLm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGljeSBEZWZpbml0aW9ucyBkbyBub3Qgc3VwcG9ydCB0YWdzIGF0IHRoZSByZXNvdXJjZSBsZXZlbFxuICAgKiBUYWdzIGFyZSBub3QgYSB2YWxpZCBwcm9wZXJ0eSBmb3IgTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnNcbiAgICogQHJldHVybnMgZmFsc2UgLSBQb2xpY3kgRGVmaW5pdGlvbnMgY2Fubm90IGhhdmUgdGFnc1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1c3RvbWl6ZXMgdGhlIEFaQVBJIFJlc291cmNlQ29uZmlnIGZvciBwb2xpY3ktc3BlY2lmaWMgcmVxdWlyZW1lbnRzXG4gICAqXG4gICAqIFBvbGljeSBkZWZpbml0aW9ucyByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZTpcbiAgICogMS4gVGhleSBjb250YWluIGNvbXBsZXggbmVzdGVkIG9iamVjdHMgKEFSTSB0ZW1wbGF0ZXMgaW4gRGVwbG95SWZOb3RFeGlzdHMgcG9saWNpZXMpXG4gICAqIDIuIFRoZXkgdXNlIEF6dXJlIFBvbGljeSBleHByZXNzaW9ucyBsaWtlIFtmaWVsZCgpXSwgW3BhcmFtZXRlcnMoKV0sIFt2YXJpYWJsZXMoKV1cbiAgICogICAgd2hpY2ggYXJlIE5PVCBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvbnMgYnV0IEF6dXJlLW5hdGl2ZSBleHByZXNzaW9uc1xuICAgKiAzLiBTY2hlbWEgdmFsaWRhdGlvbiBtYXkgc3RyaXAgdW5rbm93biBwcm9wZXJ0aWVzIGZyb20gZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmVzXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgYmFzZSBSZXNvdXJjZUNvbmZpZ1xuICAgKiBAcmV0dXJucyBNb2RpZmllZCBSZXNvdXJjZUNvbmZpZyB3aXRoIHBvbGljeS1zcGVjaWZpYyBzZXR0aW5nc1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RlY3RlZCBjdXN0b21pemVSZXNvdXJjZUNvbmZpZyhjb25maWc6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIC8vIERpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gdG8gcHJlc2VydmUgYWxsIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAgICAvLyBBenVyZSBQb2xpY3kgZGVmaW5pdGlvbnMgY2FuIGNvbnRhaW4gZGVlcGx5IG5lc3RlZCBBUk0gdGVtcGxhdGVzIGFuZCBleHByZXNzaW9uc1xuICAgICAgLy8gdGhhdCB0aGUgQVpBUEkgcHJvdmlkZXIncyBzY2hlbWEgdmFsaWRhdGlvbiBtYXkgbm90IHJlY29nbml6ZVxuICAgICAgc2NoZW1hVmFsaWRhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgLy8gQWxsb3cgcHJvcGVydGllcyBub3QgaW4gdGhlIHNjaGVtYSB0byBwcmV2ZW50IHN0cmlwcGluZyBvZiBuZXN0ZWQgY29udGVudFxuICAgICAgLy8gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIERlcGxveUlmTm90RXhpc3RzIHBvbGljaWVzIHdpdGggQVJNIHRlbXBsYXRlIGRlcGxveW1lbnRzXG4gICAgICBpZ25vcmVNaXNzaW5nUHJvcGVydHk6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIEZPUiBQT0xJQ1kgREVGSU5JVElPTiBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCByZXNvdXJjZSBpZGVudGlmaWVyIGZvciB1c2UgaW4gb3RoZXIgQXp1cmUgcmVzb3VyY2VzXG4gICAqIEFsaWFzIGZvciB0aGUgaWQgcHJvcGVydHlcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9saWN5IHR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcG9saWN5VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBvbGljeVR5cGUgfHwgXCJDdXN0b21cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvbGljeSBtb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvbGljeU1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlIHx8IFwiQWxsXCI7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgJiYgdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJsaWZlY3ljbGVcIiwgW1xuICAgICAgICB7XG4gICAgICAgICAgaWdub3JlX2NoYW5nZXM6IHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxufVxuIl19