@aws-cdk/aws-glue-alpha
Version:
The CDK Construct Library for AWS::Glue
166 lines • 18.6 kB
JavaScript
;
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
var useValue = arguments.length > 2;
for (var i = 0; i < initializers.length; i++) {
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
}
return useValue ? value : void 0;
};
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
var _, done = false;
for (var i = decorators.length - 1; i >= 0; i--) {
var context = {};
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
if (kind === "accessor") {
if (result === void 0) continue;
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
if (_ = accept(result.get)) descriptor.get = _;
if (_ = accept(result.set)) descriptor.set = _;
if (_ = accept(result.init)) initializers.unshift(_);
}
else if (_ = accept(result)) {
if (kind === "field") initializers.unshift(_);
else descriptor[key] = _;
}
}
if (target) Object.defineProperty(target, contextIn.name, descriptor);
done = true;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Database = void 0;
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_glue_1 = require("aws-cdk-lib/aws-glue");
const core_1 = require("aws-cdk-lib/core");
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
/**
* A Glue database.
*/
let Database = (() => {
let _classDecorators = [prop_injectable_1.propertyInjectable];
let _classDescriptor;
let _classExtraInitializers = [];
let _classThis;
let _classSuper = core_1.Resource;
let _instanceExtraInitializers = [];
let _get_databaseName_decorators;
let _get_databaseArn_decorators;
var Database = class extends _classSuper {
static { _classThis = this; }
static {
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
_get_databaseName_decorators = [helpers_internal_1.memoizedGetter];
_get_databaseArn_decorators = [helpers_internal_1.memoizedGetter];
__esDecorate(this, null, _get_databaseName_decorators, { kind: "getter", name: "databaseName", static: false, private: false, access: { has: obj => "databaseName" in obj, get: obj => obj.databaseName }, metadata: _metadata }, null, _instanceExtraInitializers);
__esDecorate(this, null, _get_databaseArn_decorators, { kind: "getter", name: "databaseArn", static: false, private: false, access: { has: obj => "databaseArn" in obj, get: obj => obj.databaseArn }, metadata: _metadata }, null, _instanceExtraInitializers);
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
Database = _classThis = _classDescriptor.value;
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
}
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Database", version: "2.257.0-alpha.0" };
/** Uniquely identifies this class. */
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Database';
static fromDatabaseArn(scope, id, databaseArn) {
const stack = core_1.Stack.of(scope);
class Import extends core_1.Resource {
databaseArn = databaseArn;
databaseName = stack.splitArn(databaseArn, core_1.ArnFormat.SLASH_RESOURCE_NAME).resourceName;
catalogArn = stack.formatArn({ service: 'glue', resource: 'catalog' });
catalogId = stack.account;
}
return new Import(scope, id);
}
/**
* ARN of the Glue catalog in which this database is stored.
*/
catalogArn = __runInitializers(this, _instanceExtraInitializers);
/**
* The catalog id of the database (usually, the AWS account id).
*/
catalogId;
/**
* Location URI of this database.
*/
locationUri;
resource;
constructor(scope, id, props = {}) {
super(scope, id, {
physicalName: props.databaseName ??
core_1.Lazy.string({
produce: () => core_1.Names.uniqueResourceName(this, {}).toLowerCase(),
}),
});
try {
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_DatabaseProps(props);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, Database);
}
throw error;
}
// Enhanced CDK Analytics Telemetry
(0, metadata_resource_1.addConstructMetadata)(this, props);
if (props.description !== undefined) {
validateDescription(props.description);
}
let databaseInput = {
name: this.physicalName,
description: props.description,
};
if (props.locationUri !== undefined) {
validateLocationUri(props.locationUri);
this.locationUri = props.locationUri;
databaseInput = {
locationUri: this.locationUri,
...databaseInput,
};
}
this.catalogId = core_1.Stack.of(this).account;
this.resource = new aws_glue_1.CfnDatabase(this, 'Resource', {
catalogId: this.catalogId,
databaseInput,
});
// catalogId is implicitly the accountId, which is why we don't pass the catalogId here
this.catalogArn = core_1.Stack.of(this).formatArn({
service: 'glue',
resource: 'catalog',
});
}
get databaseName() {
return this.getResourceNameAttribute(this.resource.ref);
}
get databaseArn() {
return this.stack.formatArn({
service: 'glue',
resource: 'database',
resourceName: this.databaseName,
});
}
static {
__runInitializers(_classThis, _classExtraInitializers);
}
};
return Database = _classThis;
})();
exports.Database = Database;
function validateLocationUri(locationUri) {
if (locationUri.length < 1 || locationUri.length > 1024) {
throw new core_1.UnscopedValidationError((0, helpers_internal_1.lit) `InvalidLocationUriLength`, `locationUri length must be (inclusively) between 1 and 1024, got ${locationUri.length}`);
}
}
function validateDescription(description) {
if (description.length > 2048) {
throw new core_1.UnscopedValidationError((0, helpers_internal_1.lit) `InvalidDescriptionLength`, `description length must be less than or equal to 2048, got ${description.length}`);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkYXRhYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBbUQ7QUFFbkQsMkNBQW9HO0FBQ3BHLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBcUQxRTs7R0FFRztJQUVVLFFBQVE7NEJBRHBCLG9DQUFrQjs7OztzQkFDVyxlQUFROzs7O3dCQUFoQixTQUFRLFdBQVE7Ozs7NENBMkVuQyxpQ0FBYzsyQ0FLZCxpQ0FBYztZQUpmLDJMQUFXLFlBQVksNkRBRXRCO1lBR0Qsd0xBQVcsV0FBVyw2REFNckI7WUF2RkgsNktBd0ZDOzs7OztRQXZGQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLGtDQUFrQyxDQUFDO1FBRW5GLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsV0FBbUI7WUFDN0UsTUFBTSxLQUFLLEdBQUcsWUFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5QixNQUFNLE1BQU8sU0FBUSxlQUFRO2dCQUNwQixXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUMxQixZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsZ0JBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQWEsQ0FBQztnQkFDeEYsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQzthQUNsQztZQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO1FBRUQ7O1dBRUc7UUFDYSxVQUFVLEdBcEJmLG1EQUFRLENBb0JnQjtRQUVu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QUFFLENBQUMsQ0FBQztJQUN2SixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbkRhdGFiYXNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IEFybkZvcm1hdCwgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBTdGFjaywgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IG1lbW9pemVkR2V0dGVyLCBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFiYXNlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNhdGFsb2cuXG4gICAqL1xuICByZWFkb25seSBjYXRhbG9nQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjYXRhbG9nIGlkIG9mIHRoZSBkYXRhYmFzZSAodXN1YWxseSwgdGhlIEFXUyBhY2NvdW50IGlkKVxuICAgKi9cbiAgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGRhdGFiYXNlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGdlbmVyYXRlZCBieSBDREsuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2UgKGZvciBleGFtcGxlLCBhbiBIREZTIHBhdGgpLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQuIFRoaXMgZmllbGQgaXMgb3B0aW9uYWwgaW4gQVdTOjpHbHVlOjpEYXRhYmFzZSBEYXRhYmFzZUlucHV0XG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZ2x1ZS1kYXRhYmFzZS1kYXRhYmFzZWlucHV0Lmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uVXJpPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkYXRhYmFzZSBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBHbHVlIGRhdGFiYXNlLlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgRGF0YWJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElEYXRhYmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuRGF0YWJhc2UnO1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbURhdGFiYXNlQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGRhdGFiYXNlQXJuOiBzdHJpbmcpOiBJRGF0YWJhc2Uge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJRGF0YWJhc2Uge1xuICAgICAgcHVibGljIGRhdGFiYXNlQXJuID0gZGF0YWJhc2VBcm47XG4gICAgICBwdWJsaWMgZGF0YWJhc2VOYW1lID0gc3RhY2suc3BsaXRBcm4oZGF0YWJhc2VBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWUhO1xuICAgICAgcHVibGljIGNhdGFsb2dBcm4gPSBzdGFjay5mb3JtYXRBcm4oeyBzZXJ2aWNlOiAnZ2x1ZScsIHJlc291cmNlOiAnY2F0YWxvZycgfSk7XG4gICAgICBwdWJsaWMgY2F0YWxvZ0lkID0gc3RhY2suYWNjb3VudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgR2x1ZSBjYXRhbG9nIGluIHdoaWNoIHRoaXMgZGF0YWJhc2UgaXMgc3RvcmVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNhdGFsb2dBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNhdGFsb2cgaWQgb2YgdGhlIGRhdGFiYXNlICh1c3VhbGx5LCB0aGUgQVdTIGFjY291bnQgaWQpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2NhdGlvbiBVUkkgb2YgdGhpcyBkYXRhYmFzZS5cbiAgICovXG4gIHB1YmxpYyBsb2NhdGlvblVyaT86IHN0cmluZztcblxuICBwcml2YXRlIHJlc291cmNlOiBDZm5EYXRhYmFzZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWJhc2VQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSA/P1xuICAgICAgICBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHt9KS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICB9KSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0ZURlc2NyaXB0aW9uKHByb3BzLmRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YWJhc2VJbnB1dDogQ2ZuRGF0YWJhc2UuRGF0YWJhc2VJbnB1dFByb3BlcnR5ID0ge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgfTtcblxuICAgIGlmIChwcm9wcy5sb2NhdGlvblVyaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0ZUxvY2F0aW9uVXJpKHByb3BzLmxvY2F0aW9uVXJpKTtcbiAgICAgIHRoaXMubG9jYXRpb25VcmkgPSBwcm9wcy5sb2NhdGlvblVyaTtcbiAgICAgIGRhdGFiYXNlSW5wdXQgPSB7XG4gICAgICAgIGxvY2F0aW9uVXJpOiB0aGlzLmxvY2F0aW9uVXJpLFxuICAgICAgICAuLi5kYXRhYmFzZUlucHV0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmNhdGFsb2dJZCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5EYXRhYmFzZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjYXRhbG9nSWQ6IHRoaXMuY2F0YWxvZ0lkLFxuICAgICAgZGF0YWJhc2VJbnB1dCxcbiAgICB9KTtcblxuICAgIC8vIGNhdGFsb2dJZCBpcyBpbXBsaWNpdGx5IHRoZSBhY2NvdW50SWQsIHdoaWNoIGlzIHdoeSB3ZSBkb24ndCBwYXNzIHRoZSBjYXRhbG9nSWQgaGVyZVxuICAgIHRoaXMuY2F0YWxvZ0FybiA9IFN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnZ2x1ZScsXG4gICAgICByZXNvdXJjZTogJ2NhdGFsb2cnLFxuICAgIH0pO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgZGF0YWJhc2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UucmVmKTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGRhdGFiYXNlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnbHVlJyxcbiAgICAgIHJlc291cmNlOiAnZGF0YWJhc2UnLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLmRhdGFiYXNlTmFtZSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUxvY2F0aW9uVXJpKGxvY2F0aW9uVXJpOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGxvY2F0aW9uVXJpLmxlbmd0aCA8IDEgfHwgbG9jYXRpb25VcmkubGVuZ3RoID4gMTAyNCkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZExvY2F0aW9uVXJpTGVuZ3RoYCwgYGxvY2F0aW9uVXJpIGxlbmd0aCBtdXN0IGJlIChpbmNsdXNpdmVseSkgYmV0d2VlbiAxIGFuZCAxMDI0LCBnb3QgJHtsb2NhdGlvblVyaS5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChkZXNjcmlwdGlvbi5sZW5ndGggPiAyMDQ4KSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkRGVzY3JpcHRpb25MZW5ndGhgLCBgZGVzY3JpcHRpb24gbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIwNDgsIGdvdCAke2Rlc2NyaXB0aW9uLmxlbmd0aH1gKTtcbiAgfVxufVxuIl19