@cdktf/provider-google
Version:
Prebuilt google Provider for Terraform CDK (cdktf)
509 lines • 76.1 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DataGoogleContainerCluster = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
// generated from terraform resource schema
const index_structs_1 = require("./index-structs");
__exportStar(require("./index-structs"), exports);
const cdktf = require("cdktf");
/**
* Represents a {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/data-sources/container_cluster google_container_cluster}
*/
class DataGoogleContainerCluster extends cdktf.TerraformDataSource {
// ==============
// STATIC Methods
// ==============
/**
* Generates CDKTF code for importing a DataGoogleContainerCluster resource upon running "cdktf plan <stack-name>"
* @param scope The scope in which to define this construct
* @param importToId The construct id used in the generated config for the DataGoogleContainerCluster to import
* @param importFromId The id of the existing DataGoogleContainerCluster that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/data-sources/container_cluster#import import section} in the documentation of this resource for the id to use
* @param provider? Optional instance of the provider where the DataGoogleContainerCluster to import is found
*/
static generateConfigForImport(scope, importToId, importFromId, provider) {
return new cdktf.ImportableResource(scope, importToId, { terraformResourceType: "google_container_cluster", importId: importFromId, provider });
}
// ===========
// INITIALIZER
// ===========
/**
* Create a new {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/data-sources/container_cluster google_container_cluster} Data Source
*
* @param scope The scope in which to define this construct
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
* @param options DataGoogleContainerClusterConfig
*/
constructor(scope, id, config) {
super(scope, id, {
terraformResourceType: 'google_container_cluster',
terraformGeneratorMetadata: {
providerName: 'google',
providerVersion: '6.13.0',
providerVersionConstraint: '~> 6.0'
},
provider: config.provider,
dependsOn: config.dependsOn,
count: config.count,
lifecycle: config.lifecycle,
provisioners: config.provisioners,
connection: config.connection,
forEach: config.forEach
});
// ==========
// ATTRIBUTES
// ==========
// addons_config - computed: true, optional: false, required: false
this._addonsConfig = new index_structs_1.DataGoogleContainerClusterAddonsConfigList(this, "addons_config", false);
// authenticator_groups_config - computed: true, optional: false, required: false
this._authenticatorGroupsConfig = new index_structs_1.DataGoogleContainerClusterAuthenticatorGroupsConfigList(this, "authenticator_groups_config", false);
// binary_authorization - computed: true, optional: false, required: false
this._binaryAuthorization = new index_structs_1.DataGoogleContainerClusterBinaryAuthorizationList(this, "binary_authorization", false);
// cluster_autoscaling - computed: true, optional: false, required: false
this._clusterAutoscaling = new index_structs_1.DataGoogleContainerClusterClusterAutoscalingList(this, "cluster_autoscaling", false);
// confidential_nodes - computed: true, optional: false, required: false
this._confidentialNodes = new index_structs_1.DataGoogleContainerClusterConfidentialNodesList(this, "confidential_nodes", false);
// control_plane_endpoints_config - computed: true, optional: false, required: false
this._controlPlaneEndpointsConfig = new index_structs_1.DataGoogleContainerClusterControlPlaneEndpointsConfigList(this, "control_plane_endpoints_config", false);
// cost_management_config - computed: true, optional: false, required: false
this._costManagementConfig = new index_structs_1.DataGoogleContainerClusterCostManagementConfigList(this, "cost_management_config", false);
// database_encryption - computed: true, optional: false, required: false
this._databaseEncryption = new index_structs_1.DataGoogleContainerClusterDatabaseEncryptionList(this, "database_encryption", false);
// default_snat_status - computed: true, optional: false, required: false
this._defaultSnatStatus = new index_structs_1.DataGoogleContainerClusterDefaultSnatStatusList(this, "default_snat_status", false);
// dns_config - computed: true, optional: false, required: false
this._dnsConfig = new index_structs_1.DataGoogleContainerClusterDnsConfigList(this, "dns_config", false);
// effective_labels - computed: true, optional: false, required: false
this._effectiveLabels = new cdktf.StringMap(this, "effective_labels");
// enable_k8s_beta_apis - computed: true, optional: false, required: false
this._enableK8SBetaApis = new index_structs_1.DataGoogleContainerClusterEnableK8SBetaApisList(this, "enable_k8s_beta_apis", false);
// enterprise_config - computed: true, optional: false, required: false
this._enterpriseConfig = new index_structs_1.DataGoogleContainerClusterEnterpriseConfigList(this, "enterprise_config", false);
// fleet - computed: true, optional: false, required: false
this._fleet = new index_structs_1.DataGoogleContainerClusterFleetList(this, "fleet", false);
// gateway_api_config - computed: true, optional: false, required: false
this._gatewayApiConfig = new index_structs_1.DataGoogleContainerClusterGatewayApiConfigList(this, "gateway_api_config", false);
// identity_service_config - computed: true, optional: false, required: false
this._identityServiceConfig = new index_structs_1.DataGoogleContainerClusterIdentityServiceConfigList(this, "identity_service_config", false);
// ip_allocation_policy - computed: true, optional: false, required: false
this._ipAllocationPolicy = new index_structs_1.DataGoogleContainerClusterIpAllocationPolicyList(this, "ip_allocation_policy", false);
// logging_config - computed: true, optional: false, required: false
this._loggingConfig = new index_structs_1.DataGoogleContainerClusterLoggingConfigList(this, "logging_config", false);
// maintenance_policy - computed: true, optional: false, required: false
this._maintenancePolicy = new index_structs_1.DataGoogleContainerClusterMaintenancePolicyList(this, "maintenance_policy", false);
// master_auth - computed: true, optional: false, required: false
this._masterAuth = new index_structs_1.DataGoogleContainerClusterMasterAuthList(this, "master_auth", false);
// master_authorized_networks_config - computed: true, optional: false, required: false
this._masterAuthorizedNetworksConfig = new index_structs_1.DataGoogleContainerClusterMasterAuthorizedNetworksConfigList(this, "master_authorized_networks_config", false);
// mesh_certificates - computed: true, optional: false, required: false
this._meshCertificates = new index_structs_1.DataGoogleContainerClusterMeshCertificatesList(this, "mesh_certificates", false);
// monitoring_config - computed: true, optional: false, required: false
this._monitoringConfig = new index_structs_1.DataGoogleContainerClusterMonitoringConfigList(this, "monitoring_config", false);
// network_policy - computed: true, optional: false, required: false
this._networkPolicy = new index_structs_1.DataGoogleContainerClusterNetworkPolicyList(this, "network_policy", false);
// node_config - computed: true, optional: false, required: false
this._nodeConfig = new index_structs_1.DataGoogleContainerClusterNodeConfigList(this, "node_config", false);
// node_pool - computed: true, optional: false, required: false
this._nodePool = new index_structs_1.DataGoogleContainerClusterNodePoolList(this, "node_pool", false);
// node_pool_auto_config - computed: true, optional: false, required: false
this._nodePoolAutoConfig = new index_structs_1.DataGoogleContainerClusterNodePoolAutoConfigList(this, "node_pool_auto_config", false);
// node_pool_defaults - computed: true, optional: false, required: false
this._nodePoolDefaults = new index_structs_1.DataGoogleContainerClusterNodePoolDefaultsList(this, "node_pool_defaults", false);
// notification_config - computed: true, optional: false, required: false
this._notificationConfig = new index_structs_1.DataGoogleContainerClusterNotificationConfigList(this, "notification_config", false);
// private_cluster_config - computed: true, optional: false, required: false
this._privateClusterConfig = new index_structs_1.DataGoogleContainerClusterPrivateClusterConfigList(this, "private_cluster_config", false);
// release_channel - computed: true, optional: false, required: false
this._releaseChannel = new index_structs_1.DataGoogleContainerClusterReleaseChannelList(this, "release_channel", false);
// resource_labels - computed: true, optional: false, required: false
this._resourceLabels = new cdktf.StringMap(this, "resource_labels");
// resource_usage_export_config - computed: true, optional: false, required: false
this._resourceUsageExportConfig = new index_structs_1.DataGoogleContainerClusterResourceUsageExportConfigList(this, "resource_usage_export_config", false);
// secret_manager_config - computed: true, optional: false, required: false
this._secretManagerConfig = new index_structs_1.DataGoogleContainerClusterSecretManagerConfigList(this, "secret_manager_config", false);
// security_posture_config - computed: true, optional: false, required: false
this._securityPostureConfig = new index_structs_1.DataGoogleContainerClusterSecurityPostureConfigList(this, "security_posture_config", false);
// service_external_ips_config - computed: true, optional: false, required: false
this._serviceExternalIpsConfig = new index_structs_1.DataGoogleContainerClusterServiceExternalIpsConfigList(this, "service_external_ips_config", false);
// terraform_labels - computed: true, optional: false, required: false
this._terraformLabels = new cdktf.StringMap(this, "terraform_labels");
// user_managed_keys_config - computed: true, optional: false, required: false
this._userManagedKeysConfig = new index_structs_1.DataGoogleContainerClusterUserManagedKeysConfigList(this, "user_managed_keys_config", false);
// vertical_pod_autoscaling - computed: true, optional: false, required: false
this._verticalPodAutoscaling = new index_structs_1.DataGoogleContainerClusterVerticalPodAutoscalingList(this, "vertical_pod_autoscaling", false);
// workload_identity_config - computed: true, optional: false, required: false
this._workloadIdentityConfig = new index_structs_1.DataGoogleContainerClusterWorkloadIdentityConfigList(this, "workload_identity_config", false);
this._id = config.id;
this._location = config.location;
this._name = config.name;
this._project = config.project;
}
get addonsConfig() {
return this._addonsConfig;
}
// allow_net_admin - computed: true, optional: false, required: false
get allowNetAdmin() {
return this.getBooleanAttribute('allow_net_admin');
}
get authenticatorGroupsConfig() {
return this._authenticatorGroupsConfig;
}
get binaryAuthorization() {
return this._binaryAuthorization;
}
get clusterAutoscaling() {
return this._clusterAutoscaling;
}
// cluster_ipv4_cidr - computed: true, optional: false, required: false
get clusterIpv4Cidr() {
return this.getStringAttribute('cluster_ipv4_cidr');
}
get confidentialNodes() {
return this._confidentialNodes;
}
get controlPlaneEndpointsConfig() {
return this._controlPlaneEndpointsConfig;
}
get costManagementConfig() {
return this._costManagementConfig;
}
get databaseEncryption() {
return this._databaseEncryption;
}
// datapath_provider - computed: true, optional: false, required: false
get datapathProvider() {
return this.getStringAttribute('datapath_provider');
}
// default_max_pods_per_node - computed: true, optional: false, required: false
get defaultMaxPodsPerNode() {
return this.getNumberAttribute('default_max_pods_per_node');
}
get defaultSnatStatus() {
return this._defaultSnatStatus;
}
// deletion_protection - computed: true, optional: false, required: false
get deletionProtection() {
return this.getBooleanAttribute('deletion_protection');
}
// description - computed: true, optional: false, required: false
get description() {
return this.getStringAttribute('description');
}
get dnsConfig() {
return this._dnsConfig;
}
get effectiveLabels() {
return this._effectiveLabels;
}
// enable_autopilot - computed: true, optional: false, required: false
get enableAutopilot() {
return this.getBooleanAttribute('enable_autopilot');
}
// enable_cilium_clusterwide_network_policy - computed: true, optional: false, required: false
get enableCiliumClusterwideNetworkPolicy() {
return this.getBooleanAttribute('enable_cilium_clusterwide_network_policy');
}
// enable_intranode_visibility - computed: true, optional: false, required: false
get enableIntranodeVisibility() {
return this.getBooleanAttribute('enable_intranode_visibility');
}
get enableK8SBetaApis() {
return this._enableK8SBetaApis;
}
// enable_kubernetes_alpha - computed: true, optional: false, required: false
get enableKubernetesAlpha() {
return this.getBooleanAttribute('enable_kubernetes_alpha');
}
// enable_l4_ilb_subsetting - computed: true, optional: false, required: false
get enableL4IlbSubsetting() {
return this.getBooleanAttribute('enable_l4_ilb_subsetting');
}
// enable_legacy_abac - computed: true, optional: false, required: false
get enableLegacyAbac() {
return this.getBooleanAttribute('enable_legacy_abac');
}
// enable_multi_networking - computed: true, optional: false, required: false
get enableMultiNetworking() {
return this.getBooleanAttribute('enable_multi_networking');
}
// enable_shielded_nodes - computed: true, optional: false, required: false
get enableShieldedNodes() {
return this.getBooleanAttribute('enable_shielded_nodes');
}
// enable_tpu - computed: true, optional: false, required: false
get enableTpu() {
return this.getBooleanAttribute('enable_tpu');
}
// endpoint - computed: true, optional: false, required: false
get endpoint() {
return this.getStringAttribute('endpoint');
}
get enterpriseConfig() {
return this._enterpriseConfig;
}
get fleet() {
return this._fleet;
}
get gatewayApiConfig() {
return this._gatewayApiConfig;
}
get id() {
return this.getStringAttribute('id');
}
set id(value) {
this._id = value;
}
resetId() {
this._id = undefined;
}
// Temporarily expose input value. Use with caution.
get idInput() {
return this._id;
}
get identityServiceConfig() {
return this._identityServiceConfig;
}
// initial_node_count - computed: true, optional: false, required: false
get initialNodeCount() {
return this.getNumberAttribute('initial_node_count');
}
get ipAllocationPolicy() {
return this._ipAllocationPolicy;
}
// label_fingerprint - computed: true, optional: false, required: false
get labelFingerprint() {
return this.getStringAttribute('label_fingerprint');
}
get location() {
return this.getStringAttribute('location');
}
set location(value) {
this._location = value;
}
resetLocation() {
this._location = undefined;
}
// Temporarily expose input value. Use with caution.
get locationInput() {
return this._location;
}
get loggingConfig() {
return this._loggingConfig;
}
// logging_service - computed: true, optional: false, required: false
get loggingService() {
return this.getStringAttribute('logging_service');
}
get maintenancePolicy() {
return this._maintenancePolicy;
}
get masterAuth() {
return this._masterAuth;
}
get masterAuthorizedNetworksConfig() {
return this._masterAuthorizedNetworksConfig;
}
// master_version - computed: true, optional: false, required: false
get masterVersion() {
return this.getStringAttribute('master_version');
}
get meshCertificates() {
return this._meshCertificates;
}
// min_master_version - computed: true, optional: false, required: false
get minMasterVersion() {
return this.getStringAttribute('min_master_version');
}
get monitoringConfig() {
return this._monitoringConfig;
}
// monitoring_service - computed: true, optional: false, required: false
get monitoringService() {
return this.getStringAttribute('monitoring_service');
}
get name() {
return this.getStringAttribute('name');
}
set name(value) {
this._name = value;
}
// Temporarily expose input value. Use with caution.
get nameInput() {
return this._name;
}
// network - computed: true, optional: false, required: false
get network() {
return this.getStringAttribute('network');
}
get networkPolicy() {
return this._networkPolicy;
}
// networking_mode - computed: true, optional: false, required: false
get networkingMode() {
return this.getStringAttribute('networking_mode');
}
get nodeConfig() {
return this._nodeConfig;
}
// node_locations - computed: true, optional: false, required: false
get nodeLocations() {
return cdktf.Fn.tolist(this.getListAttribute('node_locations'));
}
get nodePool() {
return this._nodePool;
}
get nodePoolAutoConfig() {
return this._nodePoolAutoConfig;
}
get nodePoolDefaults() {
return this._nodePoolDefaults;
}
// node_version - computed: true, optional: false, required: false
get nodeVersion() {
return this.getStringAttribute('node_version');
}
get notificationConfig() {
return this._notificationConfig;
}
// operation - computed: true, optional: false, required: false
get operation() {
return this.getStringAttribute('operation');
}
get privateClusterConfig() {
return this._privateClusterConfig;
}
// private_ipv6_google_access - computed: true, optional: false, required: false
get privateIpv6GoogleAccess() {
return this.getStringAttribute('private_ipv6_google_access');
}
get project() {
return this.getStringAttribute('project');
}
set project(value) {
this._project = value;
}
resetProject() {
this._project = undefined;
}
// Temporarily expose input value. Use with caution.
get projectInput() {
return this._project;
}
get releaseChannel() {
return this._releaseChannel;
}
// remove_default_node_pool - computed: true, optional: false, required: false
get removeDefaultNodePool() {
return this.getBooleanAttribute('remove_default_node_pool');
}
get resourceLabels() {
return this._resourceLabels;
}
get resourceUsageExportConfig() {
return this._resourceUsageExportConfig;
}
get secretManagerConfig() {
return this._secretManagerConfig;
}
get securityPostureConfig() {
return this._securityPostureConfig;
}
// self_link - computed: true, optional: false, required: false
get selfLink() {
return this.getStringAttribute('self_link');
}
get serviceExternalIpsConfig() {
return this._serviceExternalIpsConfig;
}
// services_ipv4_cidr - computed: true, optional: false, required: false
get servicesIpv4Cidr() {
return this.getStringAttribute('services_ipv4_cidr');
}
// subnetwork - computed: true, optional: false, required: false
get subnetwork() {
return this.getStringAttribute('subnetwork');
}
get terraformLabels() {
return this._terraformLabels;
}
// tpu_ipv4_cidr_block - computed: true, optional: false, required: false
get tpuIpv4CidrBlock() {
return this.getStringAttribute('tpu_ipv4_cidr_block');
}
get userManagedKeysConfig() {
return this._userManagedKeysConfig;
}
get verticalPodAutoscaling() {
return this._verticalPodAutoscaling;
}
get workloadIdentityConfig() {
return this._workloadIdentityConfig;
}
// =========
// SYNTHESIS
// =========
synthesizeAttributes() {
return {
id: cdktf.stringToTerraform(this._id),
location: cdktf.stringToTerraform(this._location),
name: cdktf.stringToTerraform(this._name),
project: cdktf.stringToTerraform(this._project),
};
}
synthesizeHclAttributes() {
const attrs = {
id: {
value: cdktf.stringToHclTerraform(this._id),
isBlock: false,
type: "simple",
storageClassType: "string",
},
location: {
value: cdktf.stringToHclTerraform(this._location),
isBlock: false,
type: "simple",
storageClassType: "string",
},
name: {
value: cdktf.stringToHclTerraform(this._name),
isBlock: false,
type: "simple",
storageClassType: "string",
},
project: {
value: cdktf.stringToHclTerraform(this._project),
isBlock: false,
type: "simple",
storageClassType: "string",
},
};
// remove undefined attributes
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
}
}
exports.DataGoogleContainerCluster = DataGoogleContainerCluster;
_a = JSII_RTTI_SYMBOL_1;
DataGoogleContainerCluster[_a] = { fqn: "@cdktf/provider-google.dataGoogleContainerCluster.DataGoogleContainerCluster", version: "14.12.0" };
// =================
// STATIC PROPERTIES
// =================
DataGoogleContainerCluster.tfResourceType = "google_container_cluster";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS1nb29nbGUtY29udGFpbmVyLWNsdXN0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7R0FHRztBQUVILDJDQUEyQztBQUUzQyxtREFvQzRFO0FBQzVFLGtEQUErQjtBQUUvQiwrQkFBK0I7QUE2Qi9COztFQUVFO0FBQ0YsTUFBYSwwQkFBMkIsU0FBUSxLQUFLLENBQUMsbUJBQW1CO0lBT3ZFLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCOzs7Ozs7TUFNRTtJQUNLLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFnQixFQUFFLFVBQWtCLEVBQUUsWUFBb0IsRUFBRSxRQUFrQztRQUM5SCxPQUFPLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEosQ0FBQztJQUVMLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUVkOzs7Ozs7TUFNRTtJQUNGLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE1BQXdDO1FBQ3ZGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YscUJBQXFCLEVBQUUsMEJBQTBCO1lBQ2pELDBCQUEwQixFQUFFO2dCQUMxQixZQUFZLEVBQUUsUUFBUTtnQkFDdEIsZUFBZSxFQUFFLFFBQVE7Z0JBQ3pCLHlCQUF5QixFQUFFLFFBQVE7YUFDcEM7WUFDRCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsWUFBWSxFQUFF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QUFDLEtBQUssQ0FBQztnQkFDN0MsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsZ0JBQWdCLEVBQUUsUUFBUTthQUMzQjtZQUNELE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLFFBQVE7YUFDM0I7U0FDRixDQUFDO1FBRUYsOEJBQThCO1FBQzlCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFFLENBQUMsQ0FBQTtJQUM1SCxDQUFDOztBQXZqQkgsZ0VBd2pCQzs7O0FBdGpCQyxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNHLHlDQUFjLEdBQUcsMEJBQTBCLEFBQTdCLENBQThCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG4vLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hXG5cbmltcG9ydCB7IERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyQWRkb25zQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckF1dGhlbnRpY2F0b3JHcm91cHNDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyQmluYXJ5QXV0aG9yaXphdGlvbkxpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJDbHVzdGVyQXV0b3NjYWxpbmdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyQ29uZmlkZW50aWFsTm9kZXNMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyQ29udHJvbFBsYW5lRW5kcG9pbnRzQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckNvc3RNYW5hZ2VtZW50Q29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckRhdGFiYXNlRW5jcnlwdGlvbkxpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJEZWZhdWx0U25hdFN0YXR1c0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJEbnNDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyRW5hYmxlSzhTQmV0YUFwaXNMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyRW50ZXJwcmlzZUNvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJGbGVldExpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJHYXRld2F5QXBpQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlcklkZW50aXR5U2VydmljZUNvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJJcEFsbG9jYXRpb25Qb2xpY3lMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyTG9nZ2luZ0NvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJNYWludGVuYW5jZVBvbGljeUxpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJNYXN0ZXJBdXRoTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3Rlck1hc3RlckF1dGhvcml6ZWROZXR3b3Jrc0NvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJNZXNoQ2VydGlmaWNhdGVzTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3Rlck1vbml0b3JpbmdDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyTmV0d29ya1BvbGljeUxpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJOb2RlQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3Rlck5vZGVQb29sQXV0b0NvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJOb2RlUG9vbERlZmF1bHRzTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3Rlck5vdGlmaWNhdGlvbkNvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJQcml2YXRlQ2x1c3RlckNvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJSZWxlYXNlQ2hhbm5lbExpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJSZXNvdXJjZVVzYWdlRXhwb3J0Q29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlclNlY3JldE1hbmFnZXJDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyU2VjdXJpdHlQb3N0dXJlQ29uZmlnTGlzdCwgXG5EYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlclNlcnZpY2VFeHRlcm5hbElwc0NvbmZpZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJVc2VyTWFuYWdlZEtleXNDb25maWdMaXN0LCBcbkRhdGFHb29nbGVDb250YWluZXJDbHVzdGVyVmVydGljYWxQb2RBdXRvc2NhbGluZ0xpc3QsIFxuRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJXb3JrbG9hZElkZW50aXR5Q29uZmlnTGlzdH0gZnJvbSAnLi9pbmRleC1zdHJ1Y3RzJ1xuZXhwb3J0ICogZnJvbSAnLi9pbmRleC1zdHJ1Y3RzJ1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tICdjZGt0Zic7XG5leHBvcnQgaW50ZXJmYWNlIERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyQ29uZmlnIGV4dGVuZHMgY2RrdGYuVGVycmFmb3JtTWV0YUFyZ3VtZW50cyB7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvZGF0YS1zb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI2lkIERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyI2lkfVxuICAqXG4gICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlIGlkIGZpZWxkIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gYWxsIHJlc291cmNlcyBpbiBUZXJyYWZvcm0gcHJvdmlkZXJzIHVzaW5nIGEgVGVycmFmb3JtIHByb3ZpZGVyIFNESyB2ZXJzaW9uIGJlbG93IDIuXG4gICogSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXMgc2V0dGluZyB0aGlzIHZhbHVlIGl0IG1pZ2h0IG5vdCBiZSBzZXR0YWJsZS4gUGxlYXNlIHRha2UgYSBsb29rIGF0IHRoZSBwcm92aWRlciBkb2N1bWVudGF0aW9uIHRvIGVuc3VyZSBpdCBzaG91bGQgYmUgc2V0dGFibGUuXG4gICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgbG9jYXRpb24gKHJlZ2lvbiBvciB6b25lKSBpbiB3aGljaCB0aGUgY2x1c3RlciBtYXN0ZXIgd2lsbCBiZSBjcmVhdGVkLCBhcyB3ZWxsIGFzIHRoZSBkZWZhdWx0IG5vZGUgbG9jYXRpb24uIElmIHlvdSBzcGVjaWZ5IGEgem9uZSAoc3VjaCBhcyB1cy1jZW50cmFsMS1hKSwgdGhlIGNsdXN0ZXIgd2lsbCBiZSBhIHpvbmFsIGNsdXN0ZXIgd2l0aCBhIHNpbmdsZSBjbHVzdGVyIG1hc3Rlci4gSWYgeW91IHNwZWNpZnkgYSByZWdpb24gKHN1Y2ggYXMgdXMtd2VzdDEpLCB0aGUgY2x1c3RlciB3aWxsIGJlIGEgcmVnaW9uYWwgY2x1c3RlciB3aXRoIG11bHRpcGxlIG1hc3RlcnMgc3ByZWFkIGFjcm9zcyB6b25lcyBpbiB0aGUgcmVnaW9uLCBhbmQgd2l0aCBkZWZhdWx0IG5vZGUgbG9jYXRpb25zIGluIHRob3NlIHpvbmVzIGFzIHdlbGwuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL2RhdGEtc291cmNlcy9jb250YWluZXJfY2x1c3RlciNsb2NhdGlvbiBEYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlciNsb2NhdGlvbn1cbiAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBuYW1lIG9mIHRoZSBjbHVzdGVyLCB1bmlxdWUgd2l0aGluIHRoZSBwcm9qZWN0IGFuZCBsb2NhdGlvbi5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvZGF0YS1zb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI25hbWUgRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXIjbmFtZX1cbiAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgSUQgb2YgdGhlIHByb2plY3QgaW4gd2hpY2ggdGhlIHJlc291cmNlIGJlbG9uZ3MuIElmIGl0IGlzIG5vdCBwcm92aWRlZCwgdGhlIHByb3ZpZGVyIHByb2plY3QgaXMgdXNlZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvZGF0YS1zb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyI3Byb2plY3QgRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXIjcHJvamVjdH1cbiAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdD86IHN0cmluZztcbn1cblxuLyoqXG4qIFJlcHJlc2VudHMgYSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9nb29nbGUvNi4xMy4wL2RvY3MvZGF0YS1zb3VyY2VzL2NvbnRhaW5lcl9jbHVzdGVyIGdvb2dsZV9jb250YWluZXJfY2x1c3Rlcn1cbiovXG5leHBvcnQgY2xhc3MgRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXIgZXh0ZW5kcyBjZGt0Zi5UZXJyYWZvcm1EYXRhU291cmNlIHtcblxuICAvLyA9PT09PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHRmUmVzb3VyY2VUeXBlID0gXCJnb29nbGVfY29udGFpbmVyX2NsdXN0ZXJcIjtcblxuICAvLyA9PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgTWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PVxuICAvKipcbiAgKiBHZW5lcmF0ZXMgQ0RLVEYgY29kZSBmb3IgaW1wb3J0aW5nIGEgRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXIgcmVzb3VyY2UgdXBvbiBydW5uaW5nIFwiY2RrdGYgcGxhbiA8c3RhY2stbmFtZT5cIlxuICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICogQHBhcmFtIGltcG9ydFRvSWQgVGhlIGNvbnN0cnVjdCBpZCB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgY29uZmlnIGZvciB0aGUgRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXIgdG8gaW1wb3J0XG4gICogQHBhcmFtIGltcG9ydEZyb21JZCBUaGUgaWQgb2YgdGhlIGV4aXN0aW5nIERhdGFHb29nbGVDb250YWluZXJDbHVzdGVyIHRoYXQgc2hvdWxkIGJlIGltcG9ydGVkLiBSZWZlciB0byB0aGUge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvZ29vZ2xlLzYuMTMuMC9kb2NzL2RhdGEtc291cmNlcy9jb250YWluZXJfY2x1c3RlciNpbXBvcnQgaW1wb3J0IHNlY3Rpb259IGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgcmVzb3VyY2UgZm9yIHRoZSBpZCB0byB1c2VcbiAgKiBAcGFyYW0gcHJvdmlkZXI/IE9wdGlvbmFsIGluc3RhbmNlIG9mIHRoZSBwcm92aWRlciB3aGVyZSB0aGUgRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXIgdG8gaW1wb3J0IGlzIGZvdW5kXG4gICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVDb25maWdGb3JJbXBvcnQoc2NvcGU6IENvbnN0cnVjdCwgaW1wb3J0VG9JZDogc3RyaW5nLCBpbXBvcnRGcm9tSWQ6IHN0cmluZywgcHJvdmlkZXI/OiBjZGt0Zi5UZXJyYWZvcm1Qcm92aWRlcikge1xuICAgICAgICByZXR1cm4gbmV3IGNka3RmLkltcG9ydGFibGVSZXNvdXJjZShzY29wZSwgaW1wb3J0VG9JZCwgeyB0ZXJyYWZvcm1SZXNvdXJjZVR5cGU6IFwiZ29vZ2xlX2NvbnRhaW5lcl9jbHVzdGVyXCIsIGltcG9ydElkOiBpbXBvcnRGcm9tSWQsIHByb3ZpZGVyIH0pO1xuICAgICAgfVxuXG4gIC8vID09PT09PT09PT09XG4gIC8vIElOSVRJQUxJWkVSXG4gIC8vID09PT09PT09PT09XG5cbiAgLyoqXG4gICogQ3JlYXRlIGEgbmV3IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2dvb2dsZS82LjEzLjAvZG9jcy9kYXRhLXNvdXJjZXMvY29udGFpbmVyX2NsdXN0ZXIgZ29vZ2xlX2NvbnRhaW5lcl9jbHVzdGVyfSBEYXRhIFNvdXJjZVxuICAqXG4gICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgKiBAcGFyYW0gaWQgVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuIE11c3QgYmUgdW5pcXVlIGFtb25nc3Qgc2libGluZ3MgaW4gdGhlIHNhbWUgc2NvcGVcbiAgKiBAcGFyYW0gb3B0aW9ucyBEYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckNvbmZpZ1xuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29uZmlnOiBEYXRhR29vZ2xlQ29udGFpbmVyQ2x1c3RlckNvbmZpZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiAnZ29vZ2xlX2NvbnRhaW5lcl9jbHVzdGVyJyxcbiAgICAgIHRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhOiB7XG4gICAgICAgIHByb3ZpZGVyTmFtZTogJ2dvb2dsZScsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogJzYuMTMuMCcsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQ6ICd+PiA2LjAnXG4gICAgICB9LFxuICAgICAgcHJvdmlkZXI6IGNvbmZpZy5wcm92aWRlcixcbiAgICAgIGRlcGVuZHNPbjogY29uZmlnLmRlcGVuZHNPbixcbiAgICAgIGNvdW50OiBjb25maWcuY291bnQsXG4gICAgICBsaWZlY3ljbGU6IGNvbmZpZy5saWZlY3ljbGUsXG4gICAgICBwcm92aXNpb25lcnM6IGNvbmZpZy5wcm92aXNpb25lcnMsXG4gICAgICBjb25uZWN0aW9uOiBjb25maWcuY29ubmVjdGlvbixcbiAgICAgIGZvckVhY2g6IGNvbmZpZy5mb3JFYWNoXG4gICAgfSk7XG4gICAgdGhpcy5faWQgPSBjb25maWcuaWQ7XG4gICAgdGhpcy5fbG9jYXRpb24gPSBjb25maWcubG9jYXRpb247XG4gICAgdGhpcy5fbmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMuX3Byb2plY3QgPSBjb25maWcucHJvamVjdDtcbiAgfVxuXG4gIC8vID09PT09PT09PT1cbiAgLy8gQVRUUklCVVRFU1xuICAvLyA9PT09PT09PT09XG5cbiAgLy8gYWRkb25zX2NvbmZpZyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9hZGRvbnNDb25maWcgPSBuZXcgRGF0YUdvb2dsZUNvbnRhaW5lckNsdXN0ZXJBZGRvbnNDb25maWdMaXN0KHRoaXMsIFwiYWRkb25zX2NvbmZpZ1wiLCBmYWxzZSk7XG4gIHB1YmxpYyBnZXQgYWRkb25zQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9hZGRvbnNDb25maWc7XG4gIH1cblxuICAvLyBhbGxvd19uZXRfYWRtaW4gLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHVibGljIGdldCBhbG