UNPKG

@ultipa-graph/ultipa-driver

Version:

NodeJS SDK for Ultipa GQL

135 lines 17.6 kB
"use strict"; /** * Configuration for GQLDB Node.js driver. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ConfigBuilder = exports.DEFAULT_CONFIG = void 0; exports.validateConfig = validateConfig; exports.createConfig = createConfig; /** Default configuration values */ exports.DEFAULT_CONFIG = { hosts: ['localhost:9000'], timeout: 30000, // 30 seconds (in milliseconds) maxRecvSize: 64 * 1024 * 1024, // 64MB poolSize: 10, healthCheckInterval: 30000, // 30 seconds (in milliseconds) retryCount: 3, retryDelay: 100, // 100ms }; /** Builder for creating GqldbConfig */ class ConfigBuilder { config = {}; /** Set the server hosts */ hosts(...hosts) { this.config.hosts = hosts; return this; } /** Set the username for authentication */ username(username) { this.config.username = username; return this; } /** Set the password for authentication */ password(password) { this.config.password = password; return this; } /** Set the default graph */ defaultGraph(graph) { this.config.defaultGraph = graph; return this; } /** Set the query timeout in milliseconds */ timeout(ms) { this.config.timeout = ms; return this; } /** Set the query timeout in seconds (convenience method) */ timeoutSeconds(seconds) { this.config.timeout = seconds * 1000; return this; } /** Set the maximum receive message size */ maxRecvSize(bytes) { this.config.maxRecvSize = bytes; return this; } /** Set TLS options */ tls(options) { this.config.tlsOptions = options; return this; } /** Set the connection pool size per host */ poolSize(size) { this.config.poolSize = size; return this; } /** Set the health check interval in milliseconds */ healthCheckInterval(ms) { this.config.healthCheckInterval = ms; return this; } /** Set the number of retries */ retryCount(count) { this.config.retryCount = count; return this; } /** Set the delay between retries in milliseconds */ retryDelay(ms) { this.config.retryDelay = ms; return this; } /** Build and return the configuration */ build() { const config = { hosts: this.config.hosts ?? exports.DEFAULT_CONFIG.hosts, username: this.config.username, password: this.config.password, defaultGraph: this.config.defaultGraph, timeout: this.config.timeout ?? exports.DEFAULT_CONFIG.timeout, maxRecvSize: this.config.maxRecvSize ?? exports.DEFAULT_CONFIG.maxRecvSize, tlsOptions: this.config.tlsOptions, poolSize: this.config.poolSize ?? exports.DEFAULT_CONFIG.poolSize, healthCheckInterval: this.config.healthCheckInterval ?? exports.DEFAULT_CONFIG.healthCheckInterval, retryCount: this.config.retryCount ?? exports.DEFAULT_CONFIG.retryCount, retryDelay: this.config.retryDelay ?? exports.DEFAULT_CONFIG.retryDelay, }; validateConfig(config); return config; } } exports.ConfigBuilder = ConfigBuilder; /** Validate the configuration */ function validateConfig(config) { if (!config.hosts || config.hosts.length === 0) { throw new Error('No hosts configured'); } if (config.timeout !== undefined && config.timeout < 0) { throw new Error('Invalid timeout value'); } if (config.maxRecvSize !== undefined && config.maxRecvSize <= 0) { config.maxRecvSize = exports.DEFAULT_CONFIG.maxRecvSize; } if (config.poolSize !== undefined && config.poolSize <= 0) { config.poolSize = exports.DEFAULT_CONFIG.poolSize; } } /** Create a configuration with defaults */ function createConfig(options = {}) { const config = { hosts: options.hosts ?? exports.DEFAULT_CONFIG.hosts, username: options.username, password: options.password, defaultGraph: options.defaultGraph, timeout: options.timeout ?? exports.DEFAULT_CONFIG.timeout, maxRecvSize: options.maxRecvSize ?? exports.DEFAULT_CONFIG.maxRecvSize, tlsOptions: options.tlsOptions, poolSize: options.poolSize ?? exports.DEFAULT_CONFIG.poolSize, healthCheckInterval: options.healthCheckInterval ?? exports.DEFAULT_CONFIG.healthCheckInterval, retryCount: options.retryCount ?? exports.DEFAULT_CONFIG.retryCount, retryDelay: options.retryDelay ?? exports.DEFAULT_CONFIG.retryDelay, }; validateConfig(config); return config; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQW1KSCx3Q0FnQkM7QUFHRCxvQ0FpQkM7QUFqSkQsbUNBQW1DO0FBQ3RCLFFBQUEsY0FBYyxHQUF1RztJQUNoSSxLQUFLLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLCtCQUErQjtJQUMvQyxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsT0FBTztJQUN0QyxRQUFRLEVBQUUsRUFBRTtJQUNaLG1CQUFtQixFQUFFLEtBQUssRUFBRSwrQkFBK0I7SUFDM0QsVUFBVSxFQUFFLENBQUM7SUFDYixVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVE7Q0FDMUIsQ0FBQztBQUVGLHVDQUF1QztBQUN2QyxNQUFhLGFBQWE7SUFDaEIsTUFBTSxHQUF5QixFQUFFLENBQUM7SUFFMUMsMkJBQTJCO0lBQzNCLEtBQUssQ0FBQyxHQUFHLEtBQWU7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxRQUFRLENBQUMsUUFBZ0I7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxRQUFRLENBQUMsUUFBZ0I7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDakMsT0FBTyxJQUFJLENB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T0FBTyxDQUFDLFVBQVUsSUFBSSxzQkFBYyxDQUFDLFVBQVU7UUFDM0QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksc0JBQWMsQ0FBQyxVQUFVO0tBQzVELENBQUM7SUFFRixjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgR1FMREIgTm9kZS5qcyBkcml2ZXIuXG4gKi9cblxuaW1wb3J0ICogYXMgdGxzIGZyb20gJ3Rscyc7XG5cbi8qKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdxbGRiQ2xpZW50ICovXG5leHBvcnQgaW50ZXJmYWNlIEdxbGRiQ29uZmlnIHtcbiAgLyoqIFNlcnZlciBob3N0cyBpbiBmb3JtYXQgXCJob3N0OnBvcnRcIiAqL1xuICBob3N0czogc3RyaW5nW107XG4gIC8qKiBVc2VybmFtZSBmb3IgYXV0aGVudGljYXRpb24gKi9cbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIC8qKiBQYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24gKi9cbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IGdyYXBoIHRvIHVzZSAqL1xuICBkZWZhdWx0R3JhcGg/OiBzdHJpbmc7XG4gIC8qKiBRdWVyeSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdCAzMDAwMG1zID0gMzBzKSAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiogTWF4aW11bSByZWNlaXZlIG1lc3NhZ2Ugc2l6ZSBpbiBieXRlcyAoZGVmYXVsdCA2NE1CKSAqL1xuICBtYXhSZWN2U2l6ZT86IG51bWJlcjtcbiAgLyoqIFRMUyBvcHRpb25zIGZvciBzZWN1cmUgY29ubmVjdGlvbnMgKi9cbiAgdGxzT3B0aW9ucz86IHRscy5Db25uZWN0aW9uT3B0aW9ucztcbiAgLyoqIENvbm5lY3Rpb24gcG9vbCBzaXplIHBlciBob3N0ICovXG4gIHBvb2xTaXplPzogbnVtYmVyO1xuICAvKiogSGVhbHRoIGNoZWNrIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdCAzMDAwMG1zID0gMzBzKSAqL1xuICBoZWFsdGhDaGVja0ludGVydmFsPzogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIHJldHJpZXMgZm9yIGZhaWxlZCByZXF1ZXN0cyAqL1xuICByZXRyeUNvdW50PzogbnVtYmVyO1xuICAvKiogRGVsYXkgYmV0d2VlbiByZXRyaWVzIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdCAxMDBtcykgKi9cbiAgcmV0cnlEZWxheT86IG51bWJlcjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0YWJsZSBwZXItY2xpZW50IGxvZ2ljYWwgc2Vzc2lvbiBpZCB1c2VkIGJ5IHRoZVxuICAgKiB0cmFuc2FjdGlvbi1icmFuY2ggbW9kZWwgKHNlbnQgYXMgYHgtdWx0aXBhLXNlc3Npb24taWRgIG1ldGFkYXRhXG4gICAqIHdoZW4gwqcyLjEgb3B0LWluIGlzIGVuYWJsZWQgaW4gVFJBTlNBQ1RJT05TX0RSSVZFUl9HVUlERS5tZCkuXG4gICAqIFdoZW4gb21pdHRlZCwgdGhlIGRyaXZlciBhdXRvLWdlbmVyYXRlcyBhIHJhbmRvbSBoZXggc3RyaW5nIGF0XG4gICAqIGNsaWVudCBjb25zdHJ1Y3Rpb24gdGltZS5cbiAgICovXG4gIHNlc3Npb25JZD86IHN0cmluZztcbn1cblxuLyoqIERlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMgKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTkZJRzogUmVxdWlyZWQ8T21pdDxHcWxkYkNvbmZpZywgJ3VzZXJuYW1lJyB8ICdwYXNzd29yZCcgfCAnZGVmYXVsdEdyYXBoJyB8ICd0bHNPcHRpb25zJyB8ICdzZXNzaW9uSWQnPj4gPSB7XG4gIGhvc3RzOiBbJ2xvY2FsaG9zdDo5MDAwJ10sXG4gIHRpbWVvdXQ6IDMwMDAwLCAvLyAzMCBzZWNvbmRzIChpbiBtaWxsaXNlY29uZHMpXG4gIG1heFJlY3ZTaXplOiA2NCAqIDEwMjQgKiAxMDI0LCAvLyA2NE1CXG4gIHBvb2xTaXplOiAxMCxcbiAgaGVhbHRoQ2hlY2tJbnRlcnZhbDogMzAwMDAsIC8vIDMwIHNlY29uZHMgKGluIG1pbGxpc2Vjb25kcylcbiAgcmV0cnlDb3VudDogMyxcbiAgcmV0cnlEZWxheTogMTAwLCAvLyAxMDBtc1xufTtcblxuLyoqIEJ1aWxkZXIgZm9yIGNyZWF0aW5nIEdxbGRiQ29uZmlnICovXG5leHBvcnQgY2xhc3MgQ29uZmlnQnVpbGRlciB7XG4gIHByaXZhdGUgY29uZmlnOiBQYXJ0aWFsPEdxbGRiQ29uZmlnPiA9IHt9O1xuXG4gIC8qKiBTZXQgdGhlIHNlcnZlciBob3N0cyAqL1xuICBob3N0cyguLi5ob3N0czogc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLmNvbmZpZy5ob3N0cyA9IGhvc3RzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgdXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0aW9uICovXG4gIHVzZXJuYW1lKHVzZXJuYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmNvbmZpZy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0aW9uICovXG4gIHBhc3N3b3JkKHBhc3N3b3JkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmNvbmZpZy5wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgZGVmYXVsdCBncmFwaCAqL1xuICBkZWZhdWx0R3JhcGgoZ3JhcGg6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuY29uZmlnLmRlZmF1bHRHcmFwaCA9IGdyYXBoO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgcXVlcnkgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbiAgdGltZW91dChtczogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5jb25maWcudGltZW91dCA9IG1zO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgcXVlcnkgdGltZW91dCBpbiBzZWNvbmRzIChjb252ZW5pZW5jZSBtZXRob2QpICovXG4gIHRpbWVvdXRTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuY29uZmlnLnRpbWVvdXQgPSBzZWNvbmRzICogMTAwMDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIG1heGltdW0gcmVjZWl2ZSBtZXNzYWdlIHNpemUgKi9cbiAgbWF4UmVjdlNpemUoYnl0ZXM6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuY29uZmlnLm1heFJlY3ZTaXplID0gYnl0ZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogU2V0IFRMUyBvcHRpb25zICovXG4gIHRscyhvcHRpb25zOiB0bHMuQ29ubmVjdGlvbk9wdGlvbnMpOiB0aGlzIHtcbiAgICB0aGlzLmNvbmZpZy50bHNPcHRpb25zID0gb3B0aW9ucztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGNvbm5lY3Rpb24gcG9vbCBzaXplIHBlciBob3N0ICovXG4gIHBvb2xTaXplKHNpemU6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuY29uZmlnLnBvb2xTaXplID0gc2l6ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGhlYWx0aCBjaGVjayBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgKi9cbiAgaGVhbHRoQ2hlY2tJbnRlcnZhbChtczogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5jb25maWcuaGVhbHRoQ2hlY2tJbnRlcnZhbCA9IG1zO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgbnVtYmVyIG9mIHJldHJpZXMgKi9cbiAgcmV0cnlDb3VudChjb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5jb25maWcucmV0cnlDb3VudCA9IGNvdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgZGVsYXkgYmV0d2VlbiByZXRyaWVzIGluIG1pbGxpc2Vjb25kcyAqL1xuICByZXRyeURlbGF5KG1zOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLmNvbmZpZy5yZXRyeURlbGF5ID0gbXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQnVpbGQgYW5kIHJldHVybiB0aGUgY29uZmlndXJhdGlvbiAqL1xuICBidWlsZCgpOiBHcWxkYkNvbmZpZyB7XG4gICAgY29uc3QgY29uZmlnOiBHcWxkYkNvbmZpZyA9IHtcbiAgICAgIGhvc3RzOiB0aGlzLmNvbmZpZy5ob3N0cyA/PyBERUZBVUxUX0NPTkZJRy5ob3N0cyxcbiAgICAgIHVzZXJuYW1lOiB0aGlzLmNvbmZpZy51c2VybmFtZSxcbiAgICAgIHBhc3N3b3JkOiB0aGlzLmNvbmZpZy5wYXNzd29yZCxcbiAgICAgIGRlZmF1bHRHcmFwaDogdGhpcy5jb25maWcuZGVmYXVsdEdyYXBoLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWcudGltZW91dCA/PyBERUZBVUxUX0NPTkZJRy50aW1lb3V0LFxuICAgICAgbWF4UmVjdlNpemU6IHRoaXMuY29uZmlnLm1heFJlY3ZTaXplID8/IERFRkFVTFRfQ09ORklHLm1heFJlY3ZTaXplLFxuICAgICAgdGxzT3B0aW9uczogdGhpcy5jb25maWcudGxzT3B0aW9ucyxcbiAgICAgIHBvb2xTaXplOiB0aGlzLmNvbmZpZy5wb29sU2l6ZSA/PyBERUZBVUxUX0NPTkZJRy5wb29sU2l6ZSxcbiAgICAgIGhlYWx0aENoZWNrSW50ZXJ2YWw6IHRoaXMuY29uZmlnLmhlYWx0aENoZWNrSW50ZXJ2YWwgPz8gREVGQVVMVF9DT05GSUcuaGVhbHRoQ2hlY2tJbnRlcnZhbCxcbiAgICAgIHJldHJ5Q291bnQ6IHRoaXMuY29uZmlnLnJldHJ5Q291bnQgPz8gREVGQVVMVF9DT05GSUcucmV0cnlDb3VudCxcbiAgICAgIHJldHJ5RGVsYXk6IHRoaXMuY29uZmlnLnJldHJ5RGVsYXkgPz8gREVGQVVMVF9DT05GSUcucmV0cnlEZWxheSxcbiAgICB9O1xuXG4gICAgdmFsaWRhdGVDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG59XG5cbi8qKiBWYWxpZGF0ZSB0aGUgY29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29uZmlnKGNvbmZpZzogR3FsZGJDb25maWcpOiB2b2lkIHtcbiAgaWYgKCFjb25maWcuaG9zdHMgfHwgY29uZmlnLmhvc3RzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gaG9zdHMgY29uZmlndXJlZCcpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy50aW1lb3V0ICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnRpbWVvdXQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRpbWVvdXQgdmFsdWUnKTtcbiAgfVxuXG4gIGlmIChjb25maWcubWF4UmVjdlNpemUgIT09IHVuZGVmaW5lZCAmJiBjb25maWcubWF4UmVjdlNpemUgPD0gMCkge1xuICAgIGNvbmZpZy5tYXhSZWN2U2l6ZSA9IERFRkFVTFRfQ09ORklHLm1heFJlY3ZTaXplO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5wb29sU2l6ZSAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5wb29sU2l6ZSA8PSAwKSB7XG4gICAgY29uZmlnLnBvb2xTaXplID0gREVGQVVMVF9DT05GSUcucG9vbFNpemU7XG4gIH1cbn1cblxuLyoqIENyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0cyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZyhvcHRpb25zOiBQYXJ0aWFsPEdxbGRiQ29uZmlnPiA9IHt9KTogR3FsZGJDb25maWcge1xuICBjb25zdCBjb25maWc6IEdxbGRiQ29uZmlnID0ge1xuICAgIGhvc3RzOiBvcHRpb25zLmhvc3RzID8/IERFRkFVTFRfQ09ORklHLmhvc3RzLFxuICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lLFxuICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgIGRlZmF1bHRHcmFwaDogb3B0aW9ucy5kZWZhdWx0R3JhcGgsXG4gICAgdGltZW91dDogb3B0aW9ucy50aW1lb3V0ID8/IERFRkFVTFRfQ09ORklHLnRpbWVvdXQsXG4gICAgbWF4UmVjdlNpemU6IG9wdGlvbnMubWF4UmVjdlNpemUgPz8gREVGQVVMVF9DT05GSUcubWF4UmVjdlNpemUsXG4gICAgdGxzT3B0aW9uczogb3B0aW9ucy50bHNPcHRpb25zLFxuICAgIHBvb2xTaXplOiBvcHRpb25zLnBvb2xTaXplID8/IERFRkFVTFRfQ09ORklHLnBvb2xTaXplLFxuICAgIGhlYWx0aENoZWNrSW50ZXJ2YWw6IG9wdGlvbnMuaGVhbHRoQ2hlY2tJbnRlcnZhbCA/PyBERUZBVUxUX0NPTkZJRy5oZWFsdGhDaGVja0ludGVydmFsLFxuICAgIHJldHJ5Q291bnQ6IG9wdGlvbnMucmV0cnlDb3VudCA/PyBERUZBVUxUX0NPTkZJRy5yZXRyeUNvdW50LFxuICAgIHJldHJ5RGVsYXk6IG9wdGlvbnMucmV0cnlEZWxheSA/PyBERUZBVUxUX0NPTkZJRy5yZXRyeURlbGF5LFxuICB9O1xuXG4gIHZhbGlkYXRlQ29uZmlnKGNvbmZpZyk7XG4gIHJldHVybiBjb25maWc7XG59XG4iXX0=