Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

testcafe-browser-provider-browserstack

Package Overview
Dependencies
Maintainers
8
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

testcafe-browser-provider-browserstack - npm Package Compare versions

Comparing version 1.15.1 to 1.15.2

7

lib/browser-proxy.js

@@ -10,3 +10,4 @@ "use strict";

module.exports = class BrowserProxy {
constructor(targetHost, targetPort, { proxyPort, responseDelay } = {}) {
constructor(targetHost, targetPort, { targetProtocol, proxyPort, responseDelay } = {}) {
this.targetProtocol = targetProtocol || 'http';
this.targetHost = targetHost;

@@ -22,3 +23,3 @@ this.targetPort = targetPort;

const parsedRequestUrl = (0, url_1.parse)(req.url);
const destinationUrl = 'http://' + this.targetHost + ':' + this.targetPort + parsedRequestUrl.path;
const destinationUrl = this.targetProtocol + '//' + this.targetHost + ':' + this.targetPort + parsedRequestUrl.path;
res.statusCode = 302;

@@ -45,2 +46,2 @@ res.setHeader('location', destinationUrl);

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1wcm94eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLXByb3h5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLDZCQUF3QztBQUN4QyxvREFBNkI7QUFHN0IsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLFlBQVk7SUFDL0IsWUFBYSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDbEUsSUFBSSxDQUFDLFVBQVUsR0FBTSxVQUFVLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBTSxVQUFVLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBTyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxJQUFJLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU5RSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsaUJBQWlCLENBQUUsR0FBRyxFQUFFLEdBQUc7UUFDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxXQUFRLEVBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sY0FBYyxHQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUVyRyxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUVyQixHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUMxQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNOLE9BQU8sSUFBSSxnQkFBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksR0FBRztvQkFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ1g7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztvQkFFNUMsT0FBTyxFQUFFLENBQUM7aUJBQ2I7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVVybCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdwaW5raWUnO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgQnJvd3NlclByb3h5IHtcbiAgICBjb25zdHJ1Y3RvciAodGFyZ2V0SG9zdCwgdGFyZ2V0UG9ydCwgeyBwcm94eVBvcnQsIHJlc3BvbnNlRGVsYXkgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMudGFyZ2V0SG9zdCAgICA9IHRhcmdldEhvc3Q7XG4gICAgICAgIHRoaXMudGFyZ2V0UG9ydCAgICA9IHRhcmdldFBvcnQ7XG4gICAgICAgIHRoaXMucHJveHlQb3J0ICAgICA9IHByb3h5UG9ydCB8fCAwO1xuICAgICAgICB0aGlzLnJlc3BvbnNlRGVsYXkgPSByZXNwb25zZURlbGF5IHx8IDA7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcigoLi4uYXJncykgPT4gdGhpcy5fb25Ccm93c2VyUmVxdWVzdCguLi5hcmdzKSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBzb2NrZXQgPT4gc29ja2V0LnVucmVmKCkpO1xuICAgIH1cblxuICAgIF9vbkJyb3dzZXJSZXF1ZXN0IChyZXEsIHJlcykge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlcXVlc3RVcmwgPSBwYXJzZVVybChyZXEudXJsKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uVXJsICAgPSAnaHR0cDovLycgKyB0aGlzLnRhcmdldEhvc3QgKyAnOicgKyB0aGlzLnRhcmdldFBvcnQgKyBwYXJzZWRSZXF1ZXN0VXJsLnBhdGg7XG5cbiAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gMzAyO1xuXG4gICAgICAgICAgICByZXMuc2V0SGVhZGVyKCdsb2NhdGlvbicsIGRlc3RpbmF0aW9uVXJsKTtcbiAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgfSwgdGhpcy5yZXNwb25zZURlbGF5KTtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0ICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyLmxpc3Rlbih0aGlzLnByb3h5UG9ydCwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm94eVBvcnQgPSB0aGlzLnNlcnZlci5hZGRyZXNzKCkucG9ydDtcblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRpc3Bvc2UgKCkge1xuICAgICAgICB0aGlzLnNlcnZlci5jbG9zZSgpO1xuICAgIH1cbn07XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1wcm94eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLXByb3h5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLDZCQUF3QztBQUN4QyxvREFBNkI7QUFHN0IsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLFlBQVk7SUFDL0IsWUFBYSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQ2xGLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxJQUFJLE1BQU0sQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFPLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFPLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFRLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBSSxhQUFhLElBQUksQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxpQkFBaUIsQ0FBRSxHQUFHLEVBQUUsR0FBRztRQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLFdBQVEsRUFBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxjQUFjLEdBQUssSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFFdEgsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7WUFFckIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDMUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTixPQUFPLElBQUksZ0JBQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLEdBQUc7b0JBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNYO29CQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBRTVDLE9BQU8sRUFBRSxDQUFDO2lCQUNiO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VVcmwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAncGlua2llJztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJyb3dzZXJQcm94eSB7XG4gICAgY29uc3RydWN0b3IgKHRhcmdldEhvc3QsIHRhcmdldFBvcnQsIHsgdGFyZ2V0UHJvdG9jb2wsIHByb3h5UG9ydCwgcmVzcG9uc2VEZWxheSB9ID0ge30pIHtcbiAgICAgICAgdGhpcy50YXJnZXRQcm90b2NvbCA9IHRhcmdldFByb3RvY29sIHx8ICdodHRwJztcbiAgICAgICAgdGhpcy50YXJnZXRIb3N0ICAgICA9IHRhcmdldEhvc3Q7XG4gICAgICAgIHRoaXMudGFyZ2V0UG9ydCAgICAgPSB0YXJnZXRQb3J0O1xuICAgICAgICB0aGlzLnByb3h5UG9ydCAgICAgID0gcHJveHlQb3J0IHx8IDA7XG4gICAgICAgIHRoaXMucmVzcG9uc2VEZWxheSAgPSByZXNwb25zZURlbGF5IHx8IDA7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcigoLi4uYXJncykgPT4gdGhpcy5fb25Ccm93c2VyUmVxdWVzdCguLi5hcmdzKSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBzb2NrZXQgPT4gc29ja2V0LnVucmVmKCkpO1xuICAgIH1cblxuICAgIF9vbkJyb3dzZXJSZXF1ZXN0IChyZXEsIHJlcykge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlcXVlc3RVcmwgPSBwYXJzZVVybChyZXEudXJsKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uVXJsICAgPSB0aGlzLnRhcmdldFByb3RvY29sICsgJy8vJyArIHRoaXMudGFyZ2V0SG9zdCArICc6JyArIHRoaXMudGFyZ2V0UG9ydCArIHBhcnNlZFJlcXVlc3RVcmwucGF0aDtcblxuICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSAzMDI7XG5cbiAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ2xvY2F0aW9uJywgZGVzdGluYXRpb25VcmwpO1xuICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICB9LCB0aGlzLnJlc3BvbnNlRGVsYXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQgKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXIubGlzdGVuKHRoaXMucHJveHlQb3J0LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3h5UG9ydCA9IHRoaXMuc2VydmVyLmFkZHJlc3MoKS5wb3J0O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGlzcG9zZSAoKSB7XG4gICAgICAgIHRoaXMuc2VydmVyLmNsb3NlKCk7XG4gICAgfVxufTtcbiJdfQ==

@@ -56,7 +56,7 @@ "use strict";

},
_getBrowserProxy(host, port) {
_getBrowserProxy(protocol, host, port) {
this.browserProxyPromise = this.browserProxyPromise
.then(async (browserProxy) => {
if (!browserProxy) {
browserProxy = new browser_proxy_1.default(host, port, { responseDelay: ANDROID_PROXY_RESPONSE_DELAY });
browserProxy = new browser_proxy_1.default(host, port, { targetProtocol: protocol, responseDelay: ANDROID_PROXY_RESPONSE_DELAY });
await browserProxy.init();

@@ -196,3 +196,3 @@ }

const parsedPageUrl = (0, url_1.parse)(pageUrl);
const browserProxy = await this._getBrowserProxy(parsedPageUrl.hostname, parsedPageUrl.port);
const browserProxy = await this._getBrowserProxy(parsedPageUrl.protocol, parsedPageUrl.hostname, parsedPageUrl.port);
pageUrl = 'http://' + browserProxy.targetHost + ':' + browserProxy.proxyPort + parsedPageUrl.path;

@@ -248,2 +248,2 @@ }

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBd0M7QUFDeEMsb0RBQTZCO0FBQzdCLCtCQUFpQztBQUNqQyxnRkFBcUQ7QUFDckQsbUNBQWdDO0FBQ2hDLDREQUFnRDtBQUNoRCx1RUFBcUQ7QUFDckQsbUVBQWtEO0FBQ2xELG9FQUEyQztBQUMzQyw4RUFBbUQ7QUFDbkQsc0RBQXlCO0FBRXpCLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBRXpDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBQSx5QkFBWSxFQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDMUUsTUFBTSxjQUFjLEdBQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLElBQUksQ0FBQyxJQUFBLHlCQUFZLEVBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUV0SCxTQUFTLFlBQVk7SUFDakIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBRSxDQUFDLENBQUM7SUFFbEMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQy9CLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLE9BQU8sVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxHQUFHO0lBQ2IsNEJBQTRCO0lBQzVCLGNBQWMsRUFBRSxJQUFJO0lBRXBCLE9BQU8sRUFBRSxJQUFJO0lBRWIsZ0JBQWdCLEVBQUssZ0JBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzFDLG1CQUFtQixFQUFFLGdCQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUUxQyxPQUFPLEVBQVEsRUFBRTtJQUNqQixhQUFhLEVBQUUsRUFBRTtJQUNqQixZQUFZLEVBQUcsRUFBRTtJQUVqQixnQkFBZ0I7UUFDWixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjthQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFDLFNBQVMsRUFBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osU0FBUyxHQUFHLElBQUksbUJBQXFCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7Z0JBRTlFLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQzVCO1lBRUQsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFUCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7YUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBQyxTQUFTLEVBQUMsRUFBRTtZQUNwQixJQUFJLFNBQVM7Z0JBQ1QsTUFBTSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFOUIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFUCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUUsSUFBSSxFQUFFLElBQUk7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUI7YUFDOUMsSUFBSSxDQUFDLEtBQUssRUFBQyxZQUFZLEVBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNmLFlBQVksR0FBRyxJQUFJLHVCQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLGFBQWEsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQUM7Z0JBRTdGLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzdCO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFFUCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2FBQzlDLElBQUksQ0FBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLEVBQUU7WUFDdkIsSUFBSSxZQUFZO2dCQUNaLE1BQU0sWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWpDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRVAsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxZQUFZLENBQUUsWUFBWTtRQUN0QixJQUFJLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFBLDhCQUFpQixFQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5GLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFeEMsSUFBSSxXQUFXLEtBQUssbUJBQW1CO1lBQ25DLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFdkIsT0FBTztZQUNILElBQUksRUFBTSxXQUFXO1lBQ3JCLE9BQU8sRUFBRyxjQUFjLENBQUMsV0FBVyxFQUFFO1lBQ3RDLFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFO1NBQ25DLENBQUM7SUFDTixDQUFDO0lBRUQsMEJBQTBCLENBQUUsV0FBVztRQUNuQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELCtCQUErQjtRQUMzQixrRUFBa0U7UUFDbEUsNEZBQTRGO1FBRTVGLE9BQU87WUFDSCxPQUFPLEVBQXdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO1lBQzdHLFNBQVMsRUFBc0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztZQUN2RSxZQUFZLEVBQW1CLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUM7WUFDN0UsTUFBTSxFQUF5QixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDO1lBQ3hFLG9CQUFvQixFQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7WUFDaEUsc0JBQXNCLEVBQVMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztZQUNsRSwwQkFBMEIsRUFBSyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO1lBQ3ZFLG9CQUFvQixFQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7WUFDaEUsdUJBQXVCLEVBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQztZQUNuRSwwQkFBMEIsRUFBSyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO1lBQ3ZFLDRCQUE0QixFQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUM7WUFDekUsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQztZQUMxRSxnQkFBZ0IsRUFBZSxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDO1NBQzlFLENBQUM7SUFDTixDQUFDO0lBRUQsMEJBQTBCO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLENBQUM7UUFFckUsSUFBSSxDQUFDLFVBQVU7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUVkLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCwwQkFBMEI7UUFDdEIsTUFBTSwyQkFBMkIsR0FBRyxJQUFBLGVBQU0sRUFBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTlHLHVDQUFZLElBQUksQ0FBQywwQkFBMEIsRUFBRSxHQUFLLDJCQUEyQixFQUFHO0lBQ3BGLENBQUM7SUFFRCxtQkFBbUIsQ0FBRSxLQUFLO1FBQ3RCLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1gsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekYsSUFBSSxpQkFBaUIsR0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFFdkYsSUFBSSxxQkFBcUIsR0FBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xILElBQUksc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RILElBQUksbUJBQW1CLEdBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxRQUFRO2dCQUNwRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBRXpGLElBQUksWUFBWSxHQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDO1lBQzVDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDO1lBRTdDLElBQUkscUJBQXFCLEdBQUcsa0JBQWtCO2dCQUNsQixDQUFDLHFCQUFxQixJQUFJLFlBQVksQ0FBQztnQkFDdkMsQ0FBQyxtQkFBbUIsSUFBSSxhQUFhLENBQUMsQ0FBQztZQUVuRSxJQUFJLG9CQUFvQixHQUFHLGlCQUFpQjtnQkFDakIsQ0FBQyxzQkFBc0IsSUFBSSxZQUFZLENBQUMsQ0FBQztZQUVwRSxPQUFPLHFCQUFxQixJQUFJLG9CQUFvQixDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDeEQsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRXJELE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLG9CQUFvQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYTthQUNqQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDUixJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxJQUFJLElBQUksR0FBUSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdELElBQUksT0FBTyxHQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6RSxJQUFJLFFBQVEsR0FBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFdkUsT0FBTyxHQUFHLElBQUksSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCwwQkFBMEIsQ0FBRSxZQUFZO1FBQ3BDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM3RixZQUFZLENBQUMsYUFBYSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RixDQUFDO0lBRUQsS0FBSyxDQUFDLDJCQUEyQixDQUFFLFlBQVk7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUM7WUFDekMsT0FBTztRQUVYLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFVLElBQUksY0FBYyxFQUFFLENBQUM7UUFFNUMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUVoQyxPQUFPLENBQUMsYUFBYSxDQUFDLHdDQUF3QyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDaEYsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFNUIsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxJQUFBLGdCQUFTLEVBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUUsT0FBTztRQUNoQyxPQUFPLElBQUksZ0JBQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxFQUFFLGNBQWM7Z0JBQ3pDLElBQUksR0FBRztvQkFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7O29CQUVaLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLFdBQVcsQ0FBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVc7UUFDdkMsTUFBTSxZQUFZLG1DQUNYLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsR0FDNUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQ3ZDLENBQUM7UUFFRixZQUFZLENBQUMsS0FBSyxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRXRDLDBEQUEwRDtRQUMxRCxZQUFZLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUM7UUFFekUsSUFBSSxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRTtZQUNyRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRWhELFlBQVksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDO1NBQ2xGO1FBRUQsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsRUFBRTtZQUM3QyxNQUFNLGFBQWEsR0FBRyxJQUFBLFdBQVEsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxNQUFNLFlBQVksR0FBSSxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU5RixPQUFPLEdBQUcsU0FBUyxHQUFHLFlBQVksQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztTQUNyRztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSTtZQUNsQixZQUFZLENBQUMsSUFBSSxHQUFHLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztRQUVsRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQzlCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVsRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQy9CLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXpELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUUsRUFBRTtRQUNsQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsaUJBQWlCO0lBQ2pCLEtBQUssQ0FBQyxJQUFJO1FBQ04sSUFBSSxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxrQkFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLG9CQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNULE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBR0QseUJBQXlCO0lBQ3pCLEtBQUssQ0FBQyxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFFLFdBQVc7UUFDakMsT0FBTyxJQUFBLDhCQUFpQixFQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVILENBQUM7SUFHRCxnQkFBZ0I7SUFDaEIsS0FBSyxDQUFDLFlBQVksQ0FBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYTtRQUM5RCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBRSxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUdELEtBQUssQ0FBQyxjQUFjLENBQUUsRUFBRSxFQUFFLGNBQWM7UUFDcEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPO1FBQ3pDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFFLEVBQUU7UUFDZixPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVVybCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdwaW5raWUnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgcGFyc2VDYXBhYmlsaXRpZXMgZnJvbSAnZGVzaXJlZC1jYXBhYmlsaXRpZXMnO1xuaW1wb3J0IHsgcGlja0J5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCcm93c2Vyc3RhY2tDb25uZWN0b3IgZnJvbSAnLi9jb25uZWN0b3InO1xuaW1wb3J0IEpTVGVzdGluZ0JhY2tlbmQgZnJvbSAnLi9iYWNrZW5kcy9qcy10ZXN0aW5nJztcbmltcG9ydCBBdXRvbWF0ZUJhY2tlbmQgZnJvbSAnLi9iYWNrZW5kcy9hdXRvbWF0ZSc7XG5pbXBvcnQgQnJvd3NlclByb3h5IGZyb20gJy4vYnJvd3Nlci1wcm94eSc7XG5pbXBvcnQgaXNFbnZWYXJUcnVlIGZyb20gJy4vdXRpbHMvaXMtZW52LXZhci10cnVlJztcbmltcG9ydCBkYiBmcm9tICdtaW1lLWRiJztcblxuY29uc3QgQU5EUk9JRF9QUk9YWV9SRVNQT05TRV9ERUxBWSA9IDUwMDtcblxuY29uc3QgaXNBdXRvbWF0ZUVuYWJsZWQgPSAoKSA9PiBpc0VudlZhclRydWUoJ0JST1dTRVJTVEFDS19VU0VfQVVUT01BVEUnKTtcbmNvbnN0IGlzTG9jYWxFbmFibGVkICAgID0gKCkgPT4gISFwcm9jZXNzLmVudi5CUk9XU0VSU1RBQ0tfTE9DQUxfSURFTlRJRklFUiB8fCAhaXNFbnZWYXJUcnVlKCdCUk9XU0VSU1RBQ0tfTk9fTE9DQUwnKTtcblxuZnVuY3Rpb24gZ2V0TWltZVR5cGVzICgpIHtcbiAgICBjb25zdCBtaW1lVHlwZXMgPSBPYmplY3Qua2V5cyhkYik7XG5cbiAgICByZXR1cm4gbWltZVR5cGVzLmZpbHRlcihtaW1lVHlwZSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZXh0ZW5zaW9ucyB9ID0gZGJbbWltZVR5cGVdO1xuXG4gICAgICAgIHJldHVybiBleHRlbnNpb25zICYmIGV4dGVuc2lvbnMubGVuZ3RoO1xuICAgIH0pLmpvaW4oJywnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gTXVsdGlwbGUgYnJvd3NlcnMgc3VwcG9ydFxuICAgIGlzTXVsdGlCcm93c2VyOiB0cnVlLFxuXG4gICAgYmFja2VuZDogbnVsbCxcblxuICAgIGNvbm5lY3RvclByb21pc2U6ICAgIFByb21pc2UucmVzb2x2ZShudWxsKSxcbiAgICBicm93c2VyUHJveHlQcm9taXNlOiBQcm9taXNlLnJlc29sdmUobnVsbCksXG5cbiAgICB3b3JrZXJzOiAgICAgICB7fSxcbiAgICBwbGF0Zm9ybXNJbmZvOiBbXSxcbiAgICBicm93c2VyTmFtZXM6ICBbXSxcblxuICAgIF9jcmVhdGVDb25uZWN0b3IgKCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RvclByb21pc2UgPSB0aGlzLmNvbm5lY3RvclByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIGNvbm5lY3RvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25uZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yID0gbmV3IEJyb3dzZXJzdGFja0Nvbm5lY3Rvcihwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX0FDQ0VTU19LRVknXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29ubmVjdG9yLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0b3I7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3JQcm9taXNlO1xuICAgIH0sXG5cbiAgICBfZGlzcG9zZUNvbm5lY3RvciAoKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdG9yUHJvbWlzZSA9IHRoaXMuY29ubmVjdG9yUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgY29ubmVjdG9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29ubmVjdG9yKVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0b3IuZGVzdHJveSgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3JQcm9taXNlO1xuICAgIH0sXG5cbiAgICBfZ2V0QnJvd3NlclByb3h5IChob3N0LCBwb3J0KSB7XG4gICAgICAgIHRoaXMuYnJvd3NlclByb3h5UHJvbWlzZSA9IHRoaXMuYnJvd3NlclByb3h5UHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgYnJvd3NlclByb3h5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWJyb3dzZXJQcm94eSkge1xuICAgICAgICAgICAgICAgICAgICBicm93c2VyUHJveHkgPSBuZXcgQnJvd3NlclByb3h5KGhvc3QsIHBvcnQsIHsgcmVzcG9uc2VEZWxheTogQU5EUk9JRF9QUk9YWV9SRVNQT05TRV9ERUxBWSB9KTtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBicm93c2VyUHJveHkuaW5pdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBicm93c2VyUHJveHk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyUHJveHlQcm9taXNlO1xuICAgIH0sXG5cbiAgICBfZGlzcG9zZUJyb3dzZXJQcm94eSAoKSB7XG4gICAgICAgIHRoaXMuYnJvd3NlclByb3h5UHJvbWlzZSA9IHRoaXMuYnJvd3NlclByb3h5UHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgYnJvd3NlclByb3h5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYnJvd3NlclByb3h5KVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBicm93c2VyUHJveHkuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyUHJveHlQcm9taXNlO1xuICAgIH0sXG5cbiAgICBhc3luYyBfZ2V0RGV2aWNlTGlzdCAoKSB7XG4gICAgICAgIHRoaXMucGxhdGZvcm1zSW5mbyA9IGF3YWl0IHRoaXMuYmFja2VuZC5nZXRCcm93c2Vyc0xpc3QoKTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZVF1ZXJ5IChjYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgdmFyIHsgYnJvd3Nlck5hbWUsIGJyb3dzZXJWZXJzaW9uLCBwbGF0Zm9ybSB9ID0gcGFyc2VDYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzKVswXTtcblxuICAgICAgICBicm93c2VyTmFtZSA9IGJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKGJyb3dzZXJOYW1lID09PSAnaW50ZXJuZXQgZXhwbG9yZXInKVxuICAgICAgICAgICAgYnJvd3Nlck5hbWUgPSAnaWUnO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiAgICAgYnJvd3Nlck5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiAgYnJvd3NlclZlcnNpb24udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIF9nZW5lcmF0ZUJhc2ljQ2FwYWJpbGl0aWVzIChicm93c2VyTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyUGxhdGZvcm1JbmZvKHRoaXMuX2NyZWF0ZVF1ZXJ5KGJyb3dzZXJOYW1lKSlbMF07XG4gICAgfSxcblxuICAgIF9nZXRDYXBhYmlsaXRpZXNGcm9tRW52aXJvbm1lbnQgKCkge1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIG1hcHMgZW52IHZhcnMgdG8gYnJvd3NlcnN0YWNrIGNhcGFiaWxpdGllcy5cbiAgICAgICAgLy8gRm9yIHRoZSBmdWxsIGxpc3Qgb2YgY2FwYWJpbGl0aWVzLCBzZWUgaHR0cHM6Ly93d3cuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9jYXBhYmlsaXRpZXNcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2J1aWxkJzogICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfQlVJTERfSUQnXSB8fCBwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX0JVSUxEX05BTUUnXSxcbiAgICAgICAgICAgICdwcm9qZWN0JzogICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX1BST0pFQ1RfTkFNRSddLFxuICAgICAgICAgICAgJ3Jlc29sdXRpb24nOiAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfRElTUExBWV9SRVNPTFVUSU9OJ10sXG4gICAgICAgICAgICAnbmFtZSc6ICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19URVNUX1JVTl9OQU1FJ10sXG4gICAgICAgICAgICAnYnJvd3NlcnN0YWNrLmRlYnVnJzogICAgICAgICAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19ERUJVRyddLFxuICAgICAgICAgICAgJ2Jyb3dzZXJzdGFjay5jb25zb2xlJzogICAgICAgIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfQ09OU09MRSddLFxuICAgICAgICAgICAgJ2Jyb3dzZXJzdGFjay5uZXR3b3JrTG9ncyc6ICAgIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfTkVUV09SS19MT0dTJ10sXG4gICAgICAgICAgICAnYnJvd3NlcnN0YWNrLnZpZGVvJzogICAgICAgICAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19WSURFTyddLFxuICAgICAgICAgICAgJ2Jyb3dzZXJzdGFjay50aW1lem9uZSc6ICAgICAgIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfVElNRVpPTkUnXSxcbiAgICAgICAgICAgICdicm93c2Vyc3RhY2suZ2VvTG9jYXRpb24nOiAgICBwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX0dFT19MT0NBVElPTiddLFxuICAgICAgICAgICAgJ2Jyb3dzZXJzdGFjay5jdXN0b21OZXR3b3JrJzogIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfQ1VTVE9NX05FVFdPUksnXSxcbiAgICAgICAgICAgICdicm93c2Vyc3RhY2submV0d29ya1Byb2ZpbGUnOiBwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX05FVFdPUktfUFJPRklMRSddLFxuICAgICAgICAgICAgJ2FjY2VwdFNzbENlcnRzJzogICAgICAgICAgICAgIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfQUNDRVBUX1NTTF9DRVJUUyddXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIF9nZXRDYXBhYmlsaXRpZXNGcm9tQ29uZmlnICgpIHtcbiAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52LkJST1dTRVJTVEFDS19DQVBBQklMSVRJRVNfQ09ORklHX1BBVEg7XG5cbiAgICAgICAgaWYgKCFjb25maWdQYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuXG4gICAgICAgIHJldHVybiByZXF1aXJlKGNvbmZpZ1BhdGgpO1xuICAgIH0sXG5cbiAgICBfZ2V0QWRkaXRpb25hbENhcGFiaWxpdGllcyAoKSB7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllc0Zyb21FbnZpcm9ubWVudCA9IHBpY2tCeSh0aGlzLl9nZXRDYXBhYmlsaXRpZXNGcm9tRW52aXJvbm1lbnQoKSwgdmFsdWUgPT4gdmFsdWUgIT09IHZvaWQgMCk7XG5cbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5fZ2V0Q2FwYWJpbGl0aWVzRnJvbUNvbmZpZygpLCAuLi5jYXBhYmlsaXRpZXNGcm9tRW52aXJvbm1lbnQgfTtcbiAgICB9LFxuXG4gICAgX2ZpbHRlclBsYXRmb3JtSW5mbyAocXVlcnkpIHtcbiAgICAgICAgbGV0IGZpbHRlcmVkUGxhdGZvcm1JbmZvID0gdGhpcy5wbGF0Zm9ybXNJbmZvXG4gICAgICAgICAgICAuZmlsdGVyKGluZm8gPT4ge1xuICAgICAgICAgICAgICAgIHZhciBicm93c2VyTmFtZU1hdGNoZWQgPSBpbmZvWydicm93c2VyJ10gJiYgaW5mb1snYnJvd3NlciddLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5Lm5hbWU7XG4gICAgICAgICAgICAgICAgdmFyIGRldmljZU5hbWVNYXRjaGVkICA9IGluZm9bJ2RldmljZSddICYmIGluZm9bJ2RldmljZSddLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5Lm5hbWU7XG5cbiAgICAgICAgICAgICAgICB2YXIgYnJvd3NlclZlcnNpb25NYXRjaGVkICA9IGluZm9bJ2Jyb3dzZXJfdmVyc2lvbiddICYmIFN0cmluZyhpbmZvWydicm93c2VyX3ZlcnNpb24nXSkgPT09IFN0cmluZyhxdWVyeS52ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICB2YXIgcGxhdGZvcm1WZXJzaW9uTWF0Y2hlZCA9IGluZm9bJ29zX3ZlcnNpb24nXSAmJiBTdHJpbmcoaW5mb1snb3NfdmVyc2lvbiddKS50b0xvd2VyQ2FzZSgpID09PSBTdHJpbmcocXVlcnkudmVyc2lvbik7XG4gICAgICAgICAgICAgICAgdmFyIHBsYXRmb3JtTmFtZU1hdGNoZWQgICAgPSBpbmZvWydvcyddLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5LnBsYXRmb3JtIHx8XG4gICAgICAgICAgICAgICAgICAgIGAke2luZm9bJ29zJ10udG9Mb3dlckNhc2UoKX0gJHtpbmZvWydvc192ZXJzaW9uJ10udG9Mb3dlckNhc2UoKX1gID09PSBxdWVyeS5wbGF0Zm9ybTtcblxuICAgICAgICAgICAgICAgIHZhciBpc0FueVZlcnNpb24gID0gcXVlcnkudmVyc2lvbiA9PT0gJ2FueSc7XG4gICAgICAgICAgICAgICAgdmFyIGlzQW55UGxhdGZvcm0gPSBxdWVyeS5wbGF0Zm9ybSA9PT0gJ2FueSc7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVza3RvcEJyb3dzZXJNYXRjaGVkID0gYnJvd3Nlck5hbWVNYXRjaGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChicm93c2VyVmVyc2lvbk1hdGNoZWQgfHwgaXNBbnlWZXJzaW9uKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGxhdGZvcm1OYW1lTWF0Y2hlZCB8fCBpc0FueVBsYXRmb3JtKTtcblxuICAgICAgICAgICAgICAgIHZhciBtb2JpbGVCcm93c2VyTWF0Y2hlZCA9IGRldmljZU5hbWVNYXRjaGVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBsYXRmb3JtVmVyc2lvbk1hdGNoZWQgfHwgaXNBbnlWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkZXNrdG9wQnJvd3Nlck1hdGNoZWQgfHwgbW9iaWxlQnJvd3Nlck1hdGNoZWQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZmlsdGVyZWRQbGF0Zm9ybUluZm8ubGVuZ3RoICYmIHF1ZXJ5LnZlcnNpb24gPT09ICdhbnknKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFBsYXRmb3JtSW5mbyA9IGZpbHRlcmVkUGxhdGZvcm1JbmZvLmZpbHRlcihpbmZvID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBicm93c2VyVmVyc2lvbiA9IGluZm9bJ2Jyb3dzZXJfdmVyc2lvbiddIHx8ICcnO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICFicm93c2VyVmVyc2lvbi5pbmNsdWRlcygnYmV0YScpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyZWRQbGF0Zm9ybUluZm87XG4gICAgfSxcblxuICAgIF9nZW5lcmF0ZUJyb3dzZXJOYW1lcyAoKSB7XG4gICAgICAgIHRoaXMuYnJvd3Nlck5hbWVzID0gdGhpcy5wbGF0Zm9ybXNJbmZvXG4gICAgICAgICAgICAubWFwKGluZm8gPT4ge1xuICAgICAgICAgICAgICAgIHZhciBpc0Rlc2t0b3AgPSAhaW5mb1snZGV2aWNlJ107XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgICAgICA9IGlzRGVza3RvcCA/IGluZm9bJ2Jyb3dzZXInXSA6IGluZm9bJ2RldmljZSddO1xuICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uICAgPSBpc0Rlc2t0b3AgPyBpbmZvWydicm93c2VyX3ZlcnNpb24nXSA6IGluZm9bJ29zX3ZlcnNpb24nXTtcbiAgICAgICAgICAgICAgICB2YXIgcGxhdGZvcm0gID0gaXNEZXNrdG9wID8gYCR7aW5mb1snb3MnXX0gJHtpbmZvWydvc192ZXJzaW9uJ119YCA6ICcnO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9QCR7dmVyc2lvbn0ke3BsYXRmb3JtID8gJzonICsgcGxhdGZvcm0gOiAnJ31gO1xuICAgICAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9wcmVwYXJlQ2hyb21lQ2FwYWJpbGl0aWVzIChjYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfQ0hST01FX0FSR1MnXSAmJiBwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX0NIUk9NRV9BUkdTJ10ubGVuZ3RoID4gMClcbiAgICAgICAgICAgIGNhcGFiaWxpdGllcy5jaHJvbWVPcHRpb25zID0geyBhcmdzOiBbcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19DSFJPTUVfQVJHUyddXSB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBfcHJlcGFyZUZpcmVmb3hDYXBhYmlsaXRpZXMgKGNhcGFiaWxpdGllcykge1xuICAgICAgICBpZiAoIXByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfVVNFX0FVVE9NQVRFJ10pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgRmlyZWZveFByb2ZpbGUgPSByZXF1aXJlKCdmaXJlZm94LXByb2ZpbGUnKTtcbiAgICAgICAgY29uc3QgcHJvZmlsZSAgICAgICAgPSBuZXcgRmlyZWZveFByb2ZpbGUoKTtcblxuICAgICAgICBwcm9maWxlLmRlZmF1bHRQcmVmZXJlbmNlcyA9IHt9O1xuXG4gICAgICAgIHByb2ZpbGUuc2V0UHJlZmVyZW5jZSgnYnJvd3Nlci5oZWxwZXJBcHBzLm5ldmVyQXNrLnNhdmVUb0Rpc2snLCBnZXRNaW1lVHlwZXMoKSk7XG4gICAgICAgIHByb2ZpbGUudXBkYXRlUHJlZmVyZW5jZXMoKTtcblxuICAgICAgICBjYXBhYmlsaXRpZXNbJ2ZpcmVmb3hfcHJvZmlsZSddID0gYXdhaXQgcHJvbWlzaWZ5KHByb2ZpbGUuZW5jb2RlZCkuYmluZChwcm9maWxlKSgpO1xuICAgIH0sXG5cbiAgICBhc3luYyBfZW5jb2RlRmlyZWZveFByb2ZpbGUgKHByb2ZpbGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHByb2ZpbGUuZW5jb2RlZChmdW5jdGlvbiAoZXJyLCBlbmNvZGVkUHJvZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlbmNvZGVkUHJvZmlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIFJlcXVpcmVkIC0gbXVzdCBiZSBpbXBsZW1lbnRlZFxuICAgIC8vIEJyb3dzZXIgY29udHJvbFxuICAgIGFzeW5jIG9wZW5Ccm93c2VyIChpZCwgcGFnZVVybCwgYnJvd3Nlck5hbWUpIHtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0aWVzID0ge1xuICAgICAgICAgICAgLi4udGhpcy5fZ2VuZXJhdGVCYXNpY0NhcGFiaWxpdGllcyhicm93c2VyTmFtZSksXG4gICAgICAgICAgICAuLi50aGlzLl9nZXRBZGRpdGlvbmFsQ2FwYWJpbGl0aWVzKClcbiAgICAgICAgfTtcblxuICAgICAgICBjYXBhYmlsaXRpZXMubG9jYWwgPSBpc0xvY2FsRW5hYmxlZCgpO1xuXG4gICAgICAgIC8vIEdpdmUgcHJlZmVyZW5jZSB0byB0aGUgYWxyZWFkeSBydW5uaW5nIGxvY2FsIGlkZW50aWZpZXJcbiAgICAgICAgY2FwYWJpbGl0aWVzLmxvY2FsSWRlbnRpZmllciA9IHByb2Nlc3MuZW52LkJST1dTRVJTVEFDS19MT0NBTF9JREVOVElGSUVSO1xuXG4gICAgICAgIGlmIChjYXBhYmlsaXRpZXMubG9jYWwgJiYgIWNhcGFiaWxpdGllcy5sb2NhbElkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RvciA9IGF3YWl0IHRoaXMuX2NyZWF0ZUNvbm5lY3RvcigpO1xuXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXMubG9jYWxJZGVudGlmaWVyID0gY29ubmVjdG9yLmNvbm5lY3Rvckluc3RhbmNlLmxvY2FsSWRlbnRpZmllckZsYWc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FwYWJpbGl0aWVzLm9zLnRvTG93ZXJDYXNlKCkgPT09ICdhbmRyb2lkJykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkUGFnZVVybCA9IHBhcnNlVXJsKHBhZ2VVcmwpO1xuICAgICAgICAgICAgY29uc3QgYnJvd3NlclByb3h5ICA9IGF3YWl0IHRoaXMuX2dldEJyb3dzZXJQcm94eShwYXJzZWRQYWdlVXJsLmhvc3RuYW1lLCBwYXJzZWRQYWdlVXJsLnBvcnQpO1xuXG4gICAgICAgICAgICBwYWdlVXJsID0gJ2h0dHA6Ly8nICsgYnJvd3NlclByb3h5LnRhcmdldEhvc3QgKyAnOicgKyBicm93c2VyUHJveHkucHJveHlQb3J0ICsgcGFyc2VkUGFnZVVybC5wYXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMubmFtZSlcbiAgICAgICAgICAgIGNhcGFiaWxpdGllcy5uYW1lID0gYFRlc3RDYWZlIHRlc3QgcnVuICR7aWR9YDtcblxuICAgICAgICBpZiAoYnJvd3Nlck5hbWUuaW5jbHVkZXMoJ2Nocm9tZScpKVxuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZUNocm9tZUNhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpO1xuXG4gICAgICAgIGlmIChicm93c2VyTmFtZS5pbmNsdWRlcygnZmlyZWZveCcpKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJlcGFyZUZpcmVmb3hDYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmJhY2tlbmQub3BlbkJyb3dzZXIoaWQsIHBhZ2VVcmwsIGNhcGFiaWxpdGllcyk7XG5cbiAgICAgICAgdGhpcy5zZXRVc2VyQWdlbnRNZXRhSW5mbyhpZCwgdGhpcy5iYWNrZW5kLmdldFNlc3Npb25VcmwoaWQpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2VCcm93c2VyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmJhY2tlbmQuY2xvc2VCcm93c2VyKGlkKTtcbiAgICB9LFxuXG4gICAgLy8gT3B0aW9uYWwgLSBpbXBsZW1lbnQgbWV0aG9kcyB5b3UgbmVlZCwgcmVtb3ZlIG90aGVyIG1ldGhvZHNcbiAgICAvLyBJbml0aWFsaXphdGlvblxuICAgIGFzeW5jIGluaXQgKCkge1xuICAgICAgICB2YXIgcmVwb3J0V2FybmluZyA9ICguLi5hcmdzKSA9PiB0aGlzLnJlcG9ydFdhcm5pbmcoLi4uYXJncyk7XG5cbiAgICAgICAgdGhpcy5iYWNrZW5kID0gaXNBdXRvbWF0ZUVuYWJsZWQoKSA/IG5ldyBBdXRvbWF0ZUJhY2tlbmQocmVwb3J0V2FybmluZykgOiBuZXcgSlNUZXN0aW5nQmFja2VuZChyZXBvcnRXYXJuaW5nKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9nZXREZXZpY2VMaXN0KCk7XG5cbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVCcm93c2VyTmFtZXMoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGlzcG9zZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VDb25uZWN0b3IoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZUJyb3dzZXJQcm94eSgpO1xuICAgIH0sXG5cblxuICAgIC8vIEJyb3dzZXIgbmFtZXMgaGFuZGxpbmdcbiAgICBhc3luYyBnZXRCcm93c2VyTGlzdCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJOYW1lcztcbiAgICB9LFxuXG4gICAgYXN5bmMgaXNWYWxpZEJyb3dzZXJOYW1lIChicm93c2VyTmFtZSkge1xuICAgICAgICByZXR1cm4gcGFyc2VDYXBhYmlsaXRpZXMoYnJvd3Nlck5hbWUpLmxlbmd0aCA9PT0gMSAmJiAhIXRoaXMuX2ZpbHRlclBsYXRmb3JtSW5mbyh0aGlzLl9jcmVhdGVRdWVyeShicm93c2VyTmFtZSkpLmxlbmd0aDtcbiAgICB9LFxuXG5cbiAgICAvLyBFeHRyYSBtZXRob2RzXG4gICAgYXN5bmMgcmVzaXplV2luZG93IChpZCwgd2lkdGgsIGhlaWdodCwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5yZXNpemVXaW5kb3coaWQsIHdpZHRoLCBoZWlnaHQsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCk7XG4gICAgfSxcblxuICAgIGFzeW5jIG1heGltaXplV2luZG93IChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmJhY2tlbmQubWF4aW1pemVXaW5kb3coaWQpO1xuICAgIH0sXG5cblxuICAgIGFzeW5jIHRha2VTY3JlZW5zaG90IChpZCwgc2NyZWVuc2hvdFBhdGgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5iYWNrZW5kLnRha2VTY3JlZW5zaG90KGlkLCBzY3JlZW5zaG90UGF0aCk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcG9ydEpvYlJlc3VsdCAoaWQsIGpvYlJlc3VsdCwgam9iRGF0YSkge1xuICAgICAgICBhd2FpdCB0aGlzLmJhY2tlbmQucmVwb3J0Sm9iUmVzdWx0KGlkLCBqb2JSZXN1bHQsIGpvYkRhdGEsIHRoaXMuSk9CX1JFU1VMVCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9TSW5mbyAoaWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYmFja2VuZC5nZXRPU0luZm8oaWQpO1xuICAgIH1cbn07XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBd0M7QUFDeEMsb0RBQTZCO0FBQzdCLCtCQUFpQztBQUNqQyxnRkFBcUQ7QUFDckQsbUNBQWdDO0FBQ2hDLDREQUFnRDtBQUNoRCx1RUFBcUQ7QUFDckQsbUVBQWtEO0FBQ2xELG9FQUEyQztBQUMzQyw4RUFBbUQ7QUFDbkQsc0RBQXlCO0FBRXpCLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBRXpDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBQSx5QkFBWSxFQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDMUUsTUFBTSxjQUFjLEdBQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLElBQUksQ0FBQyxJQUFBLHlCQUFZLEVBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUV0SCxTQUFTLFlBQVk7SUFDakIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBRSxDQUFDLENBQUM7SUFFbEMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQy9CLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLE9BQU8sVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxHQUFHO0lBQ2IsNEJBQTRCO0lBQzVCLGNBQWMsRUFBRSxJQUFJO0lBRXBCLE9BQU8sRUFBRSxJQUFJO0lBRWIsZ0JBQWdCLEVBQUssZ0JBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzFDLG1CQUFtQixFQUFFLGdCQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUUxQyxPQUFPLEVBQVEsRUFBRTtJQUNqQixhQUFhLEVBQUUsRUFBRTtJQUNqQixZQUFZLEVBQUcsRUFBRTtJQUVqQixnQkFBZ0I7UUFDWixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjthQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFDLFNBQVMsRUFBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osU0FBUyxHQUFHLElBQUksbUJBQXFCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7Z0JBRTlFLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQzVCO1lBRUQsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFUCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7YUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBQyxTQUFTLEVBQUMsRUFBRTtZQUNwQixJQUFJLFNBQVM7Z0JBQ1QsTUFBTSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFOUIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFUCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2FBQzlDLElBQUksQ0FBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDZixZQUFZLEdBQUcsSUFBSSx1QkFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQUM7Z0JBRXZILE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzdCO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFFUCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2FBQzlDLElBQUksQ0FBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLEVBQUU7WUFDdkIsSUFBSSxZQUFZO2dCQUNaLE1BQU0sWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWpDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRVAsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxZQUFZLENBQUUsWUFBWTtRQUN0QixJQUFJLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFBLDhCQUFpQixFQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5GLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFeEMsSUFBSSxXQUFXLEtBQUssbUJBQW1CO1lBQ25DLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFdkIsT0FBTztZQUNILElBQUksRUFBTSxXQUFXO1lBQ3JCLE9BQU8sRUFBRyxjQUFjLENBQUMsV0FBVyxFQUFFO1lBQ3RDLFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFO1NBQ25DLENBQUM7SUFDTixDQUFDO0lBRUQsMEJBQTBCLENBQUUsV0FBVztRQUNuQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELCtCQUErQjtRQUMzQixrRUFBa0U7UUFDbEUsNEZBQTRGO1FBRTVGLE9BQU87WUFDSCxPQUFPLEVBQXdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO1lBQzdHLFNBQVMsRUFBc0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztZQUN2RSxZQUFZLEVBQW1CLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUM7WUFDN0UsTUFBTSxFQUF5QixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDO1lBQ3hFLG9CQUFvQixFQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7WUFDaEUsc0JBQXNCLEVBQVMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztZQUNsRSwwQkFBMEIsRUFBSyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO1lBQ3ZFLG9CQUFvQixFQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7WUFDaEUsdUJBQXVCLEVBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQztZQUNuRSwwQkFBMEIsRUFBSyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO1lBQ3ZFLDRCQUE0QixFQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUM7WUFDekUsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQztZQUMxRSxnQkFBZ0IsRUFBZSxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDO1NBQzlFLENBQUM7SUFDTixDQUFDO0lBRUQsMEJBQTBCO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLENBQUM7UUFFckUsSUFBSSxDQUFDLFVBQVU7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUVkLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCwwQkFBMEI7UUFDdEIsTUFBTSwyQkFBMkIsR0FBRyxJQUFBLGVBQU0sRUFBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTlHLHVDQUFZLElBQUksQ0FBQywwQkFBMEIsRUFBRSxHQUFLLDJCQUEyQixFQUFHO0lBQ3BGLENBQUM7SUFFRCxtQkFBbUIsQ0FBRSxLQUFLO1FBQ3RCLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1gsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekYsSUFBSSxpQkFBaUIsR0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFFdkYsSUFBSSxxQkFBcUIsR0FBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xILElBQUksc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RILElBQUksbUJBQW1CLEdBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxRQUFRO2dCQUNwRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBRXpGLElBQUksWUFBWSxHQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDO1lBQzVDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDO1lBRTdDLElBQUkscUJBQXFCLEdBQUcsa0JBQWtCO2dCQUNsQixDQUFDLHFCQUFxQixJQUFJLFlBQVksQ0FBQztnQkFDdkMsQ0FBQyxtQkFBbUIsSUFBSSxhQUFhLENBQUMsQ0FBQztZQUVuRSxJQUFJLG9CQUFvQixHQUFHLGlCQUFpQjtnQkFDakIsQ0FBQyxzQkFBc0IsSUFBSSxZQUFZLENBQUMsQ0FBQztZQUVwRSxPQUFPLHFCQUFxQixJQUFJLG9CQUFvQixDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDeEQsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRXJELE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLG9CQUFvQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYTthQUNqQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDUixJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxJQUFJLElBQUksR0FBUSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdELElBQUksT0FBTyxHQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6RSxJQUFJLFFBQVEsR0FBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFdkUsT0FBTyxHQUFHLElBQUksSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCwwQkFBMEIsQ0FBRSxZQUFZO1FBQ3BDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM3RixZQUFZLENBQUMsYUFBYSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RixDQUFDO0lBRUQsS0FBSyxDQUFDLDJCQUEyQixDQUFFLFlBQVk7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUM7WUFDekMsT0FBTztRQUVYLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFVLElBQUksY0FBYyxFQUFFLENBQUM7UUFFNUMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUVoQyxPQUFPLENBQUMsYUFBYSxDQUFDLHdDQUF3QyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDaEYsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFNUIsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxJQUFBLGdCQUFTLEVBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUUsT0FBTztRQUNoQyxPQUFPLElBQUksZ0JBQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxFQUFFLGNBQWM7Z0JBQ3pDLElBQUksR0FBRztvQkFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7O29CQUVaLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLFdBQVcsQ0FBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVc7UUFDdkMsTUFBTSxZQUFZLG1DQUNYLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsR0FDNUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQ3ZDLENBQUM7UUFFRixZQUFZLENBQUMsS0FBSyxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRXRDLDBEQUEwRDtRQUMxRCxZQUFZLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUM7UUFFekUsSUFBSSxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRTtZQUNyRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRWhELFlBQVksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDO1NBQ2xGO1FBRUQsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsRUFBRTtZQUM3QyxNQUFNLGFBQWEsR0FBRyxJQUFBLFdBQVEsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxNQUFNLFlBQVksR0FBSSxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXRILE9BQU8sR0FBRyxTQUFTLEdBQUcsWUFBWSxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1NBQ3JHO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJO1lBQ2xCLFlBQVksQ0FBQyxJQUFJLEdBQUcscUJBQXFCLEVBQUUsRUFBRSxDQUFDO1FBRWxELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDOUIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDL0IsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFekQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBRSxFQUFFO1FBQ2xCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxpQkFBaUI7SUFDakIsS0FBSyxDQUFDLElBQUk7UUFDTixJQUFJLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksb0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFHRCx5QkFBeUI7SUFDekIsS0FBSyxDQUFDLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUUsV0FBVztRQUNqQyxPQUFPLElBQUEsOEJBQWlCLEVBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUgsQ0FBQztJQUdELGdCQUFnQjtJQUNoQixLQUFLLENBQUMsWUFBWSxDQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhO1FBQzlELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFFLEVBQUU7UUFDcEIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBR0QsS0FBSyxDQUFDLGNBQWMsQ0FBRSxFQUFFLEVBQUUsY0FBYztRQUNwQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU87UUFDekMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUUsRUFBRTtRQUNmLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlIGFzIHBhcnNlVXJsIH0gZnJvbSAndXJsJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ3BpbmtpZSc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcbmltcG9ydCBwYXJzZUNhcGFiaWxpdGllcyBmcm9tICdkZXNpcmVkLWNhcGFiaWxpdGllcyc7XG5pbXBvcnQgeyBwaWNrQnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEJyb3dzZXJzdGFja0Nvbm5lY3RvciBmcm9tICcuL2Nvbm5lY3Rvcic7XG5pbXBvcnQgSlNUZXN0aW5nQmFja2VuZCBmcm9tICcuL2JhY2tlbmRzL2pzLXRlc3RpbmcnO1xuaW1wb3J0IEF1dG9tYXRlQmFja2VuZCBmcm9tICcuL2JhY2tlbmRzL2F1dG9tYXRlJztcbmltcG9ydCBCcm93c2VyUHJveHkgZnJvbSAnLi9icm93c2VyLXByb3h5JztcbmltcG9ydCBpc0VudlZhclRydWUgZnJvbSAnLi91dGlscy9pcy1lbnYtdmFyLXRydWUnO1xuaW1wb3J0IGRiIGZyb20gJ21pbWUtZGInO1xuXG5jb25zdCBBTkRST0lEX1BST1hZX1JFU1BPTlNFX0RFTEFZID0gNTAwO1xuXG5jb25zdCBpc0F1dG9tYXRlRW5hYmxlZCA9ICgpID0+IGlzRW52VmFyVHJ1ZSgnQlJPV1NFUlNUQUNLX1VTRV9BVVRPTUFURScpO1xuY29uc3QgaXNMb2NhbEVuYWJsZWQgICAgPSAoKSA9PiAhIXByb2Nlc3MuZW52LkJST1dTRVJTVEFDS19MT0NBTF9JREVOVElGSUVSIHx8ICFpc0VudlZhclRydWUoJ0JST1dTRVJTVEFDS19OT19MT0NBTCcpO1xuXG5mdW5jdGlvbiBnZXRNaW1lVHlwZXMgKCkge1xuICAgIGNvbnN0IG1pbWVUeXBlcyA9IE9iamVjdC5rZXlzKGRiKTtcblxuICAgIHJldHVybiBtaW1lVHlwZXMuZmlsdGVyKG1pbWVUeXBlID0+IHtcbiAgICAgICAgY29uc3QgeyBleHRlbnNpb25zIH0gPSBkYlttaW1lVHlwZV07XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnMgJiYgZXh0ZW5zaW9ucy5sZW5ndGg7XG4gICAgfSkuam9pbignLCcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBNdWx0aXBsZSBicm93c2VycyBzdXBwb3J0XG4gICAgaXNNdWx0aUJyb3dzZXI6IHRydWUsXG5cbiAgICBiYWNrZW5kOiBudWxsLFxuXG4gICAgY29ubmVjdG9yUHJvbWlzZTogICAgUHJvbWlzZS5yZXNvbHZlKG51bGwpLFxuICAgIGJyb3dzZXJQcm94eVByb21pc2U6IFByb21pc2UucmVzb2x2ZShudWxsKSxcblxuICAgIHdvcmtlcnM6ICAgICAgIHt9LFxuICAgIHBsYXRmb3Jtc0luZm86IFtdLFxuICAgIGJyb3dzZXJOYW1lczogIFtdLFxuXG4gICAgX2NyZWF0ZUNvbm5lY3RvciAoKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdG9yUHJvbWlzZSA9IHRoaXMuY29ubmVjdG9yUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgY29ubmVjdG9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbm5lY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IgPSBuZXcgQnJvd3NlcnN0YWNrQ29ubmVjdG9yKHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfQUNDRVNTX0tFWSddKTtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0b3IuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3RvcjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RvclByb21pc2U7XG4gICAgfSxcblxuICAgIF9kaXNwb3NlQ29ubmVjdG9yICgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0b3JQcm9taXNlID0gdGhpcy5jb25uZWN0b3JQcm9taXNlXG4gICAgICAgICAgICAudGhlbihhc3luYyBjb25uZWN0b3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25uZWN0b3IpXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rvci5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RvclByb21pc2U7XG4gICAgfSxcblxuICAgIF9nZXRCcm93c2VyUHJveHkgKHByb3RvY29sLCBob3N0LCBwb3J0KSB7XG4gICAgICAgIHRoaXMuYnJvd3NlclByb3h5UHJvbWlzZSA9IHRoaXMuYnJvd3NlclByb3h5UHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgYnJvd3NlclByb3h5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWJyb3dzZXJQcm94eSkge1xuICAgICAgICAgICAgICAgICAgICBicm93c2VyUHJveHkgPSBuZXcgQnJvd3NlclByb3h5KGhvc3QsIHBvcnQsIHsgdGFyZ2V0UHJvdG9jb2w6IHByb3RvY29sLCByZXNwb25zZURlbGF5OiBBTkRST0lEX1BST1hZX1JFU1BPTlNFX0RFTEFZIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJyb3dzZXJQcm94eS5pbml0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXJQcm94eTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJQcm94eVByb21pc2U7XG4gICAgfSxcblxuICAgIF9kaXNwb3NlQnJvd3NlclByb3h5ICgpIHtcbiAgICAgICAgdGhpcy5icm93c2VyUHJveHlQcm9taXNlID0gdGhpcy5icm93c2VyUHJveHlQcm9taXNlXG4gICAgICAgICAgICAudGhlbihhc3luYyBicm93c2VyUHJveHkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChicm93c2VyUHJveHkpXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJyb3dzZXJQcm94eS5kaXNwb3NlKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJQcm94eVByb21pc2U7XG4gICAgfSxcblxuICAgIGFzeW5jIF9nZXREZXZpY2VMaXN0ICgpIHtcbiAgICAgICAgdGhpcy5wbGF0Zm9ybXNJbmZvID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldEJyb3dzZXJzTGlzdCgpO1xuICAgIH0sXG5cbiAgICBfY3JlYXRlUXVlcnkgKGNhcGFiaWxpdGllcykge1xuICAgICAgICB2YXIgeyBicm93c2VyTmFtZSwgYnJvd3NlclZlcnNpb24sIHBsYXRmb3JtIH0gPSBwYXJzZUNhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpWzBdO1xuXG4gICAgICAgIGJyb3dzZXJOYW1lID0gYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoYnJvd3Nlck5hbWUgPT09ICdpbnRlcm5ldCBleHBsb3JlcicpXG4gICAgICAgICAgICBicm93c2VyTmFtZSA9ICdpZSc7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICAgICBicm93c2VyTmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246ICBicm93c2VyVmVyc2lvbi50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgcGxhdGZvcm06IHBsYXRmb3JtLnRvTG93ZXJDYXNlKClcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgX2dlbmVyYXRlQmFzaWNDYXBhYmlsaXRpZXMgKGJyb3dzZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJQbGF0Zm9ybUluZm8odGhpcy5fY3JlYXRlUXVlcnkoYnJvd3Nlck5hbWUpKVswXTtcbiAgICB9LFxuXG4gICAgX2dldENhcGFiaWxpdGllc0Zyb21FbnZpcm9ubWVudCAoKSB7XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgZnVuY3Rpb24gbWFwcyBlbnYgdmFycyB0byBicm93c2Vyc3RhY2sgY2FwYWJpbGl0aWVzLlxuICAgICAgICAvLyBGb3IgdGhlIGZ1bGwgbGlzdCBvZiBjYXBhYmlsaXRpZXMsIHNlZSBodHRwczovL3d3dy5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL2NhcGFiaWxpdGllc1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYnVpbGQnOiAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19CVUlMRF9JRCddIHx8IHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfQlVJTERfTkFNRSddLFxuICAgICAgICAgICAgJ3Byb2plY3QnOiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfUFJPSkVDVF9OQU1FJ10sXG4gICAgICAgICAgICAncmVzb2x1dGlvbic6ICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19ESVNQTEFZX1JFU09MVVRJT04nXSxcbiAgICAgICAgICAgICduYW1lJzogICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX1RFU1RfUlVOX05BTUUnXSxcbiAgICAgICAgICAgICdicm93c2Vyc3RhY2suZGVidWcnOiAgICAgICAgICBwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX0RFQlVHJ10sXG4gICAgICAgICAgICAnYnJvd3NlcnN0YWNrLmNvbnNvbGUnOiAgICAgICAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19DT05TT0xFJ10sXG4gICAgICAgICAgICAnYnJvd3NlcnN0YWNrLm5ldHdvcmtMb2dzJzogICAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19ORVRXT1JLX0xPR1MnXSxcbiAgICAgICAgICAgICdicm93c2Vyc3RhY2sudmlkZW8nOiAgICAgICAgICBwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX1ZJREVPJ10sXG4gICAgICAgICAgICAnYnJvd3NlcnN0YWNrLnRpbWV6b25lJzogICAgICAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19USU1FWk9ORSddLFxuICAgICAgICAgICAgJ2Jyb3dzZXJzdGFjay5nZW9Mb2NhdGlvbic6ICAgIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfR0VPX0xPQ0FUSU9OJ10sXG4gICAgICAgICAgICAnYnJvd3NlcnN0YWNrLmN1c3RvbU5ldHdvcmsnOiAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19DVVNUT01fTkVUV09SSyddLFxuICAgICAgICAgICAgJ2Jyb3dzZXJzdGFjay5uZXR3b3JrUHJvZmlsZSc6IHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfTkVUV09SS19QUk9GSUxFJ10sXG4gICAgICAgICAgICAnYWNjZXB0U3NsQ2VydHMnOiAgICAgICAgICAgICAgcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19BQ0NFUFRfU1NMX0NFUlRTJ11cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgX2dldENhcGFiaWxpdGllc0Zyb21Db25maWcgKCkge1xuICAgICAgICBjb25zdCBjb25maWdQYXRoID0gcHJvY2Vzcy5lbnYuQlJPV1NFUlNUQUNLX0NBUEFCSUxJVElFU19DT05GSUdfUEFUSDtcblxuICAgICAgICBpZiAoIWNvbmZpZ1BhdGgpXG4gICAgICAgICAgICByZXR1cm4ge307XG5cbiAgICAgICAgcmV0dXJuIHJlcXVpcmUoY29uZmlnUGF0aCk7XG4gICAgfSxcblxuICAgIF9nZXRBZGRpdGlvbmFsQ2FwYWJpbGl0aWVzICgpIHtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0aWVzRnJvbUVudmlyb25tZW50ID0gcGlja0J5KHRoaXMuX2dldENhcGFiaWxpdGllc0Zyb21FbnZpcm9ubWVudCgpLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdm9pZCAwKTtcblxuICAgICAgICByZXR1cm4geyAuLi50aGlzLl9nZXRDYXBhYmlsaXRpZXNGcm9tQ29uZmlnKCksIC4uLmNhcGFiaWxpdGllc0Zyb21FbnZpcm9ubWVudCB9O1xuICAgIH0sXG5cbiAgICBfZmlsdGVyUGxhdGZvcm1JbmZvIChxdWVyeSkge1xuICAgICAgICBsZXQgZmlsdGVyZWRQbGF0Zm9ybUluZm8gPSB0aGlzLnBsYXRmb3Jtc0luZm9cbiAgICAgICAgICAgIC5maWx0ZXIoaW5mbyA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGJyb3dzZXJOYW1lTWF0Y2hlZCA9IGluZm9bJ2Jyb3dzZXInXSAmJiBpbmZvWydicm93c2VyJ10udG9Mb3dlckNhc2UoKSA9PT0gcXVlcnkubmFtZTtcbiAgICAgICAgICAgICAgICB2YXIgZGV2aWNlTmFtZU1hdGNoZWQgID0gaW5mb1snZGV2aWNlJ10gJiYgaW5mb1snZGV2aWNlJ10udG9Mb3dlckNhc2UoKSA9PT0gcXVlcnkubmFtZTtcblxuICAgICAgICAgICAgICAgIHZhciBicm93c2VyVmVyc2lvbk1hdGNoZWQgID0gaW5mb1snYnJvd3Nlcl92ZXJzaW9uJ10gJiYgU3RyaW5nKGluZm9bJ2Jyb3dzZXJfdmVyc2lvbiddKSA9PT0gU3RyaW5nKHF1ZXJ5LnZlcnNpb24pO1xuICAgICAgICAgICAgICAgIHZhciBwbGF0Zm9ybVZlcnNpb25NYXRjaGVkID0gaW5mb1snb3NfdmVyc2lvbiddICYmIFN0cmluZyhpbmZvWydvc192ZXJzaW9uJ10pLnRvTG93ZXJDYXNlKCkgPT09IFN0cmluZyhxdWVyeS52ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICB2YXIgcGxhdGZvcm1OYW1lTWF0Y2hlZCAgICA9IGluZm9bJ29zJ10udG9Mb3dlckNhc2UoKSA9PT0gcXVlcnkucGxhdGZvcm0gfHxcbiAgICAgICAgICAgICAgICAgICAgYCR7aW5mb1snb3MnXS50b0xvd2VyQ2FzZSgpfSAke2luZm9bJ29zX3ZlcnNpb24nXS50b0xvd2VyQ2FzZSgpfWAgPT09IHF1ZXJ5LnBsYXRmb3JtO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzQW55VmVyc2lvbiAgPSBxdWVyeS52ZXJzaW9uID09PSAnYW55JztcbiAgICAgICAgICAgICAgICB2YXIgaXNBbnlQbGF0Zm9ybSA9IHF1ZXJ5LnBsYXRmb3JtID09PSAnYW55JztcblxuICAgICAgICAgICAgICAgIHZhciBkZXNrdG9wQnJvd3Nlck1hdGNoZWQgPSBicm93c2VyTmFtZU1hdGNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJyb3dzZXJWZXJzaW9uTWF0Y2hlZCB8fCBpc0FueVZlcnNpb24pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbGF0Zm9ybU5hbWVNYXRjaGVkIHx8IGlzQW55UGxhdGZvcm0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1vYmlsZUJyb3dzZXJNYXRjaGVkID0gZGV2aWNlTmFtZU1hdGNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGxhdGZvcm1WZXJzaW9uTWF0Y2hlZCB8fCBpc0FueVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2t0b3BCcm93c2VyTWF0Y2hlZCB8fCBtb2JpbGVCcm93c2VyTWF0Y2hlZDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChmaWx0ZXJlZFBsYXRmb3JtSW5mby5sZW5ndGggJiYgcXVlcnkudmVyc2lvbiA9PT0gJ2FueScpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkUGxhdGZvcm1JbmZvID0gZmlsdGVyZWRQbGF0Zm9ybUluZm8uZmlsdGVyKGluZm8gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyb3dzZXJWZXJzaW9uID0gaW5mb1snYnJvd3Nlcl92ZXJzaW9uJ10gfHwgJyc7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gIWJyb3dzZXJWZXJzaW9uLmluY2x1ZGVzKCdiZXRhJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZFBsYXRmb3JtSW5mbztcbiAgICB9LFxuXG4gICAgX2dlbmVyYXRlQnJvd3Nlck5hbWVzICgpIHtcbiAgICAgICAgdGhpcy5icm93c2VyTmFtZXMgPSB0aGlzLnBsYXRmb3Jtc0luZm9cbiAgICAgICAgICAgIC5tYXAoaW5mbyA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGlzRGVza3RvcCA9ICFpbmZvWydkZXZpY2UnXTtcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSAgICAgID0gaXNEZXNrdG9wID8gaW5mb1snYnJvd3NlciddIDogaW5mb1snZGV2aWNlJ107XG4gICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gICA9IGlzRGVza3RvcCA/IGluZm9bJ2Jyb3dzZXJfdmVyc2lvbiddIDogaW5mb1snb3NfdmVyc2lvbiddO1xuICAgICAgICAgICAgICAgIHZhciBwbGF0Zm9ybSAgPSBpc0Rlc2t0b3AgPyBgJHtpbmZvWydvcyddfSAke2luZm9bJ29zX3ZlcnNpb24nXX1gIDogJyc7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX1AJHt2ZXJzaW9ufSR7cGxhdGZvcm0gPyAnOicgKyBwbGF0Zm9ybSA6ICcnfWA7XG4gICAgICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX3ByZXBhcmVDaHJvbWVDYXBhYmlsaXRpZXMgKGNhcGFiaWxpdGllcykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19DSFJPTUVfQVJHUyddICYmIHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfQ0hST01FX0FSR1MnXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmNocm9tZU9wdGlvbnMgPSB7IGFyZ3M6IFtwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX0NIUk9NRV9BUkdTJ11dIH07XG4gICAgfSxcblxuICAgIGFzeW5jIF9wcmVwYXJlRmlyZWZveENhcGFiaWxpdGllcyAoY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIGlmICghcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19VU0VfQVVUT01BVEUnXSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBGaXJlZm94UHJvZmlsZSA9IHJlcXVpcmUoJ2ZpcmVmb3gtcHJvZmlsZScpO1xuICAgICAgICBjb25zdCBwcm9maWxlICAgICAgICA9IG5ldyBGaXJlZm94UHJvZmlsZSgpO1xuXG4gICAgICAgIHByb2ZpbGUuZGVmYXVsdFByZWZlcmVuY2VzID0ge307XG5cbiAgICAgICAgcHJvZmlsZS5zZXRQcmVmZXJlbmNlKCdicm93c2VyLmhlbHBlckFwcHMubmV2ZXJBc2suc2F2ZVRvRGlzaycsIGdldE1pbWVUeXBlcygpKTtcbiAgICAgICAgcHJvZmlsZS51cGRhdGVQcmVmZXJlbmNlcygpO1xuXG4gICAgICAgIGNhcGFiaWxpdGllc1snZmlyZWZveF9wcm9maWxlJ10gPSBhd2FpdCBwcm9taXNpZnkocHJvZmlsZS5lbmNvZGVkKS5iaW5kKHByb2ZpbGUpKCk7XG4gICAgfSxcblxuICAgIGFzeW5jIF9lbmNvZGVGaXJlZm94UHJvZmlsZSAocHJvZmlsZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcHJvZmlsZS5lbmNvZGVkKGZ1bmN0aW9uIChlcnIsIGVuY29kZWRQcm9maWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVuY29kZWRQcm9maWxlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8gUmVxdWlyZWQgLSBtdXN0IGJlIGltcGxlbWVudGVkXG4gICAgLy8gQnJvd3NlciBjb250cm9sXG4gICAgYXN5bmMgb3BlbkJyb3dzZXIgKGlkLCBwYWdlVXJsLCBicm93c2VyTmFtZSkge1xuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLl9nZW5lcmF0ZUJhc2ljQ2FwYWJpbGl0aWVzKGJyb3dzZXJOYW1lKSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2dldEFkZGl0aW9uYWxDYXBhYmlsaXRpZXMoKVxuICAgICAgICB9O1xuXG4gICAgICAgIGNhcGFiaWxpdGllcy5sb2NhbCA9IGlzTG9jYWxFbmFibGVkKCk7XG5cbiAgICAgICAgLy8gR2l2ZSBwcmVmZXJlbmNlIHRvIHRoZSBhbHJlYWR5IHJ1bm5pbmcgbG9jYWwgaWRlbnRpZmllclxuICAgICAgICBjYXBhYmlsaXRpZXMubG9jYWxJZGVudGlmaWVyID0gcHJvY2Vzcy5lbnYuQlJPV1NFUlNUQUNLX0xPQ0FMX0lERU5USUZJRVI7XG5cbiAgICAgICAgaWYgKGNhcGFiaWxpdGllcy5sb2NhbCAmJiAhY2FwYWJpbGl0aWVzLmxvY2FsSWRlbnRpZmllcikge1xuICAgICAgICAgICAgY29uc3QgY29ubmVjdG9yID0gYXdhaXQgdGhpcy5fY3JlYXRlQ29ubmVjdG9yKCk7XG5cbiAgICAgICAgICAgIGNhcGFiaWxpdGllcy5sb2NhbElkZW50aWZpZXIgPSBjb25uZWN0b3IuY29ubmVjdG9ySW5zdGFuY2UubG9jYWxJZGVudGlmaWVyRmxhZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYXBhYmlsaXRpZXMub3MudG9Mb3dlckNhc2UoKSA9PT0gJ2FuZHJvaWQnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRQYWdlVXJsID0gcGFyc2VVcmwocGFnZVVybCk7XG4gICAgICAgICAgICBjb25zdCBicm93c2VyUHJveHkgID0gYXdhaXQgdGhpcy5fZ2V0QnJvd3NlclByb3h5KHBhcnNlZFBhZ2VVcmwucHJvdG9jb2wsIHBhcnNlZFBhZ2VVcmwuaG9zdG5hbWUsIHBhcnNlZFBhZ2VVcmwucG9ydCk7XG5cbiAgICAgICAgICAgIHBhZ2VVcmwgPSAnaHR0cDovLycgKyBicm93c2VyUHJveHkudGFyZ2V0SG9zdCArICc6JyArIGJyb3dzZXJQcm94eS5wcm94eVBvcnQgKyBwYXJzZWRQYWdlVXJsLnBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5uYW1lKVxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzLm5hbWUgPSBgVGVzdENhZmUgdGVzdCBydW4gJHtpZH1gO1xuXG4gICAgICAgIGlmIChicm93c2VyTmFtZS5pbmNsdWRlcygnY2hyb21lJykpXG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlQ2hyb21lQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7XG5cbiAgICAgICAgaWYgKGJyb3dzZXJOYW1lLmluY2x1ZGVzKCdmaXJlZm94JykpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wcmVwYXJlRmlyZWZveENhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5vcGVuQnJvd3NlcihpZCwgcGFnZVVybCwgY2FwYWJpbGl0aWVzKTtcblxuICAgICAgICB0aGlzLnNldFVzZXJBZ2VudE1ldGFJbmZvKGlkLCB0aGlzLmJhY2tlbmQuZ2V0U2Vzc2lvblVybChpZCkpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZUJyb3dzZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5jbG9zZUJyb3dzZXIoaWQpO1xuICAgIH0sXG5cbiAgICAvLyBPcHRpb25hbCAtIGltcGxlbWVudCBtZXRob2RzIHlvdSBuZWVkLCByZW1vdmUgb3RoZXIgbWV0aG9kc1xuICAgIC8vIEluaXRpYWxpemF0aW9uXG4gICAgYXN5bmMgaW5pdCAoKSB7XG4gICAgICAgIHZhciByZXBvcnRXYXJuaW5nID0gKC4uLmFyZ3MpID0+IHRoaXMucmVwb3J0V2FybmluZyguLi5hcmdzKTtcblxuICAgICAgICB0aGlzLmJhY2tlbmQgPSBpc0F1dG9tYXRlRW5hYmxlZCgpID8gbmV3IEF1dG9tYXRlQmFja2VuZChyZXBvcnRXYXJuaW5nKSA6IG5ldyBKU1Rlc3RpbmdCYWNrZW5kKHJlcG9ydFdhcm5pbmcpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2dldERldmljZUxpc3QoKTtcblxuICAgICAgICB0aGlzLl9nZW5lcmF0ZUJyb3dzZXJOYW1lcygpO1xuICAgIH0sXG5cbiAgICBhc3luYyBkaXNwb3NlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZUNvbm5lY3RvcigpO1xuICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlQnJvd3NlclByb3h5KCk7XG4gICAgfSxcblxuXG4gICAgLy8gQnJvd3NlciBuYW1lcyBoYW5kbGluZ1xuICAgIGFzeW5jIGdldEJyb3dzZXJMaXN0ICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3Nlck5hbWVzO1xuICAgIH0sXG5cbiAgICBhc3luYyBpc1ZhbGlkQnJvd3Nlck5hbWUgKGJyb3dzZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUNhcGFiaWxpdGllcyhicm93c2VyTmFtZSkubGVuZ3RoID09PSAxICYmICEhdGhpcy5fZmlsdGVyUGxhdGZvcm1JbmZvKHRoaXMuX2NyZWF0ZVF1ZXJ5KGJyb3dzZXJOYW1lKSkubGVuZ3RoO1xuICAgIH0sXG5cblxuICAgIC8vIEV4dHJhIG1ldGhvZHNcbiAgICBhc3luYyByZXNpemVXaW5kb3cgKGlkLCB3aWR0aCwgaGVpZ2h0LCBjdXJyZW50V2lkdGgsIGN1cnJlbnRIZWlnaHQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5iYWNrZW5kLnJlc2l6ZVdpbmRvdyhpZCwgd2lkdGgsIGhlaWdodCwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgbWF4aW1pemVXaW5kb3cgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5tYXhpbWl6ZVdpbmRvdyhpZCk7XG4gICAgfSxcblxuXG4gICAgYXN5bmMgdGFrZVNjcmVlbnNob3QgKGlkLCBzY3JlZW5zaG90UGF0aCkge1xuICAgICAgICBhd2FpdCB0aGlzLmJhY2tlbmQudGFrZVNjcmVlbnNob3QoaWQsIHNjcmVlbnNob3RQYXRoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVwb3J0Sm9iUmVzdWx0IChpZCwgam9iUmVzdWx0LCBqb2JEYXRhKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5yZXBvcnRKb2JSZXN1bHQoaWQsIGpvYlJlc3VsdCwgam9iRGF0YSwgdGhpcy5KT0JfUkVTVUxUKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T1NJbmZvIChpZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5iYWNrZW5kLmdldE9TSW5mbyhpZCk7XG4gICAgfVxufTtcbiJdfQ==
{
"name": "testcafe-browser-provider-browserstack",
"version": "1.15.1",
"version": "1.15.2",
"description": "Browserstack TestCafe browser provider plugin.",

@@ -53,6 +53,6 @@ "repository": "https://github.com/DevExpress/testcafe-browser-provider-browserstack",

"gulp-eslint": "^6.0.0",
"mocha": "^7.1.1",
"mocha": "^10.2.0",
"publish-please": "^5.4.3",
"testcafe": "^2.2.0"
"testcafe": "^3.1.0"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc