UNPKG

awscdk-resources-mongodbatlas

Version:

MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources

253 lines 42.7 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CfnTrigger = exports.AuthConfigProviders = exports.AuthConfigOperationType = exports.DatabaseConfigOperationTypes = void 0; exports.toJson_CfnTriggerProps = toJson_CfnTriggerProps; exports.toJson_DatabaseConfig = toJson_DatabaseConfig; exports.toJson_AuthConfig = toJson_AuthConfig; exports.toJson_ScheduleConfig = toJson_ScheduleConfig; exports.toJson_Event = toJson_Event; exports.toJson_EventFunction = toJson_EventFunction; exports.toJson_EventAwseventbridge = toJson_EventAwseventbridge; exports.toJson_EventFunctionFuncConfig = toJson_EventFunctionFuncConfig; exports.toJson_EventAwseventbridgeAwsConfig = toJson_EventAwseventbridgeAwsConfig; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); // Generated by cdk-import const cdk = require("aws-cdk-lib"); /** * Converts an object of type 'CfnTriggerProps' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnTriggerProps(obj) { if (obj === undefined) { return undefined; } const result = { Profile: obj.profile, DatabaseTrigger: toJson_DatabaseConfig(obj.databaseTrigger), AuthTrigger: toJson_AuthConfig(obj.authTrigger), ScheduleTrigger: toJson_ScheduleConfig(obj.scheduleTrigger), Name: obj.name, Type: obj.type, Disabled: obj.disabled, FunctionId: obj.functionId, FunctionName: obj.functionName, EventProcessors: toJson_Event(obj.eventProcessors), AppId: obj.appId, ProjectId: obj.projectId, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'DatabaseConfig' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DatabaseConfig(obj) { if (obj === undefined) { return undefined; } const result = { ServiceId: obj.serviceId, Database: obj.database, Collection: obj.collection, OperationTypes: obj.operationTypes?.map((y) => y), Match: obj.match, Project: obj.project, FullDocument: obj.fullDocument, FullDocumentBeforeChange: obj.fullDocumentBeforeChange, SkipCatchupEvents: obj.skipCatchupEvents, TolerateResumeErrors: obj.tolerateResumeErrors, MaximumThroughput: obj.maximumThroughput, Unordered: obj.unordered, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'AuthConfig' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_AuthConfig(obj) { if (obj === undefined) { return undefined; } const result = { OperationType: obj.operationType, Providers: obj.providers?.map((y) => y), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'ScheduleConfig' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_ScheduleConfig(obj) { if (obj === undefined) { return undefined; } const result = { Schedule: obj.schedule, SkipcatchupEvents: obj.skipcatchupEvents, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'Event' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Event(obj) { if (obj === undefined) { return undefined; } const result = { FUNCTION: toJson_EventFunction(obj.function), AWSEVENTBRIDGE: toJson_EventAwseventbridge(obj.awseventbridge), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /* eslint-enable max-len, quote-props */ /** * @schema DatabaseConfigOperationTypes */ var DatabaseConfigOperationTypes; (function (DatabaseConfigOperationTypes) { /** INSERT */ DatabaseConfigOperationTypes["INSERT"] = "INSERT"; /** UPDATE */ DatabaseConfigOperationTypes["UPDATE"] = "UPDATE"; /** REPLACE */ DatabaseConfigOperationTypes["REPLACE"] = "REPLACE"; /** DELETE */ DatabaseConfigOperationTypes["DELETE"] = "DELETE"; })(DatabaseConfigOperationTypes || (exports.DatabaseConfigOperationTypes = DatabaseConfigOperationTypes = {})); /** * The type of authentication event that the trigger listens for. * * @schema AuthConfigOperationType */ var AuthConfigOperationType; (function (AuthConfigOperationType) { /** LOGIN */ AuthConfigOperationType["LOGIN"] = "LOGIN"; /** CREATE */ AuthConfigOperationType["CREATE"] = "CREATE"; /** DELETE */ AuthConfigOperationType["DELETE"] = "DELETE"; })(AuthConfigOperationType || (exports.AuthConfigOperationType = AuthConfigOperationType = {})); /** * @schema AuthConfigProviders */ var AuthConfigProviders; (function (AuthConfigProviders) { /** anon-user */ AuthConfigProviders["ANON_USER"] = "anon-user"; /** api-key */ AuthConfigProviders["API_KEY"] = "api-key"; /** custom-token */ AuthConfigProviders["CUSTOM_TOKEN"] = "custom-token"; /** custom-function */ AuthConfigProviders["CUSTOM_FUNCTION"] = "custom-function"; /** local-userpass */ AuthConfigProviders["LOCAL_USERPASS"] = "local-userpass"; /** oauth2-apple */ AuthConfigProviders["OAUTH2_APPLE"] = "oauth2-apple"; /** oauth2-facebook */ AuthConfigProviders["OAUTH2_FACEBOOK"] = "oauth2-facebook"; /** oauth2-google */ AuthConfigProviders["OAUTH2_GOOGLE"] = "oauth2-google"; })(AuthConfigProviders || (exports.AuthConfigProviders = AuthConfigProviders = {})); /** * Converts an object of type 'EventFunction' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_EventFunction(obj) { if (obj === undefined) { return undefined; } const result = { FuncConfig: toJson_EventFunctionFuncConfig(obj.funcConfig), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'EventAwseventbridge' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_EventAwseventbridge(obj) { if (obj === undefined) { return undefined; } const result = { AWSConfig: toJson_EventAwseventbridgeAwsConfig(obj.awsConfig), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'EventFunctionFuncConfig' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_EventFunctionFuncConfig(obj) { if (obj === undefined) { return undefined; } const result = { FunctionId: obj.functionId, FunctionName: obj.functionName, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'EventAwseventbridgeAwsConfig' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_EventAwseventbridgeAwsConfig(obj) { if (obj === undefined) { return undefined; } const result = { AccountId: obj.accountId, Region: obj.region, ExtendedJsonEnabled: obj.extendedJsonEnabled, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /* eslint-enable max-len, quote-props */ /** * A CloudFormation `MongoDB::Atlas::Trigger` * * @cloudformationResource MongoDB::Atlas::Trigger * @stability external */ class CfnTrigger extends cdk.CfnResource { /** * Create a new `MongoDB::Atlas::Trigger`. * * @param scope - scope in which this resource is defined * @param id - scoped id of the resource * @param props - resource properties */ constructor(scope, id, props) { super(scope, id, { type: CfnTrigger.CFN_RESOURCE_TYPE_NAME, properties: toJson_CfnTriggerProps(props), }); this.props = props; this.attrId = cdk.Token.asString(this.getAtt("Id")); } } exports.CfnTrigger = CfnTrigger; _a = JSII_RTTI_SYMBOL_1; CfnTrigger[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnTrigger", version: "3.13.1" }; /** * The CloudFormation resource type name for this resource class. */ CfnTrigger.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::Trigger"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL3RyaWdnZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQThHQSx3REF5QkM7QUF1SEQsc0RBeUJDO0FBMEJELDhDQWVDO0FBNEJELHNEQWVDO0FBc0JELG9DQWVDO0FBbUVELG9EQWNDO0FBaUJELGdFQWNDO0FBdUNELHdFQWVDO0FBaUNELGtGQWdCQzs7QUF2bUJELDBCQUEwQjtBQUMxQixtQ0FBbUM7QUF5R25DOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLHNCQUFzQixDQUNwQyxHQUFnQztJQUVoQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDcEIsZUFBZSxFQUFFLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7UUFDM0QsV0FBVyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDL0MsZUFBZSxFQUFFLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7UUFDM0QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1FBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtRQUMxQixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7UUFDOUIsZUFBZSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQ2xELEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztRQUNoQixTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7S0FDekIsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENB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Q0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDM0QsRUFBRSxDQUNILENBQUM7QUFDSixDQUFDO0FBQ0Qsd0NBQXdDO0FBRXhDOzs7OztHQUtHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsR0FBRyxDQUFDLFdBQVc7SUFnQjdDOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixJQUFJLEVBQUUsVUFBVSxDQUFDLHNCQUFzQjtZQUN2QyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxDQUFFO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7O0FBaENILGdDQWlDQzs7O0FBaENDOztHQUVHO0FBQ29CLGlDQUFzQixHQUFHLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGNkay1pbXBvcnRcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBWaWV3IGFuZCBtYW5hZ2UgeW91ciBhcHBsaWNhdGlvbidzIHRyaWdnZXJzOiBodHRwczovL3d3dy5tb25nb2RiLmNvbS9kb2NzL2F0bGFzL2FwcC1zZXJ2aWNlcy90cmlnZ2Vycy9cbiAqXG4gKiBAc2NoZW1hIENmblRyaWdnZXJQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmblRyaWdnZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJvZmlsZSBpcyBkZWZpbmVkIGluIEFXUyBTZWNyZXQgbWFuYWdlci4gU2VlIFtTZWNyZXQgTWFuYWdlciBQcm9maWxlIHNldHVwXSguLi8uLi8uLi9leGFtcGxlcy9wcm9maWxlLXNlY3JldC55YW1sKS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5UcmlnZ2VyUHJvcHMjUHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5UcmlnZ2VyUHJvcHMjRGF0YWJhc2VUcmlnZ2VyXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVRyaWdnZXI/OiBEYXRhYmFzZUNvbmZpZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5UcmlnZ2VyUHJvcHMjQXV0aFRyaWdnZXJcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhUcmlnZ2VyPzogQXV0aENvbmZpZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5UcmlnZ2VyUHJvcHMjU2NoZWR1bGVUcmlnZ2VyXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZVRyaWdnZXI/OiBTY2hlZHVsZUNvbmZpZztcblxuICAvKipcbiAgICogVGhlIHRyaWdnZXIncyBuYW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIENmblRyaWdnZXJQcm9wcyNOYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0cmlnZ2VyJ3MgdHlwZS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5UcmlnZ2VyUHJvcHMjVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmlnZ2VyIGlzIGRpc2FibGVkIGFuZCBkb2VzIG5vdCBsaXN0ZW4gZm9yIGV2ZW50cyBvciBleGVjdXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIENmblRyaWdnZXJQcm9wcyNEaXNhYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgdGhlIHRyaWdnZXIgY2FsbHMgd2hlbiBpdCBmaXJlcy5cbiAgICpcbiAgICogVGhpcyB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBgZXZlbnRfcHJvY2Vzc29ycy5GVU5DVElPTi5mdW5jdGlvbl9pZGAuXG4gICAqIFlvdSBjYW4gZWl0aGVyIGRlZmluZSB0aGUgdmFsdWUgaGVyZSBvciBpbiBgZXZlbnRfcHJvY2Vzc29ycy5GVU5DVElPTi5mdW5jdGlvbl9pZGAuXG4gICAqIFRoZSBBcHAgU2VydmljZXMgYmFja2VuZCBkdXBsaWNhdGVzIHRoZSB2YWx1ZSB0byB0aGUgY29uZmlndXJhdGlvbiBsb2NhdGlvbiB3aGVyZSB5b3UgZGlkIG5vdCBkZWZpbmUgaXQuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB5b3UgZGVmaW5lIGBmdW5jdGlvbl9pZGAsIHRoZSBiYWNrZW5kIGR1cGxpY2F0ZXMgaXQgdG8gYGV2ZW50X3Byb2Nlc3NvcnMuRlVOQ1RJT04uZnVuY3Rpb25faWRgLlxuICAgKlxuICAgKiBAc2NoZW1hIENmblRyaWdnZXJQcm9wcyNGdW5jdGlvbklkXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCB0aGUgdHJpZ2dlciBjYWxscyB3aGVuIGl0XG4gICAqIGZpcmVzLCBpLmUuIHRoZSBmdW5jdGlvbiBkZXNjcmliZWQgYnkgYGZ1bmN0aW9uX2lkYC5cbiAgICpcbiAgICogVGhpcyB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBgZXZlbnRfcHJvY2Vzc29ycy5GVU5DVElPTi5mdW5jdGlvbl9uYW1lYC5cbiAgICogWW91IGNhbiBlaXRoZXIgZGVmaW5lIHRoZSB2YWx1ZSBoZXJlIG9yIGluIGBldmVudF9wcm9jZXNzb3JzLkZVTkNUSU9OLmZ1bmN0aW9uX25hbWVgLlxuICAgKiBUaGUgQXBwIFNlcnZpY2VzIGJhY2tlbmQgZHVwbGljYXRlcyB0aGUgdmFsdWUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gbG9jYXRpb24gd2hlcmUgeW91IGRpZCBub3QgZGVmaW5lIGl0LlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGRlZmluZSBgZnVuY3Rpb25fbmFtZWAsIHRoZSBiYWNrZW5kIGR1cGxpY2F0ZXMgaXQgdG8gYGV2ZW50X3Byb2Nlc3NvcnMuRlVOQ1RJT04uZnVuY3Rpb25fbmFtZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuVHJpZ2dlclByb3BzI0Z1bmN0aW9uTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2hlcmUgZWFjaCBmaWVsZCBuYW1lIGlzIGFuIGV2ZW50IHByb2Nlc3NvciBJRCBhbmRcbiAgICogZWFjaCB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBjb25maWd1cmVzIGl0cyBjb3JyZXNwb25kaW5nXG4gICAqIGV2ZW50IHByb2Nlc3Nvci4gRm9yIGFuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBvYmplY3QsIHNlZVxuICAgKiBbU2VuZCBUcmlnZ2VyIEV2ZW50cyB0byBBV1NcbiAgICogRXZlbnRCcmlkZ2VdKGh0dHBzOi8vd3d3Lm1vbmdvZGIuY29tL2RvY3MvYXRsYXMvYXBwLXNlcnZpY2VzL3RyaWdnZXJzL2F3cy1ldmVudGJyaWRnZS8jc3RkLWxhYmVsLWV2ZW50X3Byb2Nlc3Nvcl9leGFtcGxlKS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5UcmlnZ2VyUHJvcHMjRXZlbnRQcm9jZXNzb3JzXG4gICAqL1xuICByZWFkb25seSBldmVudFByb2Nlc3NvcnM/OiBFdmVudDtcblxuICAvKipcbiAgICogQXBwIFNlcnZpY2VzIEFwcGxpY2F0aW9uIElEXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuVHJpZ2dlclByb3BzI0FwcElkXG4gICAqL1xuICByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IElkIGZvciBhcHBsaWNhdGlvbiBzZXJ2aWNlc1xuICAgKlxuICAgKiBAc2NoZW1hIENmblRyaWdnZXJQcm9wcyNQcm9qZWN0SWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDZm5UcmlnZ2VyUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmblRyaWdnZXJQcm9wcyhcbiAgb2JqOiBDZm5UcmlnZ2VyUHJvcHMgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBQcm9maWxlOiBvYmoucHJvZmlsZSxcbiAgICBEYXRhYmFzZVRyaWdnZXI6IHRvSnNvbl9EYXRhYmFzZUNvbmZpZyhvYmouZGF0YWJhc2VUcmlnZ2VyKSxcbiAgICBBdXRoVHJpZ2dlcjogdG9Kc29uX0F1dGhDb25maWcob2JqLmF1dGhUcmlnZ2VyKSxcbiAgICBTY2hlZHVsZVRyaWdnZXI6IHRvSnNvbl9TY2hlZHVsZUNvbmZpZyhvYmouc2NoZWR1bGVUcmlnZ2VyKSxcbiAgICBOYW1lOiBvYmoubmFtZSxcbiAgICBUeXBlOiBvYmoudHlwZSxcbiAgICBEaXNhYmxlZDogb2JqLmRpc2FibGVkLFxuICAgIEZ1bmN0aW9uSWQ6IG9iai5mdW5jdGlvbklkLFxuICAgIEZ1bmN0aW9uTmFtZTogb2JqLmZ1bmN0aW9uTmFtZSxcbiAgICBFdmVudFByb2Nlc3NvcnM6IHRvSnNvbl9FdmVudChvYmouZXZlbnRQcm9jZXNzb3JzKSxcbiAgICBBcHBJZDogb2JqLmFwcElkLFxuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBEYXRhYmFzZUNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBfaWQgdmFsdWUgb2YgYSBsaW5rZWQgTW9uZ29EQiBkYXRhIHNvdXJjZS5cbiAgICpcbiAgICogU2VlIFtHZXQgYSBEYXRhIFNvdXJjZV0oI29wZXJhdGlvbi9hZG1pbkdldFNlcnZpY2UpLlxuICAgKlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFiYXNlQ29uZmlnI1NlcnZpY2VJZFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhIGRhdGFiYXNlIGluIHRoZSBsaW5rZWQgZGF0YSBzb3VyY2UuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YWJhc2VDb25maWcjRGF0YWJhc2VcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhIGNvbGxlY3Rpb24gaW4gdGhlIHNwZWNpZmllZCBkYXRhYmFzZS4gVGhlXG4gICAqIHRyaWdnZXIgbGlzdGVucyB0byBldmVudHMgZnJvbSB0aGlzIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YWJhc2VDb25maWcjQ29sbGVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY29sbGVjdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUocykgb2YgTW9uZ29EQiBjaGFuZ2UgZXZlbnQgdGhhdCB0aGUgdHJpZ2dlciBsaXN0ZW5zIGZvci5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhYmFzZUNvbmZpZyNPcGVyYXRpb25UeXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uVHlwZXM/OiBEYXRhYmFzZUNvbmZpZ09wZXJhdGlvblR5cGVzW107XG5cbiAgLyoqXG4gICAqIHN0cmluZ2lmeSB2ZXJzaW9uIG9mIGEgWyRtYXRjaF0oaHR0cHM6Ly93d3cubW9uZ29kYi5jb20vZG9jcy9tYW51YWwvcmVmZXJlbmNlL29wZXJhdG9yL2FnZ3JlZ2F0aW9uL21hdGNoKSBleHByZXNzaW9uIGZpbHRlcnMgY2hhbmdlIGV2ZW50cy4gVGhlIHRyaWdnZXIgd2lsbCBvbmx5IGZpcmUgaWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUgZm9yIGEgZ2l2ZW4gY2hhbmdlIGV2ZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFiYXNlQ29uZmlnI01hdGNoXG4gICAqL1xuICByZWFkb25seSBtYXRjaD86IHN0cmluZztcblxuICAvKipcbiAgICogc3RyaW5naWZ5IHZlcnNpb24gb2YgYSBbJHByb2plY3RdKGh0dHBzOi8vd3d3Lm1vbmdvZGIuY29tL2RvY3MvbWFudWFsL3JlZmVyZW5jZS9vcGVyYXRvci9hZ2dyZWdhdGlvbi9wcm9qZWN0LykgZXhwcmVzc2lvbnMgdG8gbGltaXQgdGhlIGRhdGEgaW5jbHVkZWQgaW4gZWFjaCBldmVudC5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhYmFzZUNvbmZpZyNQcm9qZWN0XG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGluZGljYXRlcyB0aGF0IGBVUERBVEVgIGNoYW5nZSBldmVudHMgc2hvdWxkXG4gICAqIGluY2x1ZGUgdGhlIG1vc3QgY3VycmVudFxuICAgKiBbbWFqb3JpdHktY29tbWl0dGVkXShodHRwczovL3d3dy5tb25nb2RiLmNvbS9kb2NzL21hbnVhbC9yZWZlcmVuY2UvcmVhZC1jb25jZXJuLW1ham9yaXR5LylcbiAgICogdmVyc2lvbiBvZiB0aGUgbW9kaWZpZWQgZG9jdW1lbnQgaW4gdGhlIGBmdWxsRG9jdW1lbnRgXG4gICAqIGZpZWxkLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFiYXNlQ29uZmlnI0Z1bGxEb2N1bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgZnVsbERvY3VtZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgaW5kaWNhdGVzIHRoYXQgYFVQREFURWAgY2hhbmdlIGV2ZW50cyBzaG91bGRcbiAgICogaW5jbHVkZSBhIHNuYXBzaG90IG9mIHRoZSBtb2RpZmllZCBkb2N1bWVudCBmcm9tXG4gICAqIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgdXBkYXRlIHdhcyBhcHBsaWVkLlxuICAgKlxuICAgKiBZb3UgbXVzdCBlbmFibGUgW2RvY3VtZW50XG4gICAqIHByZWltYWdlc10oaHR0cHM6Ly93d3cubW9uZ29kYi5jb20vZG9jcy9hdGxhcy9hcHAtc2VydmljZXMvbW9uZ29kYi9wcmVpbWFnZXMvKVxuICAgKiBmb3IgeW91ciBjbHVzdGVyIHRvIGluY2x1ZGUgdGhlc2Ugc25hcHNob3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFiYXNlQ29uZmlnI0Z1bGxEb2N1bWVudEJlZm9yZUNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgZnVsbERvY3VtZW50QmVmb3JlQ2hhbmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBlbmFibGluZyB0aGUgVHJpZ2dlciBhZnRlciBpdCB3YXMgZGlzYWJsZWRcbiAgICogd2lsbCBub3QgaW52b2tlIGV2ZW50cyB0aGF0IG9jY3VycmVkIHdoaWxlIHRoZSBUcmlnZ2VyXG4gICAqIHdhcyBkaXNhYmxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhYmFzZUNvbmZpZyNTa2lwQ2F0Y2h1cEV2ZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgc2tpcENhdGNodXBFdmVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHdoZW4gdGhpcyBUcmlnZ2VyJ3MgcmVzdW1lIHRva2VuXG4gICAqIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgY2x1c3RlcidzIG9wbG9nLCB0aGUgVHJpZ2dlciBhdXRvbWF0aWNhbGx5IHJlc3VtZXNcbiAgICogcHJvY2Vzc2luZyBldmVudHMgYXQgdGhlIG5leHQgcmVsZXZhbnQgY2hhbmdlIHN0cmVhbSBldmVudC5cbiAgICogQWxsIGNoYW5nZSBzdHJlYW0gZXZlbnRzIGZyb20gd2hlbiB0aGUgVHJpZ2dlciB3YXMgc3VzcGVuZGVkIHVudGlsIHRoZSBUcmlnZ2VyXG4gICAqIHJlc3VtZXMgZXhlY3V0aW9uIGRvIG5vdCBoYXZlIHRoZSBUcmlnZ2VyIGZpcmUgZm9yIHRoZW0uXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YWJhc2VDb25maWcjVG9sZXJhdGVSZXN1bWVFcnJvcnNcbiAgICovXG4gIHJlYWRvbmx5IHRvbGVyYXRlUmVzdW1lRXJyb3JzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdHJpZ2dlciB3aWxsIHVzZSB0aGUgbWF4aW1pemUgdGhyb3VnaHB1dCBvcHRpb24gKGh0dHBzOi8vd3d3Lm1vbmdvZGIuY29tL2RvY3MvYXRsYXMvYXBwLXNlcnZpY2VzL3RyaWdnZXJzL2RhdGFiYXNlLXRyaWdnZXJzLyNzdGQtbGFiZWwtdHJpZ2dlcnMtbWF4aW11bS10aHJvdWdocHV0KS5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhYmFzZUNvbmZpZyNNYXhpbXVtVGhyb3VnaHB1dFxuICAgKi9cbiAgcmVhZG9ubHkgbWF4aW11bVRocm91Z2hwdXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGV2ZW50IG9yZGVyaW5nIGlzIGRpc2FibGVkIGFuZCB0aGlzIFRyaWdnZXJcbiAgICogY2FuIHByb2Nlc3MgZXZlbnRzIGluIHBhcmFsbGVsLiBJZiBgZmFsc2VgLCBldmVudFxuICAgKiBvcmRlcmluZyBpcyBlbmFibGVkIGFuZCB0aGUgVHJpZ2dlciBleGVjdXRlcyBldmVudHNcbiAgICogc2VyaWFsbHkuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YWJhc2VDb25maWcjVW5vcmRlcmVkXG4gICAqL1xuICByZWFkb25seSB1bm9yZGVyZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdEYXRhYmFzZUNvbmZpZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRGF0YWJhc2VDb25maWcoXG4gIG9iajogRGF0YWJhc2VDb25maWcgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBTZXJ2aWNlSWQ6IG9iai5zZXJ2aWNlSWQsXG4gICAgRGF0YWJhc2U6IG9iai5kYXRhYmFzZSxcbiAgICBDb2xsZWN0aW9uOiBvYmouY29sbGVjdGlvbixcbiAgICBPcGVyYXRpb25UeXBlczogb2JqLm9wZXJhdGlvblR5cGVzPy5tYXAoKHkpID0+IHkpLFxuICAgIE1hdGNoOiBvYmoubWF0Y2gsXG4gICAgUHJvamVjdDogb2JqLnByb2plY3QsXG4gICAgRnVsbERvY3VtZW50OiBvYmouZnVsbERvY3VtZW50LFxuICAgIEZ1bGxEb2N1bWVudEJlZm9yZUNoYW5nZTogb2JqLmZ1bGxEb2N1bWVudEJlZm9yZUNoYW5nZSxcbiAgICBTa2lwQ2F0Y2h1cEV2ZW50czogb2JqLnNraXBDYXRjaHVwRXZlbnRzLFxuICAgIFRvbGVyYXRlUmVzdW1lRXJyb3JzOiBvYmoudG9sZXJhdGVSZXN1bWVFcnJvcnMsXG4gICAgTWF4aW11bVRocm91Z2hwdXQ6IG9iai5tYXhpbXVtVGhyb3VnaHB1dCxcbiAgICBVbm9yZGVyZWQ6IG9iai51bm9yZGVyZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgQXV0aENvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhDb25maWcge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgYXV0aGVudGljYXRpb24gZXZlbnQgdGhhdCB0aGUgdHJpZ2dlciBsaXN0ZW5zIGZvci5cbiAgICpcbiAgICogQHNjaGVtYSBBdXRoQ29uZmlnI09wZXJhdGlvblR5cGVcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvblR5cGU6IEF1dGhDb25maWdPcGVyYXRpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZShzKSBvZiBhdXRoZW50aWNhdGlvbiBwcm92aWRlciB0aGF0IHRoZSB0cmlnZ2VyIGxpc3RlbnMgdG8uXG4gICAqXG4gICAqIEBzY2hlbWEgQXV0aENvbmZpZyNQcm92aWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyczogQXV0aENvbmZpZ1Byb3ZpZGVyc1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdBdXRoQ29uZmlnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9BdXRoQ29uZmlnKFxuICBvYmo6IEF1dGhDb25maWcgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBPcGVyYXRpb25UeXBlOiBvYmoub3BlcmF0aW9uVHlwZSxcbiAgICBQcm92aWRlcnM6IG9iai5wcm92aWRlcnM/Lm1hcCgoeSkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgU2NoZWR1bGVDb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBBIFtjcm9uIGV4cHJlc3Npb25dKGh0dHBzOi8vd3d3Lm1vbmdvZGIuY29tL2RvY3MvYXRsYXMvYXBwLXNlcnZpY2VzL3RyaWdnZXJzL3NjaGVkdWxlZC10cmlnZ2Vycy8jY3Jvbi1leHByZXNzaW9ucykgdGhhdCBzcGVjaWZpZXMgd2hlbiB0aGUgdHJpZ2dlciBleGVjdXRlcy5cbiAgICpcbiAgICogQHNjaGVtYSBTY2hlZHVsZUNvbmZpZyNTY2hlZHVsZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgZW5hYmxpbmcgdGhlIHRyaWdnZXIgYWZ0ZXIgaXQgd2FzIGRpc2FibGVkXG4gICAqIHdpbGwgbm90IGludm9rZSBldmVudHMgdGhhdCBvY2N1cnJlZCB3aGlsZSB0aGUgdHJpZ2dlclxuICAgKiB3YXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgU2NoZWR1bGVDb25maWcjU2tpcGNhdGNodXBFdmVudHNcbiAgICovXG4gIHJlYWRvbmx5IHNraXBjYXRjaHVwRXZlbnRzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnU2NoZWR1bGVDb25maWcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1NjaGVkdWxlQ29uZmlnKFxuICBvYmo6IFNjaGVkdWxlQ29uZmlnIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgU2NoZWR1bGU6IG9iai5zY2hlZHVsZSxcbiAgICBTa2lwY2F0Y2h1cEV2ZW50czogb2JqLnNraXBjYXRjaHVwRXZlbnRzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEV2ZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnQge1xuICAvKipcbiAgICogQHNjaGVtYSBFdmVudCNGVU5DVElPTlxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb24/OiBFdmVudEZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEV2ZW50I0FXU0VWRU5UQlJJREdFXG4gICAqL1xuICByZWFkb25seSBhd3NldmVudGJyaWRnZT86IEV2ZW50QXdzZXZlbnRicmlkZ2U7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0V2ZW50JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9FdmVudChcbiAgb2JqOiBFdmVudCB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEZVTkNUSU9OOiB0b0pzb25fRXZlbnRGdW5jdGlvbihvYmouZnVuY3Rpb24pLFxuICAgIEFXU0VWRU5UQlJJREdFOiB0b0pzb25fRXZlbnRBd3NldmVudGJyaWRnZShvYmouYXdzZXZlbnRicmlkZ2UpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFiYXNlQ29uZmlnT3BlcmF0aW9uVHlwZXNcbiAqL1xuZXhwb3J0IGVudW0gRGF0YWJhc2VDb25maWdPcGVyYXRpb25UeXBlcyB7XG4gIC8qKiBJTlNFUlQgKi9cbiAgSU5TRVJUID0gXCJJTlNFUlRcIixcbiAgLyoqIFVQREFURSAqL1xuICBVUERBVEUgPSBcIlVQREFURVwiLFxuICAvKiogUkVQTEFDRSAqL1xuICBSRVBMQUNFID0gXCJSRVBMQUNFXCIsXG4gIC8qKiBERUxFVEUgKi9cbiAgREVMRVRFID0gXCJERUxFVEVcIixcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSBvZiBhdXRoZW50aWNhdGlvbiBldmVudCB0aGF0IHRoZSB0cmlnZ2VyIGxpc3RlbnMgZm9yLlxuICpcbiAqIEBzY2hlbWEgQXV0aENvbmZpZ09wZXJhdGlvblR5cGVcbiAqL1xuZXhwb3J0IGVudW0gQXV0aENvbmZpZ09wZXJhdGlvblR5cGUge1xuICAvKiogTE9HSU4gKi9cbiAgTE9HSU4gPSBcIkxPR0lOXCIsXG4gIC8qKiBDUkVBVEUgKi9cbiAgQ1JFQVRFID0gXCJDUkVBVEVcIixcbiAgLyoqIERFTEVURSAqL1xuICBERUxFVEUgPSBcIkRFTEVURVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgQXV0aENvbmZpZ1Byb3ZpZGVyc1xuICovXG5leHBvcnQgZW51bSBBdXRoQ29uZmlnUHJvdmlkZXJzIHtcbiAgLyoqIGFub24tdXNlciAqL1xuICBBTk9OX1VTRVIgPSBcImFub24tdXNlclwiLFxuICAvKiogYXBpLWtleSAqL1xuICBBUElfS0VZID0gXCJhcGkta2V5XCIsXG4gIC8qKiBjdXN0b20tdG9rZW4gKi9cbiAgQ1VTVE9NX1RPS0VOID0gXCJjdXN0b20tdG9rZW5cIixcbiAgLyoqIGN1c3RvbS1mdW5jdGlvbiAqL1xuICBDVVNUT01fRlVOQ1RJT04gPSBcImN1c3RvbS1mdW5jdGlvblwiLFxuICAvKiogbG9jYWwtdXNlcnBhc3MgKi9cbiAgTE9DQUxfVVNFUlBBU1MgPSBcImxvY2FsLXVzZXJwYXNzXCIsXG4gIC8qKiBvYXV0aDItYXBwbGUgKi9cbiAgT0FVVEgyX0FQUExFID0gXCJvYXV0aDItYXBwbGVcIixcbiAgLyoqIG9hdXRoMi1mYWNlYm9vayAqL1xuICBPQVVUSDJfRkFDRUJPT0sgPSBcIm9hdXRoMi1mYWNlYm9va1wiLFxuICAvKiogb2F1dGgyLWdvb2dsZSAqL1xuICBPQVVUSDJfR09PR0xFID0gXCJvYXV0aDItZ29vZ2xlXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBFdmVudEZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGdW5jdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEV2ZW50RnVuY3Rpb24jRnVuY0NvbmZpZ1xuICAgKi9cbiAgcmVhZG9ubHkgZnVuY0NvbmZpZz86IEV2ZW50RnVuY3Rpb25GdW5jQ29uZmlnO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdFdmVudEZ1bmN0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9FdmVudEZ1bmN0aW9uKFxuICBvYmo6IEV2ZW50RnVuY3Rpb24gfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBGdW5jQ29uZmlnOiB0b0pzb25fRXZlbnRGdW5jdGlvbkZ1bmNDb25maWcob2JqLmZ1bmNDb25maWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEV2ZW50QXdzZXZlbnRicmlkZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudEF3c2V2ZW50YnJpZGdlIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRXZlbnRBd3NldmVudGJyaWRnZSNBV1NDb25maWdcbiAgICovXG4gIHJlYWRvbmx5IGF3c0NvbmZpZz86IEV2ZW50QXdzZXZlbnRicmlkZ2VBd3NDb25maWc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0V2ZW50QXdzZXZlbnRicmlkZ2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0V2ZW50QXdzZXZlbnRicmlkZ2UoXG4gIG9iajogRXZlbnRBd3NldmVudGJyaWRnZSB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEFXU0NvbmZpZzogdG9Kc29uX0V2ZW50QXdzZXZlbnRicmlkZ2VBd3NDb25maWcob2JqLmF3c0NvbmZpZyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRXZlbnRGdW5jdGlvbkZ1bmNDb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudEZ1bmN0aW9uRnVuY0NvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgdGhlIHRyaWdnZXIgY2FsbHMgd2hlbiBpdCBmaXJlcy5cbiAgICpcbiAgICogVGhpcyB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUgcm9vdC1sZXZlbCBgZnVuY3Rpb25faWRgLlxuICAgKiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgdGhlIHZhbHVlIGhlcmUgb3IgaW4gYGZ1bmN0aW9uX2lkYC5cbiAgICogVGhlIEFwcCBTZXJ2aWNlcyBiYWNrZW5kIGR1cGxpY2F0ZXMgdGhlIHZhbHVlIHRvIHRoZSBjb25maWd1cmF0aW9uIGxvY2F0aW9uIHdoZXJlIHlvdSBkaWQgbm90IGRlZmluZSBpdC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSBkZWZpbmUgYGV2ZW50X3Byb2Nlc3NvcnMuRlVOQ1RJT04uZnVuY3Rpb25faWRgLCB0aGUgYmFja2VuZCBkdXBsaWNhdGVzIGl0IHRvIGBmdW5jdGlvbl9pZGAuXG4gICAqXG4gICAqIEBzY2hlbWEgRXZlbnRGdW5jdGlvbkZ1bmNDb25maWcjRnVuY3Rpb25JZFxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25JZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgdGhlIHRyaWdnZXIgY2FsbHMgd2hlbiBpdFxuICAgKiBmaXJlcywgaS5lLiB0aGUgZnVuY3Rpb24gZGVzY3JpYmVkIGJ5IGBmdW5jdGlvbl9pZGAuXG4gICAqXG4gICAqIFRoaXMgdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIHJvb3QtbGV2ZWwgYGZ1bmN0aW9uX25hbWVgLlxuICAgKiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgdGhlIHZhbHVlIGhlcmUgb3IgaW4gYGZ1bmN0aW9uX25hbWVgLlxuICAgKiBUaGUgQXBwIFNlcnZpY2VzIGJhY2tlbmQgZHVwbGljYXRlcyB0aGUgdmFsdWUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gbG9jYXRpb24gd2hlcmUgeW91IGRpZCBub3QgZGVmaW5lIGl0LlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGRlZmluZSBgZXZlbnRfcHJvY2Vzc29ycy5GVU5DVElPTi5mdW5jdGlvbl9uYW1lYCwgdGhlIGJhY2tlbmQgZHVwbGljYXRlcyBpdCB0byBgZnVuY3Rpb25fbmFtZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgRXZlbnRGdW5jdGlvbkZ1bmNDb25maWcjRnVuY3Rpb25OYW1lXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0V2ZW50RnVuY3Rpb25GdW5jQ29uZmlnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9FdmVudEZ1bmN0aW9uRnVuY0NvbmZpZyhcbiAgb2JqOiBFdmVudEZ1bmN0aW9uRnVuY0NvbmZpZyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEZ1bmN0aW9uSWQ6IG9iai5mdW5jdGlvbklkLFxuICAgIEZ1bmN0aW9uTmFtZTogb2JqLmZ1bmN0aW9uTmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBFdmVudEF3c2V2ZW50YnJpZGdlQXdzQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRBd3NldmVudGJyaWRnZUF3c0NvbmZpZyB7XG4gIC8qKlxuICAgKiBBbiBBV1MgQWNjb3VudCBJRC5cbiAgICpcbiAgICogQHNjaGVtYSBFdmVudEF3c2V2ZW50YnJpZGdlQXdzQ29uZmlnI0FjY291bnRJZFxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBBV1MgcmVnaW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEV2ZW50QXdzZXZlbnRicmlkZ2VBd3NDb25maWcjUmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgZXZlbnQgb2JqZWN0cyBhcmUgc2VyaWFsaXplZCB1c2luZyBFSlNPTi5cbiAgICpcbiAgICogQHNjaGVtYSBFdmVudEF3c2V2ZW50YnJpZGdlQXdzQ29uZmlnI0V4dGVuZGVkSnNvbkVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuZGVkSnNvbkVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdFdmVudEF3c2V2ZW50YnJpZGdlQXdzQ29uZmlnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9FdmVudEF3c2V2ZW50YnJpZGdlQXdzQ29uZmlnKFxuICBvYmo6IEV2ZW50QXdzZXZlbnRicmlkZ2VBd3NDb25maWcgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBBY2NvdW50SWQ6IG9iai5hY2NvdW50SWQsXG4gICAgUmVnaW9uOiBvYmoucmVnaW9uLFxuICAgIEV4dGVuZGVkSnNvbkVuYWJsZWQ6IG9iai5leHRlbmRlZEpzb25FbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIENsb3VkRm9ybWF0aW9uIGBNb25nb0RCOjpBdGxhczo6VHJpZ2dlcmBcbiAqXG4gKiBAY2xvdWRmb3JtYXRpb25SZXNvdXJjZSBNb25nb0RCOjpBdGxhczo6VHJpZ2dlclxuICogQHN0YWJpbGl0eSBleHRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgQ2ZuVHJpZ2dlciBleHRlbmRzIGNkay5DZm5SZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZSBuYW1lIGZvciB0aGlzIHJlc291cmNlIGNsYXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDRk5fUkVTT1VSQ0VfVFlQRV9OQU1FID0gXCJNb25nb0RCOjpBdGxhczo6VHJpZ2dlclwiO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBwcm9wcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogQ2ZuVHJpZ2dlclByb3BzO1xuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpUcmlnZ2VyLklkYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgYE1vbmdvREI6OkF0bGFzOjpUcmlnZ2VyYC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgaW4gd2hpY2ggdGhpcyByZXNvdXJjZSBpcyBkZWZpbmVkXG4gICAqIEBwYXJhbSBpZCAgICAtIHNjb3BlZCBpZCBvZiB0aGUgcmVzb3VyY2VcbiAgICogQHBhcmFtIHByb3BzIC0gcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2ZuVHJpZ2dlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0eXBlOiBDZm5UcmlnZ2VyLkNGTl9SRVNPVVJDRV9UWVBFX05BTUUsXG4gICAgICBwcm9wZXJ0aWVzOiB0b0pzb25fQ2ZuVHJpZ2dlclByb3BzKHByb3BzKSEsXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmF0dHJJZCA9IGNkay5Ub2tlbi5hc1N0cmluZyh0aGlzLmdldEF0dChcIklkXCIpKTtcbiAgfVxufVxuIl19