verdaccio 6.5.2 → 6.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/index.js +1 -1
- package/build/api/web/api/user.js +1 -1
- package/build/lib/cli/cli.js +1 -1
- package/build/lib/cli/commands/init.js +10 -3
- package/build/lib/cli/commands/version.js +1 -1
- package/build/lib/storage.d.ts +4 -3
- package/build/lib/storage.js +20 -13
- package/build/lib/utils.d.ts +5 -0
- package/build/lib/utils.js +10 -1
- package/package.json +29 -33
- package/cypress/e2e/01-home.cy.ts +0 -11
- package/cypress/e2e/02-signin.cy.ts +0 -11
- package/cypress/e2e/03-layout.cy.ts +0 -11
- package/cypress/e2e/04-search.cy.ts +0 -11
- package/cypress/e2e/05-settings.cy.ts +0 -11
- package/cypress/e2e/06-publish.cy.ts +0 -11
- package/cypress/e2e/07-change-password.cy.ts +0 -32
- package/cypress/support/e2e.ts +0 -1
- package/cypress.config.ts +0 -21
package/build/api/index.js
CHANGED
|
@@ -24,7 +24,7 @@ var _endpoint = _interopRequireDefault(require("./endpoint"));
|
|
|
24
24
|
var _middleware2 = require("./middleware");
|
|
25
25
|
var _web = _interopRequireDefault(require("./web"));
|
|
26
26
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
27
|
-
const version = "6.
|
|
27
|
+
const version = "6.6.0" || 'dev';
|
|
28
28
|
const defineAPI = async function (config, storage) {
|
|
29
29
|
const auth = new _auth.Auth(config, _logger.logger, {
|
|
30
30
|
legacyMergeConfigs: true
|
|
@@ -73,4 +73,4 @@ function addUserAuthApi(auth, config) {
|
|
|
73
73
|
return route;
|
|
74
74
|
}
|
|
75
75
|
var _default = exports.default = addUserAuthApi;
|
|
76
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb3JlIiwiX21pZGRsZXdhcmUiLCJfYXV0aFV0aWxzIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl91dGlsczIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJhZGRVc2VyQXV0aEFwaSIsImF1dGgiLCJjb25maWciLCJyb3V0ZSIsIlJvdXRlciIsInBvc3QiLCJ3cmFwU2VjUGF0aCIsIldlYlVybHMiLCJ1c2VyX2xvZ2luIiwicmF0ZUxpbWl0IiwidXNlclJhdGVMaW1pdCIsInJlcSIsInJlcyIsIm5leHQiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiYm9keSIsImF1dGhlbnRpY2F0ZSIsImVyciIsInVzZXIiLCJlcnJvckNvZGUiLCJtZXNzYWdlIiwiSFRUUF9TVEFUVVMiLCJVTkFVVEhPUklaRUQiLCJJTlRFUk5BTF9FUlJPUiIsInNldCIsIkhFQURFUlMiLCJXV1dfQVVUSCIsIlRPS0VOX0JFQVJFUiIsIkVycm9yQ29kZSIsImdldENvZGUiLCJyZW1vdGVfdXNlciIsImpXVFNpZ25PcHRpb25zIiwiZ2V0U2VjdXJpdHkiLCJ3ZWIiLCJzaWduIiwiQ0FDSEVfQ09OVFJPTCIsInRva2VuIiwiand0RW5jcnlwdCIsIm5hbWUiLCJmbGFncyIsImNoYW5nZVBhc3N3b3JkIiwicHV0IiwicmVzZXRfcGFzc3dvcmQiLCJfIiwiaXNOaWwiLCJzdGF0dXMiLCJBUElfRVJST1IiLCJNVVNUX0JFX0xPR0dFRCIsInZhbGlkYXRpb25VdGlscyIsInZhbGlkYXRlUGFzc3dvcmQiLCJuZXciLCJCQURfUkVRVUVTVCIsIkFQUF9FUlJPUiIsIlBBU1NXT1JEX1ZBTElEQVRJT04iLCJvbGQiLCJpc1VwZGF0ZWQiLCJvayIsIkNPTkZMSUNUIiwiZ2V0SW50ZXJuYWxFcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd2ViL2FwaS91c2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHR5cGUgeyBBdXRoIH0gZnJvbSAnQHZlcmRhY2Npby9hdXRoJztcbmltcG9ydCB7IHZhbGlkYXRpb25VdGlscyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29yZSc7XG5pbXBvcnQgeyBXZWJVcmxzLCByYXRlTGltaXQgfSBmcm9tICdAdmVyZGFjY2lvL21pZGRsZXdhcmUnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcsIEpXVFNpZ25PcHRpb25zLCBSZW1vdGVVc2VyIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7IGdldFNlY3VyaXR5IH0gZnJvbSAnLi4vLi4vLi4vbGliL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBBUFBfRVJST1IsIEhFQURFUlMsIEhUVFBfU1RBVFVTLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuLi8uLi8uLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgdHlwZSB7ICROZXh0RnVuY3Rpb25WZXIgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyB3cmFwU2VjUGF0aCB9IGZyb20gJy4vdXRpbHMnO1xuXG5mdW5jdGlvbiBhZGRVc2VyQXV0aEFwaShhdXRoOiBBdXRoLCBjb25maWc6IENvbmZpZyk6IFJvdXRlciB7XG4gIC8qIGVzbGludCBuZXctY2FwOm9mZiAqL1xuICBjb25zdCByb3V0ZSA9IFJvdXRlcigpO1xuICByb3V0ZS5wb3N0KFxuICAgIHdyYXBTZWNQYXRoKFdlYlVybHMudXNlcl9sb2dpbiksXG4gICAgcmF0ZUxpbWl0KGNvbmZpZz8udXNlclJhdGVMaW1pdCksXG4gICAgZnVuY3Rpb24gKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgICAgY29uc3QgeyB1c2VybmFtZSwgcGFzc3dvcmQgfSA9IHJlcS5ib2R5O1xuXG4gICAgICBhdXRoLmF1dGhlbnRpY2F0ZSh1c2VybmFtZSwgcGFzc3dvcmQsIGFzeW5jIChlcnIsIHVzZXI/OiBSZW1vdGVVc2VyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBlcnIubWVzc2FnZSA/IEhUVFBfU1RBVFVTLlVOQVVUSE9SSVpFRCA6IEhUVFBfU1RBVFVTLklOVEVSTkFMX0VSUk9SO1xuICAgICAgICAgIGlmIChlcnJvckNvZGUgPT09IEhUVFBfU1RBVFVTLlVOQVVUSE9SSVpFRCkge1xuICAgICAgICAgICAgcmVzLnNldChIRUFERVJTLldXV19BVVRILCBUT0tFTl9CRUFSRVIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0Q29kZShlcnJvckNvZGUsIGVyci5tZXNzYWdlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlciBhcyBSZW1vdGVVc2VyO1xuICAgICAgICAgIGNvbnN0IGpXVFNpZ25PcHRpb25zOiBKV1RTaWduT3B0aW9ucyA9IGdldFNlY3VyaXR5KGNvbmZpZykud2ViLnNpZ247XG4gICAgICAgICAgcmVzLnNldChIRUFERVJTLkNBQ0hFX0NPTlRST0wsICduby1jYWNoZSwgbm8tc3RvcmUnKTtcbiAgICAgICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgICAgICB0b2tlbjogYXdhaXQgYXV0aC5qd3RFbmNyeXB0KHVzZXIgYXMgUmVtb3RlVXNlciwgaldUU2lnbk9wdGlvbnMpLFxuICAgICAgICAgICAgdXNlcm5hbWU6IHJlcS5yZW1vdGVfdXNlci5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICk7XG5cbiAgaWYgKGNvbmZpZz8uZmxhZ3M/
|
|
76
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb3JlIiwiX21pZGRsZXdhcmUiLCJfYXV0aFV0aWxzIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl91dGlsczIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJhZGRVc2VyQXV0aEFwaSIsImF1dGgiLCJjb25maWciLCJyb3V0ZSIsIlJvdXRlciIsInBvc3QiLCJ3cmFwU2VjUGF0aCIsIldlYlVybHMiLCJ1c2VyX2xvZ2luIiwicmF0ZUxpbWl0IiwidXNlclJhdGVMaW1pdCIsInJlcSIsInJlcyIsIm5leHQiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiYm9keSIsImF1dGhlbnRpY2F0ZSIsImVyciIsInVzZXIiLCJlcnJvckNvZGUiLCJtZXNzYWdlIiwiSFRUUF9TVEFUVVMiLCJVTkFVVEhPUklaRUQiLCJJTlRFUk5BTF9FUlJPUiIsInNldCIsIkhFQURFUlMiLCJXV1dfQVVUSCIsIlRPS0VOX0JFQVJFUiIsIkVycm9yQ29kZSIsImdldENvZGUiLCJyZW1vdGVfdXNlciIsImpXVFNpZ25PcHRpb25zIiwiZ2V0U2VjdXJpdHkiLCJ3ZWIiLCJzaWduIiwiQ0FDSEVfQ09OVFJPTCIsInRva2VuIiwiand0RW5jcnlwdCIsIm5hbWUiLCJmbGFncyIsImNoYW5nZVBhc3N3b3JkIiwicHV0IiwicmVzZXRfcGFzc3dvcmQiLCJfIiwiaXNOaWwiLCJzdGF0dXMiLCJBUElfRVJST1IiLCJNVVNUX0JFX0xPR0dFRCIsInZhbGlkYXRpb25VdGlscyIsInZhbGlkYXRlUGFzc3dvcmQiLCJuZXciLCJCQURfUkVRVUVTVCIsIkFQUF9FUlJPUiIsIlBBU1NXT1JEX1ZBTElEQVRJT04iLCJvbGQiLCJpc1VwZGF0ZWQiLCJvayIsIkNPTkZMSUNUIiwiZ2V0SW50ZXJuYWxFcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd2ViL2FwaS91c2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHR5cGUgeyBBdXRoIH0gZnJvbSAnQHZlcmRhY2Npby9hdXRoJztcbmltcG9ydCB7IHZhbGlkYXRpb25VdGlscyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29yZSc7XG5pbXBvcnQgeyBXZWJVcmxzLCByYXRlTGltaXQgfSBmcm9tICdAdmVyZGFjY2lvL21pZGRsZXdhcmUnO1xuaW1wb3J0IHR5cGUgeyBDb25maWcsIEpXVFNpZ25PcHRpb25zLCBSZW1vdGVVc2VyIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7IGdldFNlY3VyaXR5IH0gZnJvbSAnLi4vLi4vLi4vbGliL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBBUFBfRVJST1IsIEhFQURFUlMsIEhUVFBfU1RBVFVTLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuLi8uLi8uLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgdHlwZSB7ICROZXh0RnVuY3Rpb25WZXIgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyB3cmFwU2VjUGF0aCB9IGZyb20gJy4vdXRpbHMnO1xuXG5mdW5jdGlvbiBhZGRVc2VyQXV0aEFwaShhdXRoOiBBdXRoLCBjb25maWc6IENvbmZpZyk6IFJvdXRlciB7XG4gIC8qIGVzbGludCBuZXctY2FwOm9mZiAqL1xuICBjb25zdCByb3V0ZSA9IFJvdXRlcigpO1xuICByb3V0ZS5wb3N0KFxuICAgIHdyYXBTZWNQYXRoKFdlYlVybHMudXNlcl9sb2dpbiksXG4gICAgcmF0ZUxpbWl0KGNvbmZpZz8udXNlclJhdGVMaW1pdCksXG4gICAgZnVuY3Rpb24gKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgICAgY29uc3QgeyB1c2VybmFtZSwgcGFzc3dvcmQgfSA9IHJlcS5ib2R5O1xuXG4gICAgICBhdXRoLmF1dGhlbnRpY2F0ZSh1c2VybmFtZSwgcGFzc3dvcmQsIGFzeW5jIChlcnIsIHVzZXI/OiBSZW1vdGVVc2VyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBlcnIubWVzc2FnZSA/IEhUVFBfU1RBVFVTLlVOQVVUSE9SSVpFRCA6IEhUVFBfU1RBVFVTLklOVEVSTkFMX0VSUk9SO1xuICAgICAgICAgIGlmIChlcnJvckNvZGUgPT09IEhUVFBfU1RBVFVTLlVOQVVUSE9SSVpFRCkge1xuICAgICAgICAgICAgcmVzLnNldChIRUFERVJTLldXV19BVVRILCBUT0tFTl9CRUFSRVIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0Q29kZShlcnJvckNvZGUsIGVyci5tZXNzYWdlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlciBhcyBSZW1vdGVVc2VyO1xuICAgICAgICAgIGNvbnN0IGpXVFNpZ25PcHRpb25zOiBKV1RTaWduT3B0aW9ucyA9IGdldFNlY3VyaXR5KGNvbmZpZykud2ViLnNpZ247XG4gICAgICAgICAgcmVzLnNldChIRUFERVJTLkNBQ0hFX0NPTlRST0wsICduby1jYWNoZSwgbm8tc3RvcmUnKTtcbiAgICAgICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgICAgICB0b2tlbjogYXdhaXQgYXV0aC5qd3RFbmNyeXB0KHVzZXIgYXMgUmVtb3RlVXNlciwgaldUU2lnbk9wdGlvbnMpLFxuICAgICAgICAgICAgdXNlcm5hbWU6IHJlcS5yZW1vdGVfdXNlci5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICk7XG5cbiAgaWYgKGNvbmZpZz8uZmxhZ3M/LmNoYW5nZVBhc3N3b3JkID09PSB0cnVlKSB7XG4gICAgcm91dGUucHV0KFxuICAgICAgd3JhcFNlY1BhdGgoV2ViVXJscy5yZXNldF9wYXNzd29yZCksXG4gICAgICBmdW5jdGlvbiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChfLmlzTmlsKHJlcS5yZW1vdGVfdXNlci5uYW1lKSkge1xuICAgICAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuVU5BVVRIT1JJWkVEKTtcbiAgICAgICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgICAgICAvLyBGVVRVUkU6IHVwZGF0ZSB0byBhIG1vcmUgbWVhbmluZ2Z1bCBtZXNzYWdlXG4gICAgICAgICAgICBtZXNzYWdlOiBBUElfRVJST1IuTVVTVF9CRV9MT0dHRUQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHBhc3N3b3JkIH0gPSByZXEuYm9keTtcbiAgICAgICAgY29uc3QgeyBuYW1lIH0gPSByZXEucmVtb3RlX3VzZXI7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRpb25VdGlscy52YWxpZGF0ZVBhc3N3b3JkKHBhc3N3b3JkLm5ldykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldENvZGUoSFRUUF9TVEFUVVMuQkFEX1JFUVVFU1QsIEFQUF9FUlJPUi5QQVNTV09SRF9WQUxJREFUSU9OKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhdXRoLmNoYW5nZVBhc3N3b3JkKG5hbWUgYXMgc3RyaW5nLCBwYXNzd29yZC5vbGQsIHBhc3N3b3JkLm5ldywgKGVyciwgaXNVcGRhdGVkKTogdm9pZCA9PiB7XG4gICAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSAmJiBpc1VwZGF0ZWQpIHtcbiAgICAgICAgICAgIG5leHQoe1xuICAgICAgICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIV8uaXNOaWwoZXJyKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgICAgIEVycm9yQ29kZS5nZXRDb2RlKFxuICAgICAgICAgICAgICAgIF8uaXNOaWwoZXJyLnN0YXR1cykgPyBIVFRQX1NUQVRVUy5DT05GTElDVCA6IGVyci5zdGF0dXMsXG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoQVBJX0VSUk9SLklOVEVSTkFMX1NFUlZFUl9FUlJPUikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByb3V0ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYWRkVXNlckF1dGhBcGk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFHLEtBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUdBLElBQUFLLFVBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE1BQUEsR0FBQVAsT0FBQTtBQUVBLElBQUFRLE9BQUEsR0FBQVIsT0FBQTtBQUFzQyxTQUFBRSx1QkFBQU8sQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUV0QyxTQUFTRyxjQUFjQSxDQUFDQyxJ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
|
package/build/lib/cli/cli.js
CHANGED
|
@@ -5,7 +5,7 @@ var _info = require("./commands/info");
|
|
|
5
5
|
var _init = require("./commands/init");
|
|
6
6
|
var _version = require("./commands/version");
|
|
7
7
|
var _utils = require("./utils");
|
|
8
|
-
const pkgVersion = "6.
|
|
8
|
+
const pkgVersion = "6.6.0" || 'dev';
|
|
9
9
|
if (process.getuid && process.getuid() === 0) {
|
|
10
10
|
process.emitWarning(`Verdaccio doesn't need superuser privileges. don't run it under root`);
|
|
11
11
|
}
|
|
@@ -9,9 +9,10 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
9
9
|
var _config = require("@verdaccio/config");
|
|
10
10
|
var _bootstrap = require("../../bootstrap");
|
|
11
11
|
var _logger = require("../../logger");
|
|
12
|
+
var _runServer = require("../../run-server");
|
|
12
13
|
var _utils = require("../../utils");
|
|
13
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
-
const pkgVersion = "6.
|
|
15
|
+
const pkgVersion = "6.6.0" || 'dev';
|
|
15
16
|
const pkgName = 'verdaccio';
|
|
16
17
|
const DEFAULT_PROCESS_NAME = exports.DEFAULT_PROCESS_NAME = 'verdaccio';
|
|
17
18
|
class InitCommand extends _clipanion.Command {
|
|
@@ -55,10 +56,16 @@ class InitCommand extends _clipanion.Command {
|
|
|
55
56
|
};
|
|
56
57
|
}
|
|
57
58
|
process.title = configParsed.web && configParsed.web.title || 'verdaccio';
|
|
58
|
-
(0,
|
|
59
|
+
(0, _utils.initLogger)(configParsed);
|
|
59
60
|
_logger.logger.info({
|
|
60
61
|
file: configPathLocation
|
|
61
62
|
}, 'config file - @{file}');
|
|
63
|
+
const webServer = await (0, _runServer.runServer)(configParsed, {
|
|
64
|
+
listenArg: this.listen
|
|
65
|
+
});
|
|
66
|
+
const listen = this.listen ?? configParsed.listen;
|
|
67
|
+
const addr = (0, _config.getListenAddress)(listen, _logger.logger);
|
|
68
|
+
(0, _bootstrap.listenDefaultCallback)(webServer, addr, pkgName, pkgVersion);
|
|
62
69
|
} catch (err) {
|
|
63
70
|
console.error(`cannot open config file ${configPathLocation}: ${err.stack}`);
|
|
64
71
|
// @ts-expect-error
|
|
@@ -75,4 +82,4 @@ class InitCommand extends _clipanion.Command {
|
|
|
75
82
|
}
|
|
76
83
|
}
|
|
77
84
|
exports.InitCommand = InitCommand;
|
|
78
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xpcGFuaW9uIiwicmVxdWlyZSIsIl9wYXRoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb25maWciLCJfYm9vdHN0cmFwIiwiX2xvZ2dlciIsIl9ydW5TZXJ2ZXIiLCJfdXRpbHMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJwa2dWZXJzaW9uIiwicGtnTmFtZSIsIkRFRkFVTFRfUFJPQ0VTU19OQU1FIiwiZXhwb3J0cyIsIkluaXRDb21tYW5kIiwiQ29tbWFuZCIsInBhdGhzIiwiRGVmYXVsdCIsImxpc3RlbiIsIk9wdGlvbiIsIlN0cmluZyIsImRlc2NyaXB0aW9uIiwidXNhZ2UiLCJVc2FnZSIsImRldGFpbHMiLCJleGFtcGxlcyIsImNvbmZpZyIsImV4ZWN1dGUiLCJjb25maWdQYXRoTG9jYXRpb24iLCJmaW5kQ29uZmlnRmlsZSIsImNvbmZpZ1BhcnNlZCIsInBhcnNlQ29uZmlnRmlsZSIsInNlbGZfcGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiY29uZmlnUGF0aCIsImh0dHBzIiwiZW5hYmxlIiwicHJvY2VzcyIsInRpdGxlIiwid2ViIiwiaW5pdExvZ2dlciIsImxvZ2dlciIsImluZm8iLCJmaWxlIiwid2ViU2VydmVyIiwicnVuU2VydmVyIiwibGlzdGVuQXJnIiwiYWRkciIsImdldExpc3RlbkFkZHJlc3MiLCJsaXN0ZW5EZWZhdWx0Q2FsbGJhY2siLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJzdGFjayIsImZhdGFsIiwibWVzc2FnZSIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NsaS9jb21tYW5kcy9pbml0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NsaXBhbmlvbic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgZmluZENvbmZpZ0ZpbGUsIGdldExpc3RlbkFkZHJlc3MgfSBmcm9tICdAdmVyZGFjY2lvL2NvbmZpZyc7XG5cbmltcG9ydCB7IGxpc3RlbkRlZmF1bHRDYWxsYmFjayB9IGZyb20gJy4uLy4uL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi9sb2dnZXInO1xuaW1wb3J0IHsgcnVuU2VydmVyIH0gZnJvbSAnLi4vLi4vcnVuLXNlcnZlcic7XG5pbXBvcnQgeyBpbml0TG9nZ2VyLCBwYXJzZUNvbmZpZ0ZpbGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IHBrZ1ZlcnNpb24gPSBwcm9jZXNzLmVudi5QQUNLQUdFX1ZFUlNJT04gfHwgJ2Rldic7XG5jb25zdCBwa2dOYW1lID0gJ3ZlcmRhY2Npbyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BST0NFU1NfTkFNRTogc3RyaW5nID0gJ3ZlcmRhY2Npbyc7XG5cbmV4cG9ydCBjbGFzcyBJbml0Q29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICBzdGF0aWMgcGF0aHMgPSBbQ29tbWFuZC5EZWZhdWx0XTtcblxuICBsaXN0ZW4gPSBPcHRpb24uU3RyaW5nKCctbCwtLWxpc3RlbicsIHtcbiAgICBkZXNjcmlwdGlvbjogJ2hvc3Q6cG9ydCBudW1iZXIgdG8gbGlzdGVuIG9uIChkZWZhdWx0OiBsb2NhbGhvc3Q6NDg3MyknLFxuICB9KTtcblxuICBzdGF0aWMgdXNhZ2UgPSBDb21tYW5kLlVzYWdlKHtcbiAgICBkZXNjcmlwdGlvbjogYGxhdW5jaCB0aGUgc2VydmVyYCxcbiAgICBkZXRhaWxzOiBgXG4gICAgICBUaGlzIHN0YXJ0IHRoZSByZWdpc3RyeSBpbiB0aGUgZGVmYXVsdCBwb3J0LlxuXG4gICAgICBXaGVuIHVzZWQgd2l0aG91dCBhcmd1bWVudHMsIGl0OlxuXG4gICAgICAtIGJvb3RzdHJhcCB0aGUgc2VydmVyIGF0IHRoZSBwb3J0ICBcXGA0ODczXFxgXG5cbiAgICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudHMgYXJlOlxuXG4gICAgICAtIFxcYC0tbGlzdGVuXFxgIHRvIHN3aXRjaCB0aGUgZGVmYXVsdCBzZXJ2ZXIgcG9ydCxcbiAgICAgIC0gXFxgLS1jb25maWdcXGAgdG8gZGVmaW5lIGEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gcGF0aCBsb2NhdGlvbixcblxuICAgIGAsXG4gICAgZXhhbXBsZXM6IFtcbiAgICAgIFtgUnVucyB0aGUgc2VydmVyIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbmAsIGB2ZXJkYWNjaW9gXSxcbiAgICAgIFtgUnVucyB0aGUgc2VydmVyIGluIHRoZSBwb3J0IDUwMDBgLCBgdmVyZGFjY2lvIC0tbGlzdGVuIDUwMDBgXSxcbiAgICAgIFtcbiAgICAgICAgYFJ1bnMgdGhlIHNlcnZlciBieSB1c2luZyBhIGRpZmZlcmVudCBhYnNvbHV0ZSBsb2NhdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlYCxcbiAgICAgICAgYHZlcmRhY2NpbyAtLWNvbmZpZyAvaG9tZS91c2VyL3ZlcmRhY2Npby9jb25maWcueWFtbGAsXG4gICAgICBdLFxuICAgIF0sXG4gIH0pO1xuXG4gIGNvbmZpZyA9IE9wdGlvbi5TdHJpbmcoJy1jLC0tY29uZmlnJywge1xuICAgIGRlc2NyaXB0aW9uOiAndXNlIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0OiAuL2NvbmZpZy55YW1sKScsXG4gIH0pO1xuXG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgbGV0IGNvbmZpZ1BhdGhMb2NhdGlvbjtcbiAgICB0cnkge1xuICAgICAgY29uZmlnUGF0aExvY2F0aW9uID0gZmluZENvbmZpZ0ZpbGUodGhpcy5jb25maWcgYXMgc3RyaW5nKTtcbiAgICAgIGNvbnN0IGNvbmZpZ1BhcnNlZDogUmV0dXJuVHlwZTxhbnk+ID0gcGFyc2VDb25maWdGaWxlKGNvbmZpZ1BhdGhMb2NhdGlvbik7XG4gICAgICBpZiAoIWNvbmZpZ1BhcnNlZC5zZWxmX3BhdGgpIHtcbiAgICAgICAgY29uZmlnUGFyc2VkLnNlbGZfcGF0aCA9IHBhdGgucmVzb2x2ZShjb25maWdQYXRoTG9jYXRpb24pO1xuICAgICAgICAvLyBjb21wYXRpYmlsaXR5IHdpdGggNi54IHBsdWdpbnNcbiAgICAgICAgY29uZmlnUGFyc2VkLmNvbmZpZ1BhdGggPSBjb25maWdQYXJzZWQuc2VsZl9wYXRoO1xuICAgICAgfVxuICAgICAgaWYgKCFjb25maWdQYXJzZWQuaHR0cHMpIHtcbiAgICAgICAgY29uZmlnUGFyc2VkLmh0dHBzID0geyBlbmFibGU6IGZhbHNlIH07XG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3MudGl0bGUgPSAoY29uZmlnUGFyc2VkLndlYiAmJiBjb25maWdQYXJzZWQud2ViLnRpdGxlKSB8fCAndmVyZGFjY2lvJztcblxuICAgICAgaW5pdExvZ2dlcihjb25maWdQYXJzZWQpO1xuICAgICAgbG9nZ2VyLmluZm8oeyBmaWxlOiBjb25maWdQYXRoTG9jYXRpb24gfSwgJ2NvbmZpZyBmaWxlICAtIEB7ZmlsZX0nKTtcbiAgICAgIGNvbnN0IHdlYlNlcnZlciA9IGF3YWl0IHJ1blNlcnZlcihjb25maWdQYXJzZWQsIHsgbGlzdGVuQXJnOiB0aGlzLmxpc3RlbiBhcyBzdHJpbmcgfSk7XG4gICAgICBjb25zdCBsaXN0ZW4gPSAodGhpcy5saXN0ZW4gYXMgc3RyaW5nKSA/PyBjb25maWdQYXJzZWQubGlzdGVuO1xuICAgICAgY29uc3QgYWRkciA9IGdldExpc3RlbkFkZHJlc3MobGlzdGVuLCBsb2dnZXIpO1xuICAgICAgbGlzdGVuRGVmYXVsdENhbGxiYWNrKHdlYlNlcnZlciwgYWRkciwgcGtnTmFtZSwgcGtnVmVyc2lvbik7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBvcGVuIGNvbmZpZyBmaWxlICR7Y29uZmlnUGF0aExvY2F0aW9ufTogJHtlcnIuc3RhY2t9YCk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBpZiAodHlwZW9mIGxvZ2dlcj8ubG9nZ2VyPy5mYXRhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsb2dnZXIuZmF0YWwoXG4gICAgICAgICAgeyBmaWxlOiBjb25maWdQYXRoTG9jYXRpb24sIGVycjogZXJyIH0sXG4gICAgICAgICAgJ2Nhbm5vdCBvcGVuIGNvbmZpZyBmaWxlIEB7ZmlsZX06IEB7IWVyci5tZXNzYWdlfSdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBvcGVuIGNvbmZpZyBmaWxlICR7Y29uZmlnUGF0aExvY2F0aW9ufTogJHshZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLFVBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE1BQUEsR0FBQVAsT0FBQTtBQUEwRCxTQUFBRSx1QkFBQU0sQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUUxRCxNQUFNRyxVQUFVLEdBQUcsV0FBK0IsS0FBSztBQUN2RCxNQUFNQyxPQUFPLEdBQUcsV0FBVztBQUVwQixNQUFNQyxvQkFBNEIsR0FBQUMsT0FBQSxDQUFBRCxvQkFBQSxHQUFHLFdBQVc7QUFFaEQsTUFBTUUsV0FBVyxTQUFTQyxrQkFBTyxDQUFDO0VBQ3ZDLE9BQU9DLEtBQUssR0FBRyxDQUFDRCxrQkFBTyxDQUFDRSxPQUFPLENBQUM7RUFFaENDLE1BQU0sR0FBR0MsaUJBQU0sQ0FBQ0MsTUFBTSxDQUFDLGFBQWEsRUFBRTtJQUNwQ0MsV0FBVyxFQUFFO0VBQ2YsQ0FBQyxDQUFDO0VBRUYsT0FBT0MsS0FBSyxHQUFHUCxrQkFBTyxD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
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.VersionCommand = void 0;
|
|
7
7
|
var _clipanion = require("clipanion");
|
|
8
|
-
const pkgVersion = "6.
|
|
8
|
+
const pkgVersion = "6.6.0" || 'dev';
|
|
9
9
|
class VersionCommand extends _clipanion.Command {
|
|
10
10
|
static paths = [[`--version`], [`-v`]];
|
|
11
11
|
async execute() {
|
package/build/lib/storage.d.ts
CHANGED
|
@@ -119,9 +119,10 @@ declare class Storage {
|
|
|
119
119
|
*/
|
|
120
120
|
private _applyFilters;
|
|
121
121
|
/**
|
|
122
|
-
* Check if a tarball should be served based on filter plugins
|
|
123
|
-
*
|
|
124
|
-
*
|
|
122
|
+
* Check if a tarball should be served based on filter plugins, using only
|
|
123
|
+
* local metadata. Returns true (defer) when the version isn't cached locally
|
|
124
|
+
* — the uplink-sync path in getTarball re-checks filters after sync, which
|
|
125
|
+
* avoids a redundant uplink round-trip and double filter application.
|
|
125
126
|
*/
|
|
126
127
|
private _isTarballAllowedByFilters;
|
|
127
128
|
/**
|
package/build/lib/storage.js
CHANGED
|
@@ -232,6 +232,11 @@ class Storage {
|
|
|
232
232
|
if (_lodash.default.isNil(syncErr) === false) {
|
|
233
233
|
return readStream.emit('error', syncErr);
|
|
234
234
|
}
|
|
235
|
+
// _syncUplinksMetadata returns filter-applied metadata; if the
|
|
236
|
+
// version was removed by a filter, surface a 404 like a missing tarball.
|
|
237
|
+
if (self.filters?.length && !(0, _utils.hasTarball)(syncInfo, filename)) {
|
|
238
|
+
return readStream.emit('error', err404);
|
|
239
|
+
}
|
|
235
240
|
if (_lodash.default.isNil(syncInfo._distfiles) || _lodash.default.isNil(syncInfo._distfiles[filename])) {
|
|
236
241
|
return readStream.emit('error', err404);
|
|
237
242
|
}
|
|
@@ -626,9 +631,10 @@ class Storage {
|
|
|
626
631
|
}
|
|
627
632
|
|
|
628
633
|
/**
|
|
629
|
-
* Check if a tarball should be served based on filter plugins
|
|
630
|
-
*
|
|
631
|
-
*
|
|
634
|
+
* Check if a tarball should be served based on filter plugins, using only
|
|
635
|
+
* local metadata. Returns true (defer) when the version isn't cached locally
|
|
636
|
+
* — the uplink-sync path in getTarball re-checks filters after sync, which
|
|
637
|
+
* avoids a redundant uplink round-trip and double filter application.
|
|
632
638
|
*/
|
|
633
639
|
async _isTarballAllowedByFilters(name, filename) {
|
|
634
640
|
if (!this.filters?.length) {
|
|
@@ -636,21 +642,22 @@ class Storage {
|
|
|
636
642
|
}
|
|
637
643
|
try {
|
|
638
644
|
const pkgMetadata = await this.localStorage.getPackageMetadataAsync(name);
|
|
645
|
+
if (!(0, _utils.hasTarball)(pkgMetadata, filename)) {
|
|
646
|
+
return true;
|
|
647
|
+
}
|
|
639
648
|
const {
|
|
640
649
|
filteredPackage
|
|
641
650
|
} = await this._applyFilters(pkgMetadata);
|
|
642
|
-
return
|
|
651
|
+
return (0, _utils.hasTarball)(filteredPackage, filename);
|
|
643
652
|
} catch (err) {
|
|
644
653
|
if (err?.status === _constants.HTTP_STATUS.NOT_FOUND) {
|
|
645
|
-
|
|
646
|
-
debug('package %o not cached locally, skipping tarball filter check', name);
|
|
647
|
-
} else {
|
|
648
|
-
this.logger.error({
|
|
649
|
-
package: name,
|
|
650
|
-
fileName: filename,
|
|
651
|
-
err
|
|
652
|
-
}, 'error checking filters for tarball @{fileName} of package @{package}: @{err.message}');
|
|
654
|
+
return true;
|
|
653
655
|
}
|
|
656
|
+
this.logger.error({
|
|
657
|
+
package: name,
|
|
658
|
+
fileName: filename,
|
|
659
|
+
err
|
|
660
|
+
}, 'error checking filters for tarball @{fileName} of package @{package}: @{err.message}');
|
|
654
661
|
return true;
|
|
655
662
|
}
|
|
656
663
|
}
|
|
@@ -673,4 +680,4 @@ class Storage {
|
|
|
673
680
|
}
|
|
674
681
|
}
|
|
675
682
|
var _default = exports.default = Storage;
|
|
676
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYXN5bmMiLCJfZGVidWciLCJfbG9kYXNoIiwiX3N0cmVhbSIsIl9jb25maWciLCJfY29yZSIsIl9sb2FkZXJzIiwiX2xvY2FsU3RvcmFnZUxlZ2FjeSIsIl9zZWFyY2hJbmRleGVyIiwiX3N0cmVhbXMiLCJfbG9nZ2VyIiwiX2NvbnN0YW50cyIsIl9sb2NhbFN0b3JhZ2UiLCJfbWV0YWRhdGFVdGlscyIsIl9zdG9yYWdlVXRpbHMiLCJfdXBTdG9yYWdlIiwiX3VwbGlua1V0aWwiLCJfdXRpbHMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImJ1aWxkRGVidWciLCJTdG9yYWdlIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJ1cGxpbmtzIiwic2V0dXBVcExpbmtzIiwibG9nZ2VyIiwibG9jYWxTdG9yYWdlIiwiaW5pdCIsImZpbHRlcnMiLCJzdG9yYWdlSW5zdGFuY2UiLCJsb2FkU3RvcmFnZSIsIkxvY2FsU3RvcmFnZSIsImdldFNlY3JldCIsImFzeW5jTG9hZFBsdWdpbiIsInBsdWdpbiIsImZpbHRlcl9tZXRhZGF0YSIsInNlcnZlclNldHRpbmdzIiwicGx1Z2luUHJlZml4IiwiUExVR0lOX0NBVEVHT1JZIiwiRklMVEVSIiwibGVuZ3RoIiwibG9hZFN0b3JlUGx1Z2luIiwiXyIsImlzTmlsIiwiYXNzZXJ0Iiwic3RvcmFnZSIsIkxvY2FsRGF0YWJhc2VQbHVnaW4iLCJpbmZvIiwibmFtZSIsInBsdWdpbkNhdGVnb3J5IiwiU1RPUkFHRSIsInBsdWdpbnMiLCJzdG9yZSIsImdldFBhY2thZ2VTdG9yYWdlIiwid2FybiIsImhlYWQiLCJhZGRQYWNrYWdlIiwibWV0YWRhdGEiLCJjYWxsYmFjayIsImNoZWNrUGFja2FnZUxvY2FsIiwiY2hlY2tQYWNrYWdlUmVtb3RlIiwiX2lzQWxsb3dQdWJsaXNoT2ZmbGluZSIsIl9zeW5jVXBsaW5rc01ldGFkYXRhIiwiYmluZCIsInB1Ymxpc2hQYWNrYWdlIiwiZXJyIiwicHVibGlzaCIsImlzQm9vbGVhbiIsImFsbG93X29mZmxpbmUiLCJyZWFkVG9rZW5zIiwiZmlsdGVyIiwic2F2ZVRva2VuIiwidG9rZW4iLCJkZWxldGVUb2tlbiIsInVzZXIiLCJ0b2tlbktleSIsImFkZFZlcnNpb24iLCJ2ZXJzaW9uIiwidGFnIiwibWVyZ2VUYWdzIiwidGFnSGFzaCIsImNoYW5nZVBhY2thZ2UiLCJyZXZpc2lvbiIsInJlbW92ZVBhY2thZ2UiLCJTZWFyY2hNZW1vcnlJbmRleGVyIiwicmVtb3ZlIiwiY2F0Y2giLCJyZWFzb24iLCJlcnJvciIsInJlbW92ZVRhcmJhbGwiLCJmaWxlbmFtZSIsImFkZFRhcmJhbGwiLCJoYXNMb2NhbFRhcmJhbGwiLCJzZWxmIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJsb2NhbFN0cmVhbSIsImdldFRhcmJhbGwiLCJpc09wZW4iLCJvbiIsInN0YXR1cyIsIkhUVFBfU1RBVFVTIiwiTk9UX0ZPVU5EIiwiYWJvcnQiLCJyZWFkU3RyZWFtIiwiUmVhZFRhcmJhbGwiLCJfaXNUYXJiYWxsQWxsb3dlZEJ5RmlsdGVycyIsInRoZW4iLCJhbGxvd2VkIiwiZW1pdCIsIkVycm9yQ29kZSIsImdldE5vdEZvdW5kIiwiQVBJX0VSUk9SIiwiTk9fUEFDS0FHRSIsImVycjQwNCIsImxvb2t1cEZyb21VcGxpbmtzIiwic3luY0VyciIsInN5bmNJbmZvIiwiX2Rpc3RmaWxlcyIsInNlcnZlRmlsZSIsImdldFBhY2thZ2VNZXRhZGF0YUFzeW5jIiwidiIsInBpcGUiLCJmaWxlIiwidXBsaW5rIiwidXBsaW5rSWQiLCJoYXNQcm94eVRvIiwicGFja2FnZXMiLCJQcm94eVN0b3JhZ2UiLCJ1cmwiLCJjYWNoZSIsIl9hdXRvZ2VuZXJhdGVkIiwic2F2ZXN0cmVhbSIsIm9uX29wZW4iLCJyc3RyZWFtMiIsImZldGNoVGFyYmFsbCIsImRvbmUiLCJmaWxlTmFtZSIsImdldFBhY2thZ2UiLCJvcHRpb25zIiwiZ2V0UGFja2FnZU1ldGFkYXRhIiwiZGF0YSIsIklOVEVSTkFMX0VSUk9SIiwicmVxIiwidXBsaW5rc0xvb2siLCJnZXRQYWNrYWdlU3luVXBMaW5rc0NhbGxiYWNrIiwicmVzdWx0IiwidXBsaW5rRXJyb3JzIiwibm9ybWFsaXplRGlzdFRhZ3MiLCJjbGVhblVwTGlua3NSZWYiLCJrZWVwVXBMaW5rRGF0YSIsIl9hdHRhY2htZW50cyIsImFiYnJldmlhdGVkIiwiY29udmVydEFiYnJldmlhdGVkTWFuaWZlc3QiLCJzZWFyY2giLCJzdGFydGtleSIsInNlYXJjaFN0cmVhbSIsIlN0cmVhbSIsIlBhc3NUaHJvdWdoIiwib2JqZWN0TW9kZSIsImFzeW5jIiwiZWFjaFNlcmllcyIsIk9iamVjdCIsImtleXMiLCJ1cF9uYW1lIiwiY2IiLCJxdWVyeSIsImxvY2FsIiwidW5kZWZpbmVkIiwidXBsaW5rU3RyZWFtIiwiZW5kIiwibG9jYWxTZWFyY2hTdHJlYW0iLCJnZXRMb2NhbERhdGFiYXNlIiwic3RvcmFnZVBsdWdpbiIsImdldCIsImxvY2FscyIsIl9jb2xsZWN0TG9jYWxQYWNrYWdlcyIsInBrZ01ldGFkYXRhIiwiZmlsdGVyZWRQYWNrYWdlIiwiX2FwcGx5RmlsdGVycyIsImxhdGVzdCIsIkRJU1RfVEFHUyIsInZlcnNpb25zIiwidGltZUxpc3QiLCJ0aW1lIiwidXNlcnMiLCJwdXNoIiwicGFja2FnZSIsInBhY2thZ2VJbmZvIiwiZm91bmQiLCJ1cExpbmtzIiwiaGFzVG9Mb29rSW50b1VwbGlua3MiLCJnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZSIsIm1hcCIsInVwTGluayIsIl9vcHRpb25zIiwiYXNzaWduIiwidXBMaW5rTWV0YSIsIl91cGxpbmtzIiwidXBuYW1lIiwiaXNPYmplY3QiLCJmZXRjaGVkIiwiRGF0ZSIsIm5vdyIsIm1heGFnZSIsImV0YWciLCJnZXRSZW1vdGVNZXRhZGF0YSIsInVwTGlua1Jlc3BvbnNlIiwiZVRhZyIsInJlbW90ZVN0YXR1cyIsImdldEludGVybmFsRXJyb3IiLCJ2YWxpZGF0aW9uVXRpbHMiLCJub3JtYWxpemVNZXRhZGF0YSIsInN1YiIsIm1lcmdlVXBsaW5rVGltZUludG9Mb2NhbCIsInVwZGF0ZVZlcnNpb25zSGlkZGVuVXBMaW5rIiwibWVyZ2VWZXJzaW9ucyIsInVwTGlua3NFcnJvcnMiLCJBcnJheSIsImlzQXJyYXkiLCJ1cGxpbmtUaW1lb3V0RXJyb3IiLCJpIiwiaiIsImNvZGUiLCJnZXRTZXJ2aWNlVW5hdmFpbGFibGUiLCJmaWx0ZXJFcnJvcnMiLCJwYWNrYWdlSnNvbkxvY2FsIiwidXBkYXRlVmVyc2lvbnNBc3luYyIsImNvbmNhdCIsInZhbHVlcyIsInNvbWUiLCJkaXN0IiwidGFyYmFsbCIsImVuZHNXaXRoIiwiX3VwZGF0ZVZlcnNpb25zSGlkZGVuVXBMaW5rIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiU3ltYm9sIiwiZm9yIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9zdG9yYWdlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBhc3luYyBmcm9tICdhc3luYyc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFN0cmVhbSBmcm9tICdzdHJlYW0nO1xuXG5pbXBvcnQgeyBoYXNQcm94eVRvIH0gZnJvbSAnQHZlcmRhY2Npby9jb25maWcnO1xuaW1wb3J0IHsgUExVR0lOX0NBVEVHT1JZLCBwbHVnaW5VdGlscywgdmFsaWRhdGlvblV0aWxzIH0gZnJvbSAnQHZlcmRhY2Npby9jb3JlJztcbmltcG9ydCB7IGFzeW5jTG9hZFBsdWdpbiB9IGZyb20gJ0B2ZXJkYWNjaW8vbG9hZGVycyc7XG5pbXBvcnQgTG9jYWxEYXRhYmFzZVBsdWdpbiBmcm9tICdAdmVyZGFjY2lvL2xvY2FsLXN0b3JhZ2UtbGVnYWN5JztcbmltcG9ydCB7IFNlYXJjaE1lbW9yeUluZGV4ZXIgfSBmcm9tICdAdmVyZGFjY2lvL3NlYXJjaC1pbmRleGVyJztcbmltcG9ydCB7IFJlYWRUYXJiYWxsIH0gZnJvbSAnQHZlcmRhY2Npby9zdHJlYW1zJztcbmltcG9ydCB7XG4gIENhbGxiYWNrLFxuICBDb25maWcsXG4gIERpc3RGaWxlLFxuICBMb2dnZXIsXG4gIE1hbmlmZXN0LFxuICBNZXJnZVRhZ3MsXG4gIFZlcnNpb24sXG4gIFZlcnNpb25zLFxufSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7IEdlbmVyaWNCb2R5LCBUb2tlbiwgVG9rZW5GaWx0ZXIgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgU3RvcmFnZVBsdWdpbkxlZ2FjeSB9IGZyb20gJy4uLy4uL3R5cGVzL2N1c3RvbSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9saWIvbG9nZ2VyJztcbmltcG9ydCB7IElQbHVnaW5GaWx0ZXJzLCBJU3luY1VwbGlua3MsIFN0cmluZ1ZhbHVlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBESVNUX1RBR1MsIEhUVFBfU1RBVFVTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IExvY2FsU3RvcmFnZSwgeyBTdG9yYWdlUGx1Z2luIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlJztcbmltcG9ydCB7IG1lcmdlVmVyc2lvbnMgfSBmcm9tICcuL21ldGFkYXRhLXV0aWxzJztcbmltcG9ydCB7XG4gIGNoZWNrUGFja2FnZUxvY2FsLFxuICBjaGVja1BhY2thZ2VSZW1vdGUsXG4gIGNsZWFuVXBMaW5rc1JlZixcbiAgY29udmVydEFiYnJldmlhdGVkTWFuaWZlc3QsXG4gIGdlbmVyYXRlUGFja2FnZVRlbXBsYXRlLFxuICBtZXJnZVVwbGlua1RpbWVJbnRvTG9jYWwsXG4gIHB1Ymxpc2hQYWNrYWdlLFxufSBmcm9tICcuL3N0b3JhZ2UtdXRpbHMnO1xuaW1wb3J0IFByb3h5U3RvcmFnZSBmcm9tICcuL3VwLXN0b3JhZ2UnO1xuaW1wb3J0IHsgc2V0dXBVcExpbmtzLCB1cGRhdGVWZXJzaW9uc0hpZGRlblVwTGluayB9IGZyb20gJy4vdXBsaW5rLXV0aWwnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBpc09iamVjdCwgbm9ybWFsaXplRGlzdFRhZ3MgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVidWcgPSBidWlsZERlYnVnKCd2ZXJkYWNjaW86c3RvcmFnZScpO1xuXG5jbGFzcyBTdG9yYWdlIHtcbiAgcHVibGljIGxvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlO1xuICBwdWJsaWMgY29uZmlnOiBDb25maWc7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIHVwbGlua3M6IFJlY29yZDxzdHJpbmcsIFByb3h5U3RvcmFnZT47XG4gIHB1YmxpYyBmaWx0ZXJzOiBJUGx1Z2luRmlsdGVycyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnVwbGlua3MgPSBzZXR1cFVwTGlua3MoY29uZmlnKTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMubG9jYWxTdG9yYWdlID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0KGNvbmZpZzogQ29uZmlnLCBmaWx0ZXJzPzogSVBsdWdpbkZpbHRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2UgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgICBjb25zdCBzdG9yYWdlSW5zdGFuY2UgPSBhd2FpdCB0aGlzLmxvYWRTdG9yYWdlKGNvbmZpZywgdGhpcy5sb2dnZXIpO1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UgPSBuZXcgTG9jYWxTdG9yYWdlKHRoaXMuY29uZmlnLCBsb2dnZXIsIHN0b3JhZ2VJbnN0YW5jZSk7XG4gICAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZS5nZXRTZWNyZXQoY29uZmlnKTtcbiAgICAgIGRlYnVnKCdpbml0aWFsaXphdGlvbiBjb21wbGV0ZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3N0b3JhZ2UgaGFzIGJlZW4gYWxyZWFkeSBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5maWx0ZXJzKSB7XG4gICAgICB0aGlzLmZpbHRlcnMgPSBhd2FpdCBhc3luY0xvYWRQbHVnaW48cGx1Z2luVXRpbHMuTWFuaWZlc3RGaWx0ZXI8dW5rbm93bj4+KFxuICAgICAgICB0aGlzLmNvbmZpZy5maWx0ZXJzLFxuICAgICAgICB7XG4gICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgICAgICB9LFxuICAgICAgICAocGx1Z2luOiBwbHVnaW5VdGlscy5NYW5pZmVzdEZpbHRlcjxDb25maWc+KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBwbHVnaW4uZmlsdGVyX21ldGFkYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdGhpcy5jb25maWc/LnNlcnZlclNldHRpbmdzPy5wbHVnaW5QcmVmaXgsXG4gICAgICAgIFBMVUdJTl9DQVRFR09SWS5GSUxURVJcbiAgICAgICk7XG4gICAgICBkZWJ1ZygnZmlsdGVycyBhdmFpbGFibGUgJW8nLCB0aGlzLmZpbHRlcnMubGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRTdG9yYWdlKGNvbmZpZzogQ29uZmlnLCBsb2dnZXI6IExvZ2dlcik6IFByb21pc2U8U3RvcmFnZVBsdWdpbj4ge1xuICAgIGNvbnN0IFN0b3JhZ2UgPSBhd2FpdCB0aGlzLmxvYWRTdG9yZVBsdWdpbigpO1xuICAgIGlmIChfLmlzTmlsKFN0b3JhZ2UpKSB7XG4gICAgICBhc3NlcnQodGhpcy5jb25maWcuc3RvcmFnZSwgJ0NPTkZJRzogc3RvcmFnZSBwYXRoIG5vdCBkZWZpbmVkJyk7XG4gICAgICBkZWJ1Zygnbm8gY3VzdG9tIHN0b3JhZ2UgZm91bmQsIGxvYWRpbmcgZGVmYXVsdCBzdG9yYWdlIEB2ZXJkYWNjaW8vbG9jYWwtc3RvcmFnZScpO1xuICAgICAgY29uc3QgbG9jYWxTdG9yYWdlID0gbmV3IExvY2FsRGF0YWJhc2VQbHVnaW4oY29uZmlnLCBsb2dnZXIpO1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIHsgbmFtZTogJ0B2ZXJkYWNjaW8vbG9jYWwtc3RvcmFnZScsIHBsdWdpbkNhdGVnb3J5OiBQTFVHSU5fQ0FURUdPUlkuU1RPUkFHRSB9LFxuICAgICAgICAncGx1Z2luIEB7bmFtZX0gc3VjY2Vzc2Z1bGx5IGxvYWRlZCAoQHtwbHVnaW5DYXRlZ29yeX0pJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2U7XG4gICAgfVxuICAgIHJldHVybiBTdG9yYWdlIGFzIFN0b3JhZ2VQbHVnaW47XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRTdG9yZVBsdWdpbigpOiBQcm9taXNlPFN0b3JhZ2VQbHVnaW5MZWdhY3k8Q29uZmlnPiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHBsdWdpbnM6IFN0b3JhZ2VQbHVnaW5MZWdhY3k8Q29uZmlnPltdID0gYXdhaXQgYXN5bmNMb2FkUGx1Z2luPFxuICAgICAgcGx1Z2luVXRpbHMuU3RvcmFnZTx1bmtub3duPlxuICAgID4oXG4gICAgICB0aGlzLmNvbmZpZy5zdG9yZSxcbiAgICAgIHtcbiAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgICAgbG9nZ2VyOiB0aGlzLmxvZ2dlcixcbiAgICAgIH0sXG4gICAgICAocGx1Z2luKSA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGx1Z2luLmdldFBhY2thZ2VTdG9yYWdlICE9PSAndW5kZWZpbmVkJztcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgICAgdGhpcy5jb25maWc/LnNlcnZlclNldHRpbmdzPy5wbHVnaW5QcmVmaXgsXG4gICAgICBQTFVHSU5fQ0FURUdPUlkuU1RPUkFHRVxuICAgICk7XG5cbiAgICBpZiAocGx1Z2lucy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICAnbW9yZSB0aGFuIG9uZSBzdG9yYWdlIHBsdWdpbnMgaGFzIGJlZW4gZGV0ZWN0ZWQsIG11bHRpcGxlIHN0b3JhZ2UgYXJlIG5vdCBzdXBwb3J0ZWQsIG9uZSB3aWxsIGJlIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHknXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBfLmhlYWQocGx1Z2lucyk7XG4gIH1cblxuICAvKipcbiAgICogIEFkZCBhIHtuYW1lfSBwYWNrYWdlIHRvIGEgc3lzdGVtXG4gICBGdW5jdGlvbiBjaGVja3MgaWYgcGFja2FnZSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgYXZhaWxhYmxlIGZyb20gdXBsaW5rcy5cbiAgIElmIGl0IGlzbid0LCB3ZSBjcmVhdGUgcGFja2FnZSBsb2NhbGx5XG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAod3JpdGUpICYmIHVwbGlua3NcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKG5hbWU6IHN0cmluZywgbWV0YWRhdGE6IGFueSwgY2FsbGJhY2s6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjaGVja1BhY2thZ2VMb2NhbChuYW1lLCB0aGlzLmxvY2FsU3RvcmFnZSk7XG4gICAgICBhd2FpdCBjaGVja1BhY2thZ2VSZW1vdGUoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHRoaXMuX2lzQWxsb3dQdWJsaXNoT2ZmbGluZSgpLFxuICAgICAgICB0aGlzLl9zeW5jVXBsaW5rc01ldGFkYXRhLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgICBhd2FpdCBwdWJsaXNoUGFja2FnZShuYW1lLCBtZXRhZGF0YSwgdGhpcy5sb2NhbFN0b3JhZ2UpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0FsbG93UHVibGlzaE9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB0aGlzLmNvbmZpZy5wdWJsaXNoICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgXy5pc0Jvb2xlYW4odGhpcy5jb25maWcucHVibGlzaC5hbGxvd19vZmZsaW5lKSAmJlxuICAgICAgdGhpcy5jb25maWcucHVibGlzaC5hbGxvd19vZmZsaW5lXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkVG9rZW5zKGZpbHRlcjogVG9rZW5GaWx0ZXIpOiBQcm9taXNlPFRva2VuW10+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2UucmVhZFRva2VucyhmaWx0ZXIpO1xuICB9XG5cbiAgcHVibGljIHNhdmVUb2tlbih0b2tlbjogVG9rZW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2Uuc2F2ZVRva2VuKHRva2VuKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVUb2tlbih1c2VyOiBzdHJpbmcsIHRva2VuS2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5kZWxldGVUb2tlbih1c2VyLCB0b2tlbktleSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHZlcnNpb24gb2YgcGFja2FnZSB7bmFtZX0gdG8gYSBzeXN0ZW1cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICh3cml0ZSlcbiAgICovXG4gIHB1YmxpYyBhZGRWZXJzaW9uKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgbWV0YWRhdGE6IFZlcnNpb24sXG4gICAgdGFnOiBTdHJpbmdWYWx1ZSxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UuYWRkVmVyc2lvbihuYW1lLCB2ZXJzaW9uLCBtZXRhZGF0YSwgdGFnLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogVGFncyBhIHBhY2thZ2UgdmVyc2lvbiB3aXRoIGEgcHJvdmlkZWQgdGFnXG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAod3JpdGUpXG4gICAqL1xuICBwdWJsaWMgbWVyZ2VUYWdzKG5hbWU6IHN0cmluZywgdGFnSGFzaDogTWVyZ2VUYWdzLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5tZXJnZVRhZ3MobmFtZSwgdGFnSGFzaCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBhbiBleGlzdGluZyBwYWNrYWdlIChpLmUuIHVucHVibGlzaCBvbmUgdmVyc2lvbilcbiAgIEZ1bmN0aW9uIGNoYW5nZXMgYSBwYWNrYWdlIGluZm8gZnJvbSBsb2NhbCBzdG9yYWdlIGFuZCBhbGwgdXBsaW5rcyB3aXRoIHdyaXRlIGFjY2Vzcy4vXG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAod3JpdGUpXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlUGFja2FnZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbWV0YWRhdGE6IE1hbmlmZXN0LFxuICAgIHJldmlzaW9uOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLmNoYW5nZVBhY2thZ2UobmFtZSwgbWV0YWRhdGEsIHJldmlzaW9uLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgcGFja2FnZSBmcm9tIGEgc3lzdGVtXG4gICBGdW5jdGlvbiByZW1vdmVzIGEgcGFja2FnZSBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICh3cml0ZSlcbiAgICovXG4gIHB1YmxpYyByZW1vdmVQYWNrYWdlKG5hbWU6IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlUGFja2FnZShuYW1lLCBjYWxsYmFjayk7XG4gICAgLy8gdXBkYXRlIHRoZSBpbmRleGVyXG4gICAgU2VhcmNoTWVtb3J5SW5kZXhlci5yZW1vdmUobmFtZSkuY2F0Y2goKHJlYXNvbikgPT4ge1xuICAgICAgZGVidWcoJ2luZGV4ZXIgaGFzIGZhaWxlZCBvbiByZW1vdmUgaXRlbSAlbycsIHJlYXNvbik7XG4gICAgICBsb2dnZXIuZXJyb3IoJ2luZGV4ZXIgaGFzIGZhaWxlZCBvbiByZW1vdmUgaXRlbScpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICBSZW1vdmUgYSB0YXJiYWxsIGZyb20gYSBzeXN0ZW1cbiAgIEZ1bmN0aW9uIHJlbW92ZXMgYSB0YXJiYWxsIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgIFRhcmJhbGwgaW4gcXVlc3Rpb24gc2hvdWxkIG5vdCBiZSBsaW5rZWQgdG8gaW4gYW55IGV4aXN0aW5nXG4gICB2ZXJzaW9ucywgaS5lLiBwYWNrYWdlIHZlcnNpb24gc2hvdWxkIGJlIHVucHVibGlzaGVkIGZpcnN0LlxuICAgVXNlZCBzdG9yYWdlOiBsb2NhbCAod3JpdGUpXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVGFyYmFsbChuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIHJldmlzaW9uOiBzdHJpbmcsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZVRhcmJhbGwobmFtZSwgZmlsZW5hbWUsIHJldmlzaW9uLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogVXBsb2FkIGEgdGFyYmFsbCBmb3Ige25hbWV9IHBhY2thZ2VcbiAgIEZ1bmN0aW9uIGlzIHN5bmNocm9ub3VzIGFuZCByZXR1cm5zIGEgV3JpdGFibGVTdHJlYW1cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICh3cml0ZSlcbiAgICovXG4gIHB1YmxpYyBhZGRUYXJiYWxsKG5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5hZGRUYXJiYWxsKG5hbWUsIGZpbGVuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNMb2NhbFRhcmJhbGwobmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGxldCBsb2NhbFN0cmVhbTogYW55ID0gc2VsZi5sb2NhbFN0b3JhZ2UuZ2V0VGFyYmFsbChuYW1lLCBmaWxlbmFtZSk7XG4gICAgICBsZXQgaXNPcGVuID0gZmFsc2U7XG4gICAgICBsb2NhbFN0cmVhbS5vbignZXJyb3InLCAoZXJyKTogYW55ID0+IHtcbiAgICAgICAgaWYgKGlzT3BlbiB8fCBlcnIuc3RhdHVzICE9PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsb2NhbCByZXBvcnRlZCA0MDQgb3IgcmVxdWVzdCB3YXMgYWJvcnRlZCBhbHJlYWR5XG4gICAgICAgIGlmIChsb2NhbFN0cmVhbSkge1xuICAgICAgICAgIGxvY2FsU3RyZWFtLmFib3J0KCk7XG4gICAgICAgICAgbG9jYWxTdHJlYW0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgICBsb2NhbFN0cmVhbS5vbignb3BlbicsIGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgbG9jYWxTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgbG9jYWxTdHJlYW0gPSBudWxsO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgIEdldCBhIHRhcmJhbGwgZnJvbSBhIHN0b3JhZ2UgZm9yIHtuYW1lfSBwYWNrYWdlXG4gICBGdW5jdGlvbiBpcyBzeW5jaHJvbm91cyBhbmQgcmV0dXJucyBhIFJlYWRhYmxlU3RyZWFtXG4gICBGdW5jdGlvbiB0cmllcyB0byByZWFkIHRhcmJhbGwgbG9jYWxseSwgaWYgaXQgZmFpbHMgdGhlbiBpdCByZWFkcyBwYWNrYWdlXG4gICBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBmaWd1cmUgb3V0IHdoZXJlIHdlIGNhbiBnZXQgdGhpcyB0YXJiYWxsIGZyb21cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsIHx8IHVwbGluayAoanVzdCBvbmUpXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFyYmFsbChuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZWFkU3RyZWFtID0gbmV3IFJlYWRUYXJiYWxsKHt9KTtcbiAgICByZWFkU3RyZWFtLmFib3J0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJiYWxsIGlzIGFsbG93ZWQgYnkgZmlsdGVyIHBsdWdpbnMgYmVmb3JlIHNlcnZpbmcuXG4gICAgLy8gRmlsdGVycyBtYXkgYmxvY2sgc3BlY2lmaWMgdmVyc2lvbnMsIHNvIHdlIHZlcmlmeSB0aGUgdGFyYmFsbCdzIHZlcnNpb25cbiAgICAvLyBzdGlsbCBleGlzdHMgaW4gdGhlIGZpbHRlcmVkIG1ldGFkYXRhLlxuICAgIHRoaXMuX2lzVGFyYmFsbEFsbG93ZWRCeUZpbHRlcnMobmFtZSwgZmlsZW5hbWUpLnRoZW4oYXN5bmMgKGFsbG93ZWQpID0+IHtcbiAgICAgIGlmICghYWxsb3dlZCkge1xuICAgICAgICByZWFkU3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldE5vdEZvdW5kKEFQSV9FUlJPUi5OT19QQUNLQUdFKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gdHJ5aW5nIGxvY2FsIGZpcnN0XG4gICAgICBsZXQgbG9jYWxTdHJlYW06IGFueSA9IHNlbGYubG9jYWxTdG9yYWdlLmdldFRhcmJhbGwobmFtZSwgZmlsZW5hbWUpO1xuICAgICAgbGV0IGlzT3BlbiA9IGZhbHNlO1xuICAgICAgbG9jYWxTdHJlYW0ub24oJ2Vycm9yJywgKGVycik6IGFueSA9PiB7XG4gICAgICAgIGlmIChpc09wZW4gfHwgZXJyLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbG9jYWwgcmVwb3J0ZWQgNDA0XG4gICAgICAgIGNvbnN0IGVycjQwNCA9IGVycjtcbiAgICAgICAgbG9jYWxTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgbG9jYWxTdHJlYW0gPSBudWxsOyAvLyB3ZSBmb3JjZSBmb3IgZ2FyYmFnZSBjb2xsZWN0b3JcblxuICAgICAgICBjb25zdCBsb29rdXBGcm9tVXBsaW5rcyA9IChpbmZvOiBNYW5pZmVzdCB8IG51bGwpOiB2b2lkID0+IHtcbiAgICAgICAgICBzZWxmLl9zeW5jVXBsaW5rc01ldGFkYXRhKFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGluZm8gYXMgTWFuaWZlc3QsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIChzeW5jRXJyLCBzeW5jSW5mbzogTWFuaWZlc3QpOiBhbnkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXy5pc05pbChzeW5jRXJyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZFN0cmVhbS5lbWl0KCdlcnJvcicsIHN5bmNFcnIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChfLmlzTmlsKHN5bmNJbmZvLl9kaXN0ZmlsZXMpIHx8IF8uaXNOaWwoc3luY0luZm8uX2Rpc3RmaWxlc1tmaWxlbmFtZV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnI0MDQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNlcnZlRmlsZShzeW5jSW5mby5fZGlzdGZpbGVzW2ZpbGVuYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLmxvY2FsU3RvcmFnZS5nZXRQYWNrYWdlTWV0YWRhdGFBc3luYyhuYW1lKS50aGVuKFxuICAgICAgICAgIChpbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5mby5fZGlzdGZpbGVzICYmIF8uaXNOaWwoaW5mby5fZGlzdGZpbGVzW2ZpbGVuYW1lXSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIC8vIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmlsZSBleGlzdHMgbG9jYWxseVxuICAgICAgICAgICAgICBzZXJ2ZUZpbGUoaW5mby5fZGlzdGZpbGVzW2ZpbGVuYW1lXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB3ZSBrbm93IG5vdGhpbmcgYWJvdXQgdGhpcyBmaWxlLCB0cnlpbmcgdG8gZ2V0IGluZm9ybWF0aW9uIGVsc2V3aGVyZVxuICAgICAgICAgICAgICBsb29rdXBGcm9tVXBsaW5rcyhpbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIC8vIHdlIGtub3cgbm90aGluZyBhYm91dCB0aGlzIGZpbGUsIHRyeWluZyB0byBnZXQgaW5mb3JtYXRpb24gZWxzZXdoZXJlXG4gICAgICAgICAgICBsb29rdXBGcm9tVXBsaW5rcyhudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGxvY2FsU3RyZWFtLm9uKCdjb250ZW50LWxlbmd0aCcsIGZ1bmN0aW9uICh2KTogdm9pZCB7XG4gICAgICAgIHJlYWRTdHJlYW0uZW1pdCgnY29udGVudC1sZW5ndGgnLCB2KTtcbiAgICAgIH0pO1xuICAgICAgbG9jYWxTdHJlYW0ub24oJ29wZW4nLCBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIGlzT3BlbiA9IHRydWU7XG4gICAgICAgIGxvY2FsU3RyZWFtLnBpcGUocmVhZFN0cmVhbSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZWFkU3RyZWFtO1xuXG4gICAgLyoqXG4gICAgICogRmV0Y2ggYW5kIGNhY2hlIGxvY2FsL3JlbW90ZSBwYWNrYWdlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZmlsZSBkZWZpbmUgdGhlIHBhY2thZ2Ugc2hhcGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXJ2ZUZpbGUoZmlsZTogRGlzdEZpbGUpOiB2b2lkIHtcbiAgICAgIGxldCB1cGxpbms6IGFueSA9IG51bGw7XG5cbiAgICAgIGZvciAoY29uc3QgdXBsaW5rSWQgaW4gc2VsZi51cGxpbmtzKSB7XG4gICAgICAgIGlmIChoYXNQcm94eVRvKG5hbWUsIHVwbGlua0lkLCBzZWxmLmNvbmZpZy5wYWNrYWdlcykpIHtcbiAgICAgICAgICB1cGxpbmsgPSBzZWxmLnVwbGlua3NbdXBsaW5rSWRdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGxpbmsgPT0gbnVsbCkge1xuICAgICAgICB1cGxpbmsgPSBuZXcgUHJveHlTdG9yYWdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVybDogZmlsZS51cmwsXG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIF9hdXRvZ2VuZXJhdGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZi5jb25maWdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhdmVzdHJlYW06IGFueSA9IG51bGw7XG4gICAgICBpZiAodXBsaW5rLmNvbmZpZy5jYWNoZSkge1xuICAgICAgICBzYXZlc3RyZWFtID0gc2VsZi5sb2NhbFN0b3JhZ2UuYWRkVGFyYmFsbChuYW1lLCBmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBvbl9vcGVuID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAvLyBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2FsbGVkIHR3aWNlXG4gICAgICAgIG9uX29wZW4gPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgY29uc3QgcnN0cmVhbTIgPSB1cGxpbmsuZmV0Y2hUYXJiYWxsKGZpbGUudXJsKTtcbiAgICAgICAgcnN0cmVhbTIub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycik6IHZvaWQge1xuICAgICAgICAgIGlmIChzYXZlc3RyZWFtKSB7XG4gICAgICAgICAgICBzYXZlc3RyZWFtLmFib3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNhdmVzdHJlYW0gPSBudWxsO1xuICAgICAgICAgIHJlYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcnN0cmVhbTIub24oJ2VuZCcsIGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoc2F2ZXN0cmVhbSkge1xuICAgICAgICAgICAgc2F2ZXN0cmVhbS5kb25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByc3RyZWFtMi5vbignY29udGVudC1sZW5ndGgnLCBmdW5jdGlvbiAodik6IHZvaWQge1xuICAgICAgICAgIHJlYWRTdHJlYW0uZW1pdCgnY29udGVudC1sZW5ndGgnLCB2KTtcbiAgICAgICAgICBpZiAoc2F2ZXN0cmVhbSkge1xuICAgICAgICAgICAgc2F2ZXN0cmVhbS5lbWl0KCdjb250ZW50LWxlbmd0aCcsIHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJzdHJlYW0yLnBpcGUocmVhZFN0cmVhbSk7XG4gICAgICAgIGlmIChzYXZlc3RyZWFtKSB7XG4gICAgICAgICAgcnN0cmVhbTIucGlwZShzYXZlc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKHNhdmVzdHJlYW0pIHtcbiAgICAgICAgc2F2ZXN0cmVhbS5vbignb3BlbicsIGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgICBvbl9vcGVuKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNhdmVzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycik6IHZvaWQge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLndhcm4oXG4gICAgICAgICAgICB7IGVycjogZXJyLCBmaWxlTmFtZTogZmlsZSB9LFxuICAgICAgICAgICAgJ2Vycm9yIHNhdmluZyBmaWxlIEB7ZmlsZU5hbWV9OiBAe2Vyci5tZXNzYWdlfVxcbkB7ZXJyLnN0YWNrfSdcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChzYXZlc3RyZWFtKSB7XG4gICAgICAgICAgICBzYXZlc3RyZWFtLmFib3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNhdmVzdHJlYW0gPSBudWxsO1xuICAgICAgICAgIG9uX29wZW4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbl9vcGVuKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICBSZXRyaWV2ZSBhIHBhY2thZ2UgbWV0YWRhdGEgZm9yIHtuYW1lfSBwYWNrYWdlXG4gICBGdW5jdGlvbiBpbnZva2VzIGxvY2FsU3RvcmFnZS5nZXRQYWNrYWdlIGFuZCB1cGxpbmsuZ2V0X3BhY2thZ2UgZm9yIGV2ZXJ5XG4gICB1cGxpbmsgd2l0aCBwcm94eV9hY2Nlc3MgcmlnaHRzIGFnYWluc3Qge25hbWV9IGFuZCBjb21iaW5lcyByZXN1bHRzXG4gICBpbnRvIG9uZSBqc29uIG9iamVjdFxuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgJiYgdXBsaW5rIChwcm94eV9hY2Nlc3MpXG5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnMubmFtZSBQYWNrYWdlIE5hbWVcbiAgICogQHByb3BlcnR5IHtvYmplY3R9ICBvcHRpb25zLnJlcSBFeHByZXNzIGByZXFgIG9iamVjdFxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wdGlvbnMua2VlcFVwTGlua0RhdGEga2VlcCB1cCBsaW5rIGluZm8gaW4gcGFja2FnZSBtZXRhLCBsYXN0IHVwZGF0ZSwgZXRjLlxuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBvcHRpb25zLmNhbGxiYWNrIENhbGxiYWNrIGZvciByZWNlaXZlIGRhdGFcbiAgICovXG4gIHB1YmxpYyBnZXRQYWNrYWdlKG9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5nZXRQYWNrYWdlTWV0YWRhdGEob3B0aW9ucy5uYW1lLCAoZXJyLCBkYXRhKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZXJyICYmICghZXJyLnN0YXR1cyB8fCBlcnIuc3RhdHVzID49IEhUVFBfU1RBVFVTLklOVEVSTkFMX0VSUk9SKSkge1xuICAgICAgICAvLyByZXBvcnQgaW50ZXJuYWwgZXJyb3JzIHJpZ2h0IGF3YXlcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3luY1VwbGlua3NNZXRhZGF0YShcbiAgICAgICAgb3B0aW9ucy5uYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICB7IHJlcTogb3B0aW9ucy5yZXEsIHVwbGlua3NMb29rOiBvcHRpb25zLnVwbGlua3NMb29rIH0sXG4gICAgICAgIGZ1bmN0aW9uIGdldFBhY2thZ2VTeW5VcExpbmtzQ2FsbGJhY2soZXJyLCByZXN1bHQ6IE1hbmlmZXN0LCB1cGxpbmtFcnJvcnMpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5vcm1hbGl6ZURpc3RUYWdzKGNsZWFuVXBMaW5rc1JlZihvcHRpb25zLmtlZXBVcExpbmtEYXRhLCByZXN1bHQpKTtcblxuICAgICAgICAgIC8vIG5wbSBjYW4gdGhyb3cgaWYgdGhpcyBmaWVsZCBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgcmVzdWx0Ll9hdHRhY2htZW50cyA9IHt9O1xuICAgICAgICAgIGlmIChvcHRpb25zLmFiYnJldmlhdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKG51bGwsIGNvbnZlcnRBYmJyZXZpYXRlZE1hbmlmZXN0KHJlc3VsdCksIHVwbGlua0Vycm9ycyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2sobnVsbCwgcmVzdWx0LCB1cGxpbmtFcnJvcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgUmV0cmlldmUgcmVtb3RlIGFuZCBsb2NhbCBwYWNrYWdlcyBtb3JlIHJlY2VudCB0aGFuIHtzdGFydGtleX1cbiAgIEZ1bmN0aW9uIHN0cmVhbXMgYWxsIHBhY2thZ2VzIGZyb20gYWxsIHVwbGlua3MgZmlyc3QsIGFuZCB0aGVuXG4gICBsb2NhbCBwYWNrYWdlcy5cbiAgIE5vdGUgdGhhdCBsb2NhbCBwYWNrYWdlcyBjb3VsZCBvdmVycmlkZSByZWdpc3RyeSBvbmVzIGp1c3QgYmVjYXVzZVxuICAgdGhleSBhcHBlYXIgaW4gSlNPTiBsYXN0LiBUaGF0J3MgYSB0cmFkZS1vZmYgd2UgbWFrZSB0byBhdm9pZFxuICAgbWVtb3J5IGlzc3Vlcy5cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICYmIHVwbGluayAocHJveHlfYWNjZXNzKVxuICAgKiBAcGFyYW0geyp9IHN0YXJ0a2V5XG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKHN0YXJ0a2V5OiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHNlYXJjaFN0cmVhbTogYW55ID0gbmV3IFN0cmVhbS5QYXNzVGhyb3VnaCh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgYXN5bmMuZWFjaFNlcmllcyhcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMudXBsaW5rcyksXG4gICAgICBmdW5jdGlvbiAodXBfbmFtZSwgY2IpOiB2b2lkIHtcbiAgICAgICAgLy8gc2hvcnRjdXQ6IGlmIGBsb2NhbD0xYCBpcyBzdXBwbGllZCwgZG9uJ3QgY2FsbCB1cGxpbmtzXG4gICAgICAgIGlmIChvcHRpb25zLnJlcT8ucXVlcnk/LmxvY2FsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgc2VhcmNoIGZvciB1cGxpbmsgJHt1cF9uYW1lfWApO1xuICAgICAgICAvLyBzZWFyY2ggYnkga2V5d29yZCBmb3IgZWFjaCB1cGxpbmtcbiAgICAgICAgY29uc3QgdXBsaW5rU3RyZWFtID0gc2VsZi51cGxpbmtzW3VwX25hbWVdLnNlYXJjaChvcHRpb25zKTtcbiAgICAgICAgLy8gam9pbiB1cGxpbmsgc3RyZWFtIHdpdGggc3RyZWFtcyBQYXNzVGhyb3VnaFxuICAgICAgICB1cGxpbmtTdHJlYW0ucGlwZShzZWFyY2hTdHJlYW0sIHsgZW5kOiBmYWxzZSB9KTtcbiAgICAgICAgdXBsaW5rU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpOiB2b2lkIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IGVycjogZXJyIH0sICd1cGxpbmsgZXJyb3I6IEB7ZXJyLm1lc3NhZ2V9Jyk7XG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgICAvLyB0byBhdm9pZCBjYWxsIGNhbGxiYWNrIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgY2IgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICAgICAgfSk7XG4gICAgICAgIHVwbGlua1N0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgLy8gdG8gYXZvaWQgY2FsbCBjYWxsYmFjayBtb3JlIHRoYW4gb25jZVxuICAgICAgICAgIGNiID0gZnVuY3Rpb24gKCk6IHZvaWQge307XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlYXJjaFN0cmVhbS5hYm9ydCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgICBpZiAodXBsaW5rU3RyZWFtLmFib3J0KSB7XG4gICAgICAgICAgICB1cGxpbmtTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgICAvLyB0byBhdm9pZCBjYWxsIGNhbGxiYWNrIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgY2IgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICAvLyBleGVjdXRlZCBhZnRlciBhbGwgc2VyaWVzXG4gICAgICBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIC8vIGF0dGFjaCBhIGxvY2FsIHNlYXJjaCByZXN1bHRzXG4gICAgICAgIGNvbnN0IGxvY2FsU2VhcmNoU3RyZWFtID0gc2VsZi5sb2NhbFN0b3JhZ2Uuc2VhcmNoKHN0YXJ0a2V5LCBvcHRpb25zKTtcbiAgICAgICAgc2VhcmNoU3RyZWFtLmFib3J0ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgIGxvY2FsU2VhcmNoU3RyZWFtLmFib3J0KCk7XG4gICAgICAgIH07XG4gICAgICAgIGxvY2FsU2VhcmNoU3RyZWFtLnBpcGUoc2VhcmNoU3RyZWFtLCB7IGVuZDogdHJ1ZSB9KTtcbiAgICAgICAgbG9jYWxTZWFyY2hTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycjogYW55KTogdm9pZCB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoeyBlcnI6IGVyciB9LCAnc2VhcmNoIGVycm9yOiBAe2Vyci5tZXNzYWdlfScpO1xuICAgICAgICAgIHNlYXJjaFN0cmVhbS5lbmQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiBzZWFyY2hTdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgb25seSBwcml2YXRlIGxvY2FsIHBhY2thZ2VzXG4gICAqIEBwYXJhbSB7Kn0gY2FsbGJhY2tcbiAgICovXG4gIHB1YmxpYyBnZXRMb2NhbERhdGFiYXNlKGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnN0b3JhZ2VQbHVnaW4uZ2V0KChlcnIsIGxvY2Fscyk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY29sbGVjdExvY2FsUGFja2FnZXMobG9jYWxzKS50aGVuKFxuICAgICAgICAocGFja2FnZXMpID0+IGNhbGxiYWNrKG51bGwsIHBhY2thZ2VzKSxcbiAgICAgICAgKGVycikgPT4gY2FsbGJhY2soZXJyKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGVhY2ggbG9jYWwgcGFja2FnZSBuYW1lLCBhcHBseSBmaWx0ZXJzLCBhbmQgY29sbGVjdCB0aGUgbGF0ZXN0IHZlcnNpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9jb2xsZWN0TG9jYWxQYWNrYWdlcyhsb2NhbHM6IHN0cmluZ1tdKTogUHJvbWlzZTxWZXJzaW9uW10+IHtcbiAgICBjb25zdCBwYWNrYWdlczogVmVyc2lvbltdID0gW107XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGxvY2Fscykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGtnTWV0YWRhdGEgPSBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZS5nZXRQYWNrYWdlTWV0YWRhdGFBc3luYyhuYW1lKTtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJlZFBhY2thZ2UgfSA9IGF3YWl0IHRoaXMuX2FwcGx5RmlsdGVycyhwa2dNZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IGxhdGVzdCA9IGZpbHRlcmVkUGFja2FnZVtESVNUX1RBR1NdPy5sYXRlc3Q7XG4gICAgICAgIGlmIChsYXRlc3QgJiYgZmlsdGVyZWRQYWNrYWdlLnZlcnNpb25zW2xhdGVzdF0pIHtcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uOiBWZXJzaW9uID0gZmlsdGVyZWRQYWNrYWdlLnZlcnNpb25zW2xhdGVzdF07XG4gICAgICAgICAgY29uc3QgdGltZUxpc3QgPSBmaWx0ZXJlZFBhY2thZ2UudGltZSBhcyBHZW5lcmljQm9keTtcbiAgICAgICAgICBjb25zdCB0aW1lID0gdGltZUxpc3RbbGF0ZXN0XTtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgdmVyc2lvbi50aW1lID0gdGltZTtcblxuICAgICAgICAgIC8vIEFkZCBmb3Igc3RhcnMgYXBpXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHZlcnNpb24udXNlcnMgPSBmaWx0ZXJlZFBhY2thZ2UudXNlcnM7XG5cbiAgICAgICAgICBwYWNrYWdlcy5wdXNoKHZlcnNpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oeyBwYWNrYWdlOiBuYW1lIH0sICdwYWNrYWdlIEB7cGFja2FnZX0gZG9lcyBub3QgaGF2ZSBhIFwibGF0ZXN0XCIgdGFnPycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoeyBlcnIsIHBhY2thZ2U6IG5hbWUgfSwgJ2Vycm9yIHJlYWRpbmcgcGFja2FnZSBAe3BhY2thZ2V9Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYWNrYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmZXRjaGVzIHBhY2thZ2UgbWV0YWRhdGEgZnJvbSB1cGxpbmtzIGFuZCBzeW5jaHJvbml6ZXMgaXQgd2l0aCBsb2NhbCBkYXRhXG4gICBpZiBwYWNrYWdlIGlzIGF2YWlsYWJsZSBsb2NhbGx5LCBpdCBNVVNUIGJlIHByb3ZpZGVkIGluIHBrZ2luZm9cbiAgIHJldHVybnMgY2FsbGJhY2soZXJyLCByZXN1bHQsIHVwbGlua19lcnJvcnMpXG4gICAqL1xuICBwdWJsaWMgX3N5bmNVcGxpbmtzTWV0YWRhdGEoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VJbmZvOiBNYW5pZmVzdCxcbiAgICBvcHRpb25zOiBJU3luY1VwbGlua3MsXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIGxldCBmb3VuZCA9IHRydWU7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgdXBMaW5rczogUHJveHlTdG9yYWdlW10gPSBbXTtcbiAgICBjb25zdCBoYXNUb0xvb2tJbnRvVXBsaW5rcyA9IF8uaXNOaWwob3B0aW9ucy51cGxpbmtzTG9vaykgfHwgb3B0aW9ucy51cGxpbmtzTG9vaztcblxuICAgIGlmICghcGFja2FnZUluZm8pIHtcbiAgICAgIGZvdW5kID0gZmFsc2U7XG4gICAgICBwYWNrYWdlSW5mbyA9IGdlbmVyYXRlUGFja2FnZVRlbXBsYXRlKG5hbWUpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdXBsaW5rIGluIHRoaXMudXBsaW5rcykge1xuICAgICAgaWYgKGhhc1Byb3h5VG8obmFtZSwgdXBsaW5rLCB0aGlzLmNvbmZpZy5wYWNrYWdlcykgJiYgaGFzVG9Mb29rSW50b1VwbGlua3MpIHtcbiAgICAgICAgdXBMaW5rcy5wdXNoKHRoaXMudXBsaW5rc1t1cGxpbmtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYy5tYXAoXG4gICAgICB1cExpbmtzLFxuICAgICAgKHVwTGluazogUHJveHlTdG9yYWdlLCBjYik6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBfb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB1cExpbmtNZXRhID0gcGFja2FnZUluZm8uX3VwbGlua3NbdXBMaW5rLnVwbmFtZV07XG5cbiAgICAgICAgaWYgKGlzT2JqZWN0KHVwTGlua01ldGEpKSB7XG4gICAgICAgICAgY29uc3QgZmV0Y2hlZCA9IHVwTGlua01ldGEuZmV0Y2hlZDtcblxuICAgICAgICAgIGlmIChmZXRjaGVkICYmIERhdGUubm93KCkgLSBmZXRjaGVkIDwgdXBMaW5rLm1heGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX29wdGlvbnMuZXRhZyA9IHVwTGlua01ldGEuZXRhZztcbiAgICAgICAgfVxuXG4gICAgICAgIHVwTGluay5nZXRSZW1vdGVNZXRhZGF0YShuYW1lLCBfb3B0aW9ucywgKGVyciwgdXBMaW5rUmVzcG9uc2UsIGVUYWcpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoZXJyICYmIGVyci5yZW1vdGVTdGF0dXMgPT09IDMwNCkge1xuICAgICAgICAgICAgdXBMaW5rTWV0YS5mZXRjaGVkID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXJyIHx8ICF1cExpbmtSZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNiKG51bGwsIFtlcnIgfHwgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoJ25vIGRhdGEnKV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB1cExpbmtSZXNwb25zZSA9IHZhbGlkYXRpb25VdGlscy5ub3JtYWxpemVNZXRhZGF0YSh1cExpbmtSZXNwb25zZSwgbmFtZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN1YjogJ291dCcsXG4gICAgICAgICAgICAgICAgZXJyOiBlcnIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICdwYWNrYWdlLmpzb24gdmFsaWRhdGluZyBlcnJvciBAeyFlcnIubWVzc2FnZX1cXG5Ae2Vyci5zdGFja30nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNiKG51bGwsIFtlcnJdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYWNrYWdlSW5mby5fdXBsaW5rc1t1cExpbmsudXBuYW1lXSA9IHtcbiAgICAgICAgICAgIGV0YWc6IGVUYWcsXG4gICAgICAgICAgICBmZXRjaGVkOiBEYXRlLm5vdygpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBwYWNrYWdlSW5mbyA9IG1lcmdlVXBsaW5rVGltZUludG9Mb2NhbChwYWNrYWdlSW5mbywgdXBMaW5rUmVzcG9uc2UpO1xuXG4gICAgICAgICAgdXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsodXBMaW5rUmVzcG9uc2UudmVyc2lvbnMsIHVwTGluayk7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWVyZ2VWZXJzaW9ucyhwYWNrYWdlSW5mbywgdXBMaW5rUmVzcG9uc2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdWI6ICdvdXQnLFxuICAgICAgICAgICAgICAgIGVycjogZXJyLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAncGFja2FnZS5qc29uIHBhcnNpbmcgZXJyb3IgQHshZXJyLm1lc3NhZ2V9XFxuQHtlcnIuc3RhY2t9J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYihudWxsLCBbZXJyXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgd2UgZ290IHRvIHRoaXMgcG9pbnQsIGFzc3VtZSB0aGF0IHRoZSBjb3JyZWN0IHBhY2thZ2UgZXhpc3RzXG4gICAgICAgICAgLy8gb24gdGhlIHVwbGlua1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBjYigpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBhc3luYyAoZXJyOiBFcnJvciwgdXBMaW5rc0Vycm9yczogYW55KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGFzc2VydCghZXJyICYmIEFycmF5LmlzQXJyYXkodXBMaW5rc0Vycm9ycykpO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBjb25uZWN0aW9uIHRpbWVvdXQgb3IgcmVzZXQgZXJyb3JzIHdpdGggdXBsaW5rKHMpXG4gICAgICAgIC8vICh0aGVzZSBzaG91bGQgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIHRoZSBwYWNrYWdlIG5vdCBiZWluZyBmb3VuZClcbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIGxldCB1cGxpbmtUaW1lb3V0RXJyb3I7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cExpbmtzRXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodXBMaW5rc0Vycm9yc1tpXSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHVwTGlua3NFcnJvcnNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodXBMaW5rc0Vycm9yc1tpXVtqXSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IHVwTGlua3NFcnJvcnNbaV1bal0uY29kZTtcbiAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAnRVRJTUVET1VUJyB8fCBjb2RlID09PSAnRVNPQ0tFVFRJTUVET1VUJyB8fCBjb2RlID09PSAnRUNPTk5SRVNFVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBsaW5rVGltZW91dEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVwbGlua1RpbWVvdXRFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRTZXJ2aWNlVW5hdmFpbGFibGUoKSwgbnVsbCwgdXBMaW5rc0Vycm9ycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLk5PX1BBQ0tBR0UpLCBudWxsLCB1cExpbmtzRXJyb3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cExpbmtzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyZWRQYWNrYWdlLCBmaWx0ZXJFcnJvcnMgfSA9IGF3YWl0IHNlbGYuX2FwcGx5RmlsdGVycyhcbiAgICAgICAgICAgIHBhY2thZ2VJbmZvIGFzIE1hbmlmZXN0XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgZmlsdGVyZWRQYWNrYWdlLCBmaWx0ZXJFcnJvcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYWNrYWdlSnNvbkxvY2FsID0gYXdhaXQgc2VsZi5sb2NhbFN0b3JhZ2UudXBkYXRlVmVyc2lvbnNBc3luYyhuYW1lLCBwYWNrYWdlSW5mbyk7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXJlZFBhY2thZ2UsIGZpbHRlckVycm9ycyB9ID0gYXdhaXQgc2VsZi5fYXBwbHlGaWx0ZXJzKHBhY2thZ2VKc29uTG9jYWwpO1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbHRlcmVkUGFja2FnZSwgXy5jb25jYXQodXBMaW5rc0Vycm9ycywgZmlsdGVyRXJyb3JzKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCBjb25maWd1cmVkIGZpbHRlciBwbHVnaW5zIHRvIGEgcGFja2FnZSBtYW5pZmVzdCBzZXF1ZW50aWFsbHkuXG4gICAqIEVhY2ggZmlsdGVyJ3Mgb3V0cHV0IGlzIHBhc3NlZCBhcyBpbnB1dCB0byB0aGUgbmV4dCBmaWx0ZXIuXG4gICAqIFJldHVybnMgdGhlIGZpbHRlcmVkIG1hbmlmZXN0IGFuZCBhbnkgZXJyb3JzIHRoYXQgb2NjdXJyZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9hcHBseUZpbHRlcnMoXG4gICAgcGFja2FnZUluZm86IE1hbmlmZXN0XG4gICk6IFByb21pc2U8eyBmaWx0ZXJlZFBhY2thZ2U6IE1hbmlmZXN0OyBmaWx0ZXJFcnJvcnM6IEVycm9yW10gfT4ge1xuICAgIGNvbnN0IGZpbHRlckVycm9yczogRXJyb3JbXSA9IFtdO1xuICAgIGxldCBmaWx0ZXJlZFBhY2thZ2UgPSBwYWNrYWdlSW5mbztcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiB0aGlzLmZpbHRlcnMgPz8gW10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcmVkUGFja2FnZSA9IGF3YWl0IGZpbHRlci5maWx0ZXJfbWV0YWRhdGEoZmlsdGVyZWRQYWNrYWdlKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGZpbHRlckVycm9ycy5wdXNoKGVycik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGZpbHRlcmVkUGFja2FnZSwgZmlsdGVyRXJyb3JzIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YXJiYWxsIHNob3VsZCBiZSBzZXJ2ZWQgYmFzZWQgb24gZmlsdGVyIHBsdWdpbnMuXG4gICAqIExvb2tzIHVwIHBhY2thZ2UgbWV0YWRhdGEsIGFwcGxpZXMgZmlsdGVycywgYW5kIHZlcmlmaWVzIHRoZSB0YXJiYWxsXG4gICAqIHN0aWxsIGJlbG9uZ3MgdG8gYW4gYWxsb3dlZCB2ZXJzaW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfaXNUYXJiYWxsQWxsb3dlZEJ5RmlsdGVycyhuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuZmlsdGVycz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGtnTWV0YWRhdGEgPSBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZS5nZXRQYWNrYWdlTWV0YWRhdGFBc3luYyhuYW1lKTtcbiAgICAgIGNvbnN0IHsgZmlsdGVyZWRQYWNrYWdlIH0gPSBhd2FpdCB0aGlzLl9hcHBseUZpbHRlcnMocGtnTWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmlsdGVyZWRQYWNrYWdlLnZlcnNpb25zIHx8IHt9KS5zb21lKCh2ZXJzaW9uKSA9PlxuICAgICAgICAodmVyc2lvbiBhcyBWZXJzaW9uKS5kaXN0Py50YXJiYWxsPy5lbmRzV2l0aCgnLycgKyBmaWxlbmFtZSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmIChlcnI/LnN0YXR1cyA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgIC8vIFBhY2thZ2Ugbm90IHlldCBjYWNoZWQgbG9jYWxseSDigJQgdGhlIHJlcXVlc3Qgd2lsbCBmYWxsIHRocm91Z2ggdG8gdXBsaW5rcy5cbiAgICAgICAgZGVidWcoJ3BhY2thZ2UgJW8gbm90IGNhY2hlZCBsb2NhbGx5LCBza2lwcGluZyB0YXJiYWxsIGZpbHRlciBjaGVjaycsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgeyBwYWNrYWdlOiBuYW1lLCBmaWxlTmFtZTogZmlsZW5hbWUsIGVyciB9LFxuICAgICAgICAgICdlcnJvciBjaGVja2luZyBmaWx0ZXJzIGZvciB0YXJiYWxsIEB7ZmlsZU5hbWV9IG9mIHBhY2thZ2UgQHtwYWNrYWdlfTogQHtlcnIubWVzc2FnZX0nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgaGlkZGVuIHZhbHVlIGZvciBlYWNoIHZlcnNpb24uXG4gICAqIEBwYXJhbSB7QXJyYXl9IHZlcnNpb25zIGxpc3Qgb2YgdmVyc2lvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gdXBMaW5rIHVwbGluayBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwdWJsaWMgX3VwZGF0ZVZlcnNpb25zSGlkZGVuVXBMaW5rKHZlcnNpb25zOiBWZXJzaW9ucywgdXBMaW5rOiBQcm94eVN0b3JhZ2UpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGkgaW4gdmVyc2lvbnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmVyc2lvbnMsIGkpKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSB2ZXJzaW9uc1tpXTtcblxuICAgICAgICAvLyBob2xkcyBhIFwiaGlkZGVuXCIgdmFsdWUgdG8gYmUgdXNlZCBieSB0aGUgcGFja2FnZSBzdG9yYWdlLlxuICAgICAgICB2ZXJzaW9uW1N5bWJvbC5mb3IoJ19fdmVyZGFjY2lvX3VwbGluaycpXSA9IHVwTGluay51cG5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0b3JhZ2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FB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
|
|
683
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYXN5bmMiLCJfZGVidWciLCJfbG9kYXNoIiwiX3N0cmVhbSIsIl9jb25maWciLCJfY29yZSIsIl9sb2FkZXJzIiwiX2xvY2FsU3RvcmFnZUxlZ2FjeSIsIl9zZWFyY2hJbmRleGVyIiwiX3N0cmVhbXMiLCJfbG9nZ2VyIiwiX2NvbnN0YW50cyIsIl9sb2NhbFN0b3JhZ2UiLCJfbWV0YWRhdGFVdGlscyIsIl9zdG9yYWdlVXRpbHMiLCJfdXBTdG9yYWdlIiwiX3VwbGlua1V0aWwiLCJfdXRpbHMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImJ1aWxkRGVidWciLCJTdG9yYWdlIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJ1cGxpbmtzIiwic2V0dXBVcExpbmtzIiwibG9nZ2VyIiwibG9jYWxTdG9yYWdlIiwiaW5pdCIsImZpbHRlcnMiLCJzdG9yYWdlSW5zdGFuY2UiLCJsb2FkU3RvcmFnZSIsIkxvY2FsU3RvcmFnZSIsImdldFNlY3JldCIsImFzeW5jTG9hZFBsdWdpbiIsInBsdWdpbiIsImZpbHRlcl9tZXRhZGF0YSIsInNlcnZlclNldHRpbmdzIiwicGx1Z2luUHJlZml4IiwiUExVR0lOX0NBVEVHT1JZIiwiRklMVEVSIiwibGVuZ3RoIiwibG9hZFN0b3JlUGx1Z2luIiwiXyIsImlzTmlsIiwiYXNzZXJ0Iiwic3RvcmFnZSIsIkxvY2FsRGF0YWJhc2VQbHVnaW4iLCJpbmZvIiwibmFtZSIsInBsdWdpbkNhdGVnb3J5IiwiU1RPUkFHRSIsInBsdWdpbnMiLCJzdG9yZSIsImdldFBhY2thZ2VTdG9yYWdlIiwid2FybiIsImhlYWQiLCJhZGRQYWNrYWdlIiwibWV0YWRhdGEiLCJjYWxsYmFjayIsImNoZWNrUGFja2FnZUxvY2FsIiwiY2hlY2tQYWNrYWdlUmVtb3RlIiwiX2lzQWxsb3dQdWJsaXNoT2ZmbGluZSIsIl9zeW5jVXBsaW5rc01ldGFkYXRhIiwiYmluZCIsInB1Ymxpc2hQYWNrYWdlIiwiZXJyIiwicHVibGlzaCIsImlzQm9vbGVhbiIsImFsbG93X29mZmxpbmUiLCJyZWFkVG9rZW5zIiwiZmlsdGVyIiwic2F2ZVRva2VuIiwidG9rZW4iLCJkZWxldGVUb2tlbiIsInVzZXIiLCJ0b2tlbktleSIsImFkZFZlcnNpb24iLCJ2ZXJzaW9uIiwidGFnIiwibWVyZ2VUYWdzIiwidGFnSGFzaCIsImNoYW5nZVBhY2thZ2UiLCJyZXZpc2lvbiIsInJlbW92ZVBhY2thZ2UiLCJTZWFyY2hNZW1vcnlJbmRleGVyIiwicmVtb3ZlIiwiY2F0Y2giLCJyZWFzb24iLCJlcnJvciIsInJlbW92ZVRhcmJhbGwiLCJmaWxlbmFtZSIsImFkZFRhcmJhbGwiLCJoYXNMb2NhbFRhcmJhbGwiLCJzZWxmIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJsb2NhbFN0cmVhbSIsImdldFRhcmJhbGwiLCJpc09wZW4iLCJvbiIsInN0YXR1cyIsIkhUVFBfU1RBVFVTIiwiTk9UX0ZPVU5EIiwiYWJvcnQiLCJyZWFkU3RyZWFtIiwiUmVhZFRhcmJhbGwiLCJfaXNUYXJiYWxsQWxsb3dlZEJ5RmlsdGVycyIsInRoZW4iLCJhbGxvd2VkIiwiZW1pdCIsIkVycm9yQ29kZSIsImdldE5vdEZvdW5kIiwiQVBJX0VSUk9SIiwiTk9fUEFDS0FHRSIsImVycjQwNCIsImxvb2t1cEZyb21VcGxpbmtzIiwic3luY0VyciIsInN5bmNJbmZvIiwiaGFzVGFyYmFsbCIsIl9kaXN0ZmlsZXMiLCJzZXJ2ZUZpbGUiLCJnZXRQYWNrYWdlTWV0YWRhdGFBc3luYyIsInYiLCJwaXBlIiwiZmlsZSIsInVwbGluayIsInVwbGlua0lkIiwiaGFzUHJveHlUbyIsInBhY2thZ2VzIiwiUHJveHlTdG9yYWdlIiwidXJsIiwiY2FjaGUiLCJfYXV0b2dlbmVyYXRlZCIsInNhdmVzdHJlYW0iLCJvbl9vcGVuIiwicnN0cmVhbTIiLCJmZXRjaFRhcmJhbGwiLCJkb25lIiwiZmlsZU5hbWUiLCJnZXRQYWNrYWdlIiwib3B0aW9ucyIsImdldFBhY2thZ2VNZXRhZGF0YSIsImRhdGEiLCJJTlRFUk5BTF9FUlJPUiIsInJlcSIsInVwbGlua3NMb29rIiwiZ2V0UGFja2FnZVN5blVwTGlua3NDYWxsYmFjayIsInJlc3VsdCIsInVwbGlua0Vycm9ycyIsIm5vcm1hbGl6ZURpc3RUYWdzIiwiY2xlYW5VcExpbmtzUmVmIiwia2VlcFVwTGlua0RhdGEiLCJfYXR0YWNobWVudHMiLCJhYmJyZXZpYXRlZCIsImNvbnZlcnRBYmJyZXZpYXRlZE1hbmlmZXN0Iiwic2VhcmNoIiwic3RhcnRrZXkiLCJzZWFyY2hTdHJlYW0iLCJTdHJlYW0iLCJQYXNzVGhyb3VnaCIsIm9iamVjdE1vZGUiLCJhc3luYyIsImVhY2hTZXJpZXMiLCJPYmplY3QiLCJrZXlzIiwidXBfbmFtZSIsImNiIiwicXVlcnkiLCJsb2NhbCIsInVuZGVmaW5lZCIsInVwbGlua1N0cmVhbSIsImVuZCIsImxvY2FsU2VhcmNoU3RyZWFtIiwiZ2V0TG9jYWxEYXRhYmFzZSIsInN0b3JhZ2VQbHVnaW4iLCJnZXQiLCJsb2NhbHMiLCJfY29sbGVjdExvY2FsUGFja2FnZXMiLCJwa2dNZXRhZGF0YSIsImZpbHRlcmVkUGFja2FnZSIsIl9hcHBseUZpbHRlcnMiLCJsYXRlc3QiLCJESVNUX1RBR1MiLCJ2ZXJzaW9ucyIsInRpbWVMaXN0IiwidGltZSIsInVzZXJzIiwicHVzaCIsInBhY2thZ2UiLCJwYWNrYWdlSW5mbyIsImZvdW5kIiwidXBMaW5rcyIsImhhc1RvTG9va0ludG9VcGxpbmtzIiwiZ2VuZXJhdGVQYWNrYWdlVGVtcGxhdGUiLCJtYXAiLCJ1cExpbmsiLCJfb3B0aW9ucyIsImFzc2lnbiIsInVwTGlua01ldGEiLCJfdXBsaW5rcyIsInVwbmFtZSIsImlzT2JqZWN0IiwiZmV0Y2hlZCIsIkRhdGUiLCJub3ciLCJtYXhhZ2UiLCJldGFnIiwiZ2V0UmVtb3RlTWV0YWRhdGEiLCJ1cExpbmtSZXNwb25zZSIsImVUYWciLCJyZW1vdGVTdGF0dXMiLCJnZXRJbnRlcm5hbEVycm9yIiwidmFsaWRhdGlvblV0aWxzIiwibm9ybWFsaXplTWV0YWRhdGEiLCJzdWIiLCJtZXJnZVVwbGlua1RpbWVJbnRvTG9jYWwiLCJ1cGRhdGVWZXJzaW9uc0hpZGRlblVwTGluayIsIm1lcmdlVmVyc2lvbnMiLCJ1cExpbmtzRXJyb3JzIiwiQXJyYXkiLCJpc0FycmF5IiwidXBsaW5rVGltZW91dEVycm9yIiwiaSIsImoiLCJjb2RlIiwiZ2V0U2VydmljZVVuYXZhaWxhYmxlIiwiZmlsdGVyRXJyb3JzIiwicGFja2FnZUpzb25Mb2NhbCIsInVwZGF0ZVZlcnNpb25zQXN5bmMiLCJjb25jYXQiLCJfdXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJTeW1ib2wiLCJmb3IiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3N0b3JhZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IGFzeW5jIGZyb20gJ2FzeW5jJztcbmltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgU3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5cbmltcG9ydCB7IGhhc1Byb3h5VG8gfSBmcm9tICdAdmVyZGFjY2lvL2NvbmZpZyc7XG5pbXBvcnQgeyBQTFVHSU5fQ0FURUdPUlksIHBsdWdpblV0aWxzLCB2YWxpZGF0aW9uVXRpbHMgfSBmcm9tICdAdmVyZGFjY2lvL2NvcmUnO1xuaW1wb3J0IHsgYXN5bmNMb2FkUGx1Z2luIH0gZnJvbSAnQHZlcmRhY2Npby9sb2FkZXJzJztcbmltcG9ydCBMb2NhbERhdGFiYXNlUGx1Z2luIGZyb20gJ0B2ZXJkYWNjaW8vbG9jYWwtc3RvcmFnZS1sZWdhY3knO1xuaW1wb3J0IHsgU2VhcmNoTWVtb3J5SW5kZXhlciB9IGZyb20gJ0B2ZXJkYWNjaW8vc2VhcmNoLWluZGV4ZXInO1xuaW1wb3J0IHsgUmVhZFRhcmJhbGwgfSBmcm9tICdAdmVyZGFjY2lvL3N0cmVhbXMnO1xuaW1wb3J0IHtcbiAgQ2FsbGJhY2ssXG4gIENvbmZpZyxcbiAgRGlzdEZpbGUsXG4gIExvZ2dlcixcbiAgTWFuaWZlc3QsXG4gIE1lcmdlVGFncyxcbiAgVmVyc2lvbixcbiAgVmVyc2lvbnMsXG59IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgR2VuZXJpY0JvZHksIFRva2VuLCBUb2tlbkZpbHRlciB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuXG5pbXBvcnQgeyBTdG9yYWdlUGx1Z2luTGVnYWN5IH0gZnJvbSAnLi4vLi4vdHlwZXMvY3VzdG9tJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xuaW1wb3J0IHsgSVBsdWdpbkZpbHRlcnMsIElTeW5jVXBsaW5rcywgU3RyaW5nVmFsdWUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBBUElfRVJST1IsIERJU1RfVEFHUywgSFRUUF9TVEFUVVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgTG9jYWxTdG9yYWdlLCB7IFN0b3JhZ2VQbHVnaW4gfSBmcm9tICcuL2xvY2FsLXN0b3JhZ2UnO1xuaW1wb3J0IHsgbWVyZ2VWZXJzaW9ucyB9IGZyb20gJy4vbWV0YWRhdGEtdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQYWNrYWdlTG9jYWwsXG4gIGNoZWNrUGFja2FnZVJlbW90ZSxcbiAgY2xlYW5VcExpbmtzUmVmLFxuICBjb252ZXJ0QWJicmV2aWF0ZWRNYW5pZmVzdCxcbiAgZ2VuZXJhdGVQYWNrYWdlVGVtcGxhdGUsXG4gIG1lcmdlVXBsaW5rVGltZUludG9Mb2NhbCxcbiAgcHVibGlzaFBhY2thZ2UsXG59IGZyb20gJy4vc3RvcmFnZS11dGlscyc7XG5pbXBvcnQgUHJveHlTdG9yYWdlIGZyb20gJy4vdXAtc3RvcmFnZSc7XG5pbXBvcnQgeyBzZXR1cFVwTGlua3MsIHVwZGF0ZVZlcnNpb25zSGlkZGVuVXBMaW5rIH0gZnJvbSAnLi91cGxpbmstdXRpbCc7XG5pbXBvcnQgeyBFcnJvckNvZGUsIGhhc1RhcmJhbGwsIGlzT2JqZWN0LCBub3JtYWxpemVEaXN0VGFncyB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbzpzdG9yYWdlJyk7XG5cbmNsYXNzIFN0b3JhZ2Uge1xuICBwdWJsaWMgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2U7XG4gIHB1YmxpYyBjb25maWc6IENvbmZpZztcbiAgcHVibGljIGxvZ2dlcjogTG9nZ2VyO1xuICBwdWJsaWMgdXBsaW5rczogUmVjb3JkPHN0cmluZywgUHJveHlTdG9yYWdlPjtcbiAgcHVibGljIGZpbHRlcnM6IElQbHVnaW5GaWx0ZXJzIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMudXBsaW5rcyA9IHNldHVwVXBMaW5rcyhjb25maWcpO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXQoY29uZmlnOiBDb25maWcsIGZpbHRlcnM/OiBJUGx1Z2luRmlsdGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcbiAgICAgIGNvbnN0IHN0b3JhZ2VJbnN0YW5jZSA9IGF3YWl0IHRoaXMubG9hZFN0b3JhZ2UoY29uZmlnLCB0aGlzLmxvZ2dlcik7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZSA9IG5ldyBMb2NhbFN0b3JhZ2UodGhpcy5jb25maWcsIGxvZ2dlciwgc3RvcmFnZUluc3RhbmNlKTtcbiAgICAgIGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlLmdldFNlY3JldChjb25maWcpO1xuICAgICAgZGVidWcoJ2luaXRpYWxpemF0aW9uIGNvbXBsZXRlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Zygnc3RvcmFnZSBoYXMgYmVlbiBhbHJlYWR5IGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpbHRlcnMpIHtcbiAgICAgIHRoaXMuZmlsdGVycyA9IGF3YWl0IGFzeW5jTG9hZFBsdWdpbjxwbHVnaW5VdGlscy5NYW5pZmVzdEZpbHRlcjx1bmtub3duPj4oXG4gICAgICAgIHRoaXMuY29uZmlnLmZpbHRlcnMsXG4gICAgICAgIHtcbiAgICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgICAgIH0sXG4gICAgICAgIChwbHVnaW46IHBsdWdpblV0aWxzLk1hbmlmZXN0RmlsdGVyPENvbmZpZz4pID0+IHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIHBsdWdpbi5maWx0ZXJfbWV0YWRhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgICAgICB9LFxuICAgICAgICB0cnVlLFxuICAgICAgICB0aGlzLmNvbmZpZz8uc2VydmVyU2V0dGluZ3M/LnBsdWdpblByZWZpeCxcbiAgICAgICAgUExVR0lOX0NBVEVHT1JZLkZJTFRFUlxuICAgICAgKTtcbiAgICAgIGRlYnVnKCdmaWx0ZXJzIGF2YWlsYWJsZSAlbycsIHRoaXMuZmlsdGVycy5sZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFN0b3JhZ2UoY29uZmlnOiBDb25maWcsIGxvZ2dlcjogTG9nZ2VyKTogUHJvbWlzZTxTdG9yYWdlUGx1Z2luPiB7XG4gICAgY29uc3QgU3RvcmFnZSA9IGF3YWl0IHRoaXMubG9hZFN0b3JlUGx1Z2luKCk7XG4gICAgaWYgKF8uaXNOaWwoU3RvcmFnZSkpIHtcbiAgICAgIGFzc2VydCh0aGlzLmNvbmZpZy5zdG9yYWdlLCAnQ09ORklHOiBzdG9yYWdlIHBhdGggbm90IGRlZmluZWQnKTtcbiAgICAgIGRlYnVnKCdubyBjdXN0b20gc3RvcmFnZSBmb3VuZCwgbG9hZGluZyBkZWZhdWx0IHN0b3JhZ2UgQHZlcmRhY2Npby9sb2NhbC1zdG9yYWdlJyk7XG4gICAgICBjb25zdCBsb2NhbFN0b3JhZ2UgPSBuZXcgTG9jYWxEYXRhYmFzZVBsdWdpbihjb25maWcsIGxvZ2dlcik7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgeyBuYW1lOiAnQHZlcmRhY2Npby9sb2NhbC1zdG9yYWdlJywgcGx1Z2luQ2F0ZWdvcnk6IFBMVUdJTl9DQVRFR09SWS5TVE9SQUdFIH0sXG4gICAgICAgICdwbHVnaW4gQHtuYW1lfSBzdWNjZXNzZnVsbHkgbG9hZGVkIChAe3BsdWdpbkNhdGVnb3J5fSknXG4gICAgICApO1xuICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcbiAgICB9XG4gICAgcmV0dXJuIFN0b3JhZ2UgYXMgU3RvcmFnZVBsdWdpbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFN0b3JlUGx1Z2luKCk6IFByb21pc2U8U3RvcmFnZVBsdWdpbkxlZ2FjeTxDb25maWc+IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcGx1Z2luczogU3RvcmFnZVBsdWdpbkxlZ2FjeTxDb25maWc+W10gPSBhd2FpdCBhc3luY0xvYWRQbHVnaW48XG4gICAgICBwbHVnaW5VdGlscy5TdG9yYWdlPHVua25vd24+XG4gICAgPihcbiAgICAgIHRoaXMuY29uZmlnLnN0b3JlLFxuICAgICAge1xuICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgICAgfSxcbiAgICAgIChwbHVnaW4pID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwbHVnaW4uZ2V0UGFja2FnZVN0b3JhZ2UgIT09ICd1bmRlZmluZWQnO1xuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLmNvbmZpZz8uc2VydmVyU2V0dGluZ3M/LnBsdWdpblByZWZpeCxcbiAgICAgIFBMVUdJTl9DQVRFR09SWS5TVE9SQUdFXG4gICAgKTtcblxuICAgIGlmIChwbHVnaW5zLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgICdtb3JlIHRoYW4gb25lIHN0b3JhZ2UgcGx1Z2lucyBoYXMgYmVlbiBkZXRlY3RlZCwgbXVsdGlwbGUgc3RvcmFnZSBhcmUgbm90IHN1cHBvcnRlZCwgb25lIHdpbGwgYmUgc2VsZWN0ZWQgYXV0b21hdGljYWxseSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF8uaGVhZChwbHVnaW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQWRkIGEge25hbWV9IHBhY2thZ2UgdG8gYSBzeXN0ZW1cbiAgIEZ1bmN0aW9uIGNoZWNrcyBpZiBwYWNrYWdlIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBhdmFpbGFibGUgZnJvbSB1cGxpbmtzLlxuICAgSWYgaXQgaXNuJ3QsIHdlIGNyZWF0ZSBwYWNrYWdlIGxvY2FsbHlcbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICh3cml0ZSkgJiYgdXBsaW5rc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGFkZFBhY2thZ2UobmFtZTogc3RyaW5nLCBtZXRhZGF0YTogYW55LCBjYWxsYmFjazogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNoZWNrUGFja2FnZUxvY2FsKG5hbWUsIHRoaXMubG9jYWxTdG9yYWdlKTtcbiAgICAgIGF3YWl0IGNoZWNrUGFja2FnZVJlbW90ZShcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdGhpcy5faXNBbGxvd1B1Ymxpc2hPZmZsaW5lKCksXG4gICAgICAgIHRoaXMuX3N5bmNVcGxpbmtzTWV0YWRhdGEuYmluZCh0aGlzKVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHB1Ymxpc2hQYWNrYWdlKG5hbWUsIG1ldGFkYXRhLCB0aGlzLmxvY2FsU3RvcmFnZSk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzQWxsb3dQdWJsaXNoT2ZmbGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHRoaXMuY29uZmlnLnB1Ymxpc2ggIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBfLmlzQm9vbGVhbih0aGlzLmNvbmZpZy5wdWJsaXNoLmFsbG93X29mZmxpbmUpICYmXG4gICAgICB0aGlzLmNvbmZpZy5wdWJsaXNoLmFsbG93X29mZmxpbmVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlYWRUb2tlbnMoZmlsdGVyOiBUb2tlbkZpbHRlcik6IFByb21pc2U8VG9rZW5bXT4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5yZWFkVG9rZW5zKGZpbHRlcik7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVRva2VuKHRva2VuOiBUb2tlbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5zYXZlVG9rZW4odG9rZW4pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZVRva2VuKHVzZXI6IHN0cmluZywgdG9rZW5LZXk6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmRlbGV0ZVRva2VuKHVzZXIsIHRva2VuS2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgdmVyc2lvbiBvZiBwYWNrYWdlIHtuYW1lfSB0byBhIHN5c3RlbVxuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgKHdyaXRlKVxuICAgKi9cbiAgcHVibGljIGFkZFZlcnNpb24oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBtZXRhZGF0YTogVmVyc2lvbixcbiAgICB0YWc6IFN0cmluZ1ZhbHVlLFxuICAgIGNhbGxiYWNrOiBDYWxsYmFja1xuICApOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5hZGRWZXJzaW9uKG5hbWUsIHZlcnNpb24sIG1ldGFkYXRhLCB0YWcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWdzIGEgcGFja2FnZSB2ZXJzaW9uIHdpdGggYSBwcm92aWRlZCB0YWdcbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICh3cml0ZSlcbiAgICovXG4gIHB1YmxpYyBtZXJnZVRhZ3MobmFtZTogc3RyaW5nLCB0YWdIYXNoOiBNZXJnZVRhZ3MsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLm1lcmdlVGFncyhuYW1lLCB0YWdIYXNoLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIGFuIGV4aXN0aW5nIHBhY2thZ2UgKGkuZS4gdW5wdWJsaXNoIG9uZSB2ZXJzaW9uKVxuICAgRnVuY3Rpb24gY2hhbmdlcyBhIHBhY2thZ2UgaW5mbyBmcm9tIGxvY2FsIHN0b3JhZ2UgYW5kIGFsbCB1cGxpbmtzIHdpdGggd3JpdGUgYWNjZXNzLi9cbiAgIFVzZWQgc3RvcmFnZXM6IGxvY2FsICh3cml0ZSlcbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VQYWNrYWdlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBtZXRhZGF0YTogTWFuaWZlc3QsXG4gICAgcmV2aXNpb246IHN0cmluZyxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UuY2hhbmdlUGFja2FnZShuYW1lLCBtZXRhZGF0YSwgcmV2aXNpb24sIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBwYWNrYWdlIGZyb20gYSBzeXN0ZW1cbiAgIEZ1bmN0aW9uIHJlbW92ZXMgYSBwYWNrYWdlIGZyb20gbG9jYWwgc3RvcmFnZVxuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgKHdyaXRlKVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhY2thZ2UobmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVQYWNrYWdlKG5hbWUsIGNhbGxiYWNrKTtcbiAgICAvLyB1cGRhdGUgdGhlIGluZGV4ZXJcbiAgICBTZWFyY2hNZW1vcnlJbmRleGVyLnJlbW92ZShuYW1lKS5jYXRjaCgocmVhc29uKSA9PiB7XG4gICAgICBkZWJ1ZygnaW5kZXhlciBoYXMgZmFpbGVkIG9uIHJlbW92ZSBpdGVtICVvJywgcmVhc29uKTtcbiAgICAgIGxvZ2dlci5lcnJvcignaW5kZXhlciBoYXMgZmFpbGVkIG9uIHJlbW92ZSBpdGVtJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgIFJlbW92ZSBhIHRhcmJhbGwgZnJvbSBhIHN5c3RlbVxuICAgRnVuY3Rpb24gcmVtb3ZlcyBhIHRhcmJhbGwgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgVGFyYmFsbCBpbiBxdWVzdGlvbiBzaG91bGQgbm90IGJlIGxpbmtlZCB0byBpbiBhbnkgZXhpc3RpbmdcbiAgIHZlcnNpb25zLCBpLmUuIHBhY2thZ2UgdmVyc2lvbiBzaG91bGQgYmUgdW5wdWJsaXNoZWQgZmlyc3QuXG4gICBVc2VkIHN0b3JhZ2U6IGxvY2FsICh3cml0ZSlcbiAgICovXG4gIHB1YmxpYyByZW1vdmVUYXJiYWxsKG5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgcmV2aXNpb246IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlVGFyYmFsbChuYW1lLCBmaWxlbmFtZSwgcmV2aXNpb24sIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgYSB0YXJiYWxsIGZvciB7bmFtZX0gcGFja2FnZVxuICAgRnVuY3Rpb24gaXMgc3luY2hyb25vdXMgYW5kIHJldHVybnMgYSBXcml0YWJsZVN0cmVhbVxuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgKHdyaXRlKVxuICAgKi9cbiAgcHVibGljIGFkZFRhcmJhbGwobmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmFkZFRhcmJhbGwobmFtZSwgZmlsZW5hbWUpO1xuICB9XG5cbiAgcHVibGljIGhhc0xvY2FsVGFyYmFsbChuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgICAgbGV0IGxvY2FsU3RyZWFtOiBhbnkgPSBzZWxmLmxvY2FsU3RvcmFnZS5nZXRUYXJiYWxsKG5hbWUsIGZpbGVuYW1lKTtcbiAgICAgIGxldCBpc09wZW4gPSBmYWxzZTtcbiAgICAgIGxvY2FsU3RyZWFtLm9uKCdlcnJvcicsIChlcnIpOiBhbnkgPT4ge1xuICAgICAgICBpZiAoaXNPcGVuIHx8IGVyci5zdGF0dXMgIT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxvY2FsIHJlcG9ydGVkIDQwNCBvciByZXF1ZXN0IHdhcyBhYm9ydGVkIGFscmVhZHlcbiAgICAgICAgaWYgKGxvY2FsU3RyZWFtKSB7XG4gICAgICAgICAgbG9jYWxTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgICBsb2NhbFN0cmVhbSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9KTtcbiAgICAgIGxvY2FsU3RyZWFtLm9uKCdvcGVuJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICBpc09wZW4gPSB0cnVlO1xuICAgICAgICBsb2NhbFN0cmVhbS5hYm9ydCgpO1xuICAgICAgICBsb2NhbFN0cmVhbSA9IG51bGw7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgR2V0IGEgdGFyYmFsbCBmcm9tIGEgc3RvcmFnZSBmb3Ige25hbWV9IHBhY2thZ2VcbiAgIEZ1bmN0aW9uIGlzIHN5bmNocm9ub3VzIGFuZCByZXR1cm5zIGEgUmVhZGFibGVTdHJlYW1cbiAgIEZ1bmN0aW9uIHRyaWVzIHRvIHJlYWQgdGFyYmFsbCBsb2NhbGx5LCBpZiBpdCBmYWlscyB0aGVuIGl0IHJlYWRzIHBhY2thZ2VcbiAgIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgd2hlcmUgd2UgY2FuIGdldCB0aGlzIHRhcmJhbGwgZnJvbVxuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgfHwgdXBsaW5rIChqdXN0IG9uZSlcbiAgICovXG4gIHB1YmxpYyBnZXRUYXJiYWxsKG5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBuZXcgUmVhZFRhcmJhbGwoe30pO1xuICAgIHJlYWRTdHJlYW0uYWJvcnQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhcmJhbGwgaXMgYWxsb3dlZCBieSBmaWx0ZXIgcGx1Z2lucyBiZWZvcmUgc2VydmluZy5cbiAgICAvLyBGaWx0ZXJzIG1heSBibG9jayBzcGVjaWZpYyB2ZXJzaW9ucywgc28gd2UgdmVyaWZ5IHRoZSB0YXJiYWxsJ3MgdmVyc2lvblxuICAgIC8vIHN0aWxsIGV4aXN0cyBpbiB0aGUgZmlsdGVyZWQgbWV0YWRhdGEuXG4gICAgdGhpcy5faXNUYXJiYWxsQWxsb3dlZEJ5RmlsdGVycyhuYW1lLCBmaWxlbmFtZSkudGhlbihhc3luYyAoYWxsb3dlZCkgPT4ge1xuICAgICAgaWYgKCFhbGxvd2VkKSB7XG4gICAgICAgIHJlYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLk5PX1BBQ0tBR0UpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyB0cnlpbmcgbG9jYWwgZmlyc3RcbiAgICAgIGxldCBsb2NhbFN0cmVhbTogYW55ID0gc2VsZi5sb2NhbFN0b3JhZ2UuZ2V0VGFyYmFsbChuYW1lLCBmaWxlbmFtZSk7XG4gICAgICBsZXQgaXNPcGVuID0gZmFsc2U7XG4gICAgICBsb2NhbFN0cmVhbS5vbignZXJyb3InLCAoZXJyKTogYW55ID0+IHtcbiAgICAgICAgaWYgKGlzT3BlbiB8fCBlcnIuc3RhdHVzICE9PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsb2NhbCByZXBvcnRlZCA0MDRcbiAgICAgICAgY29uc3QgZXJyNDA0ID0gZXJyO1xuICAgICAgICBsb2NhbFN0cmVhbS5hYm9ydCgpO1xuICAgICAgICBsb2NhbFN0cmVhbSA9IG51bGw7IC8vIHdlIGZvcmNlIGZvciBnYXJiYWdlIGNvbGxlY3RvclxuXG4gICAgICAgIGNvbnN0IGxvb2t1cEZyb21VcGxpbmtzID0gKGluZm86IE1hbmlmZXN0IHwgbnVsbCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHNlbGYuX3N5bmNVcGxpbmtzTWV0YWRhdGEoXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgaW5mbyBhcyBNYW5pZmVzdCxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgKHN5bmNFcnIsIHN5bmNJbmZvOiBNYW5pZmVzdCk6IGFueSA9PiB7XG4gICAgICAgICAgICAgIGlmIChfLmlzTmlsKHN5bmNFcnIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWFkU3RyZWFtLmVtaXQoJ2Vycm9yJywgc3luY0Vycik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gX3N5bmNVcGxpbmtzTWV0YWRhdGEgcmV0dXJucyBmaWx0ZXItYXBwbGllZCBtZXRhZGF0YTsgaWYgdGhlXG4gICAgICAgICAgICAgIC8vIHZlcnNpb24gd2FzIHJlbW92ZWQgYnkgYSBmaWx0ZXIsIHN1cmZhY2UgYSA0MDQgbGlrZSBhIG1pc3NpbmcgdGFyYmFsbC5cbiAgICAgICAgICAgICAgaWYgKHNlbGYuZmlsdGVycz8ubGVuZ3RoICYmICFoYXNUYXJiYWxsKHN5bmNJbmZvLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycjQwNCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKF8uaXNOaWwoc3luY0luZm8uX2Rpc3RmaWxlcykgfHwgXy5pc05pbChzeW5jSW5mby5fZGlzdGZpbGVzW2ZpbGVuYW1lXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycjQwNCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2VydmVGaWxlKHN5bmNJbmZvLl9kaXN0ZmlsZXNbZmlsZW5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYubG9jYWxTdG9yYWdlLmdldFBhY2thZ2VNZXRhZGF0YUFzeW5jKG5hbWUpLnRoZW4oXG4gICAgICAgICAgKGluZm8pID0+IHtcbiAgICAgICAgICAgIGlmIChpbmZvLl9kaXN0ZmlsZXMgJiYgXy5pc05pbChpbmZvLl9kaXN0ZmlsZXNbZmlsZW5hbWVdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmaWxlIGV4aXN0cyBsb2NhbGx5XG4gICAgICAgICAgICAgIHNlcnZlRmlsZShpbmZvLl9kaXN0ZmlsZXNbZmlsZW5hbWVdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIHdlIGtub3cgbm90aGluZyBhYm91dCB0aGlzIGZpbGUsIHRyeWluZyB0byBnZXQgaW5mb3JtYXRpb24gZWxzZXdoZXJlXG4gICAgICAgICAgICAgIGxvb2t1cEZyb21VcGxpbmtzKGluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgLy8gd2Uga25vdyBub3RoaW5nIGFib3V0IHRoaXMgZmlsZSwgdHJ5aW5nIHRvIGdldCBpbmZvcm1hdGlvbiBlbHNld2hlcmVcbiAgICAgICAgICAgIGxvb2t1cEZyb21VcGxpbmtzKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgbG9jYWxTdHJlYW0ub24oJ2NvbnRlbnQtbGVuZ3RoJywgZnVuY3Rpb24gKHYpOiB2b2lkIHtcbiAgICAgICAgcmVhZFN0cmVhbS5lbWl0KCdjb250ZW50LWxlbmd0aCcsIHYpO1xuICAgICAgfSk7XG4gICAgICBsb2NhbFN0cmVhbS5vbignb3BlbicsIGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgbG9jYWxTdHJlYW0ucGlwZShyZWFkU3RyZWFtKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlYWRTdHJlYW07XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaCBhbmQgY2FjaGUgbG9jYWwvcmVtb3RlIHBhY2thZ2VzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaWxlIGRlZmluZSB0aGUgcGFja2FnZSBzaGFwZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcnZlRmlsZShmaWxlOiBEaXN0RmlsZSk6IHZvaWQge1xuICAgICAgbGV0IHVwbGluazogYW55ID0gbnVsbDtcblxuICAgICAgZm9yIChjb25zdCB1cGxpbmtJZCBpbiBzZWxmLnVwbGlua3MpIHtcbiAgICAgICAgaWYgKGhhc1Byb3h5VG8obmFtZSwgdXBsaW5rSWQsIHNlbGYuY29uZmlnLnBhY2thZ2VzKSkge1xuICAgICAgICAgIHVwbGluayA9IHNlbGYudXBsaW5rc1t1cGxpbmtJZF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHVwbGluayA9PSBudWxsKSB7XG4gICAgICAgIHVwbGluayA9IG5ldyBQcm94eVN0b3JhZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXJsOiBmaWxlLnVybCxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgX2F1dG9nZW5lcmF0ZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxmLmNvbmZpZ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2F2ZXN0cmVhbTogYW55ID0gbnVsbDtcbiAgICAgIGlmICh1cGxpbmsuY29uZmlnLmNhY2hlKSB7XG4gICAgICAgIHNhdmVzdHJlYW0gPSBzZWxmLmxvY2FsU3RvcmFnZS5hZGRUYXJiYWxsKG5hbWUsIGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG9uX29wZW4gPSBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIC8vIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjYWxsZWQgdHdpY2VcbiAgICAgICAgb25fb3BlbiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBjb25zdCByc3RyZWFtMiA9IHVwbGluay5mZXRjaFRhcmJhbGwoZmlsZS51cmwpO1xuICAgICAgICByc3RyZWFtMi5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgICAgICAgaWYgKHNhdmVzdHJlYW0pIHtcbiAgICAgICAgICAgIHNhdmVzdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2F2ZXN0cmVhbSA9IG51bGw7XG4gICAgICAgICAgcmVhZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICByc3RyZWFtMi5vbignZW5kJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgIGlmIChzYXZlc3RyZWFtKSB7XG4gICAgICAgICAgICBzYXZlc3RyZWFtLmRvbmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJzdHJlYW0yLm9uKCdjb250ZW50LWxlbmd0aCcsIGZ1bmN0aW9uICh2KTogdm9pZCB7XG4gICAgICAgICAgcmVhZFN0cmVhbS5lbWl0KCdjb250ZW50LWxlbmd0aCcsIHYpO1xuICAgICAgICAgIGlmIChzYXZlc3RyZWFtKSB7XG4gICAgICAgICAgICBzYXZlc3RyZWFtLmVtaXQoJ2NvbnRlbnQtbGVuZ3RoJywgdik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcnN0cmVhbTIucGlwZShyZWFkU3RyZWFtKTtcbiAgICAgICAgaWYgKHNhdmVzdHJlYW0pIHtcbiAgICAgICAgICByc3RyZWFtMi5waXBlKHNhdmVzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoc2F2ZXN0cmVhbSkge1xuICAgICAgICBzYXZlc3RyZWFtLm9uKCdvcGVuJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgIG9uX29wZW4oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2F2ZXN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIud2FybihcbiAgICAgICAgICAgIHsgZXJyOiBlcnIsIGZpbGVOYW1lOiBmaWxlIH0sXG4gICAgICAgICAgICAnZXJyb3Igc2F2aW5nIGZpbGUgQHtmaWxlTmFtZX06IEB7ZXJyLm1lc3NhZ2V9XFxuQHtlcnIuc3RhY2t9J1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHNhdmVzdHJlYW0pIHtcbiAgICAgICAgICAgIHNhdmVzdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2F2ZXN0cmVhbSA9IG51bGw7XG4gICAgICAgICAgb25fb3BlbigpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uX29wZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgIFJldHJpZXZlIGEgcGFja2FnZSBtZXRhZGF0YSBmb3Ige25hbWV9IHBhY2thZ2VcbiAgIEZ1bmN0aW9uIGludm9rZXMgbG9jYWxTdG9yYWdlLmdldFBhY2thZ2UgYW5kIHVwbGluay5nZXRfcGFja2FnZSBmb3IgZXZlcnlcbiAgIHVwbGluayB3aXRoIHByb3h5X2FjY2VzcyByaWdodHMgYWdhaW5zdCB7bmFtZX0gYW5kIGNvbWJpbmVzIHJlc3VsdHNcbiAgIGludG8gb25lIGpzb24gb2JqZWN0XG4gICBVc2VkIHN0b3JhZ2VzOiBsb2NhbCAmJiB1cGxpbmsgKHByb3h5X2FjY2VzcylcblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9ucy5uYW1lIFBhY2thZ2UgTmFtZVxuICAgKiBAcHJvcGVydHkge29iamVjdH0gIG9wdGlvbnMucmVxIEV4cHJlc3MgYHJlcWAgb2JqZWN0XG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3B0aW9ucy5rZWVwVXBMaW5rRGF0YSBrZWVwIHVwIGxpbmsgaW5mbyBpbiBwYWNrYWdlIG1ldGEsIGxhc3QgdXBkYXRlLCBldGMuXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9wdGlvbnMuY2FsbGJhY2sgQ2FsbGJhY2sgZm9yIHJlY2VpdmUgZGF0YVxuICAgKi9cbiAgcHVibGljIGdldFBhY2thZ2Uob3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLmdldFBhY2thZ2VNZXRhZGF0YShvcHRpb25zLm5hbWUsIChlcnIsIGRhdGEpOiB2b2lkID0+IHtcbiAgICAgIGlmIChlcnIgJiYgKCFlcnIuc3RhdHVzIHx8IGVyci5zdGF0dXMgPj0gSFRUUF9TVEFUVVMuSU5URVJOQUxfRVJST1IpKSB7XG4gICAgICAgIC8vIHJlcG9ydCBpbnRlcm5hbCBlcnJvcnMgcmlnaHQgYXdheVxuICAgICAgICByZXR1cm4gb3B0aW9ucy5jYWxsYmFjayhlcnIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zeW5jVXBsaW5rc01ldGFkYXRhKFxuICAgICAgICBvcHRpb25zLm5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHsgcmVxOiBvcHRpb25zLnJlcSwgdXBsaW5rc0xvb2s6IG9wdGlvbnMudXBsaW5rc0xvb2sgfSxcbiAgICAgICAgZnVuY3Rpb24gZ2V0UGFja2FnZVN5blVwTGlua3NDYWxsYmFjayhlcnIsIHJlc3VsdDogTWFuaWZlc3QsIHVwbGlua0Vycm9ycyk6IHZvaWQge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbm9ybWFsaXplRGlzdFRhZ3MoY2xlYW5VcExpbmtzUmVmKG9wdGlvbnMua2VlcFVwTGlua0RhdGEsIHJlc3VsdCkpO1xuXG4gICAgICAgICAgLy8gbnBtIGNhbiB0aHJvdyBpZiB0aGlzIGZpZWxkIGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICByZXN1bHQuX2F0dGFjaG1lbnRzID0ge307XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYWJicmV2aWF0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2sobnVsbCwgY29udmVydEFiYnJldmlhdGVkTWFuaWZlc3QocmVzdWx0KSwgdXBsaW5rRXJyb3JzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFjayhudWxsLCByZXN1bHQsIHVwbGlua0Vycm9ycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICBSZXRyaWV2ZSByZW1vdGUgYW5kIGxvY2FsIHBhY2thZ2VzIG1vcmUgcmVjZW50IHRoYW4ge3N0YXJ0a2V5fVxuICAgRnVuY3Rpb24gc3RyZWFtcyBhbGwgcGFja2FnZXMgZnJvbSBhbGwgdXBsaW5rcyBmaXJzdCwgYW5kIHRoZW5cbiAgIGxvY2FsIHBhY2thZ2VzLlxuICAgTm90ZSB0aGF0IGxvY2FsIHBhY2thZ2VzIGNvdWxkIG92ZXJyaWRlIHJlZ2lzdHJ5IG9uZXMganVzdCBiZWNhdXNlXG4gICB0aGV5IGFwcGVhciBpbiBKU09OIGxhc3QuIFRoYXQncyBhIHRyYWRlLW9mZiB3ZSBtYWtlIHRvIGF2b2lkXG4gICBtZW1vcnkgaXNzdWVzLlxuICAgVXNlZCBzdG9yYWdlczogbG9jYWwgJiYgdXBsaW5rIChwcm94eV9hY2Nlc3MpXG4gICAqIEBwYXJhbSB7Kn0gc3RhcnRrZXlcbiAgICogQHBhcmFtIHsqfSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHB1YmxpYyBzZWFyY2goc3RhcnRrZXk6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgc2VhcmNoU3RyZWFtOiBhbnkgPSBuZXcgU3RyZWFtLlBhc3NUaHJvdWdoKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICBhc3luYy5lYWNoU2VyaWVzKFxuICAgICAgT2JqZWN0LmtleXModGhpcy51cGxpbmtzKSxcbiAgICAgIGZ1bmN0aW9uICh1cF9uYW1lLCBjYik6IHZvaWQge1xuICAgICAgICAvLyBzaG9ydGN1dDogaWYgYGxvY2FsPTFgIGlzIHN1cHBsaWVkLCBkb24ndCBjYWxsIHVwbGlua3NcbiAgICAgICAgaWYgKG9wdGlvbnMucmVxPy5xdWVyeT8ubG9jYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBzZWFyY2ggZm9yIHVwbGluayAke3VwX25hbWV9YCk7XG4gICAgICAgIC8vIHNlYXJjaCBieSBrZXl3b3JkIGZvciBlYWNoIHVwbGlua1xuICAgICAgICBjb25zdCB1cGxpbmtTdHJlYW0gPSBzZWxmLnVwbGlua3NbdXBfbmFtZV0uc2VhcmNoKG9wdGlvbnMpO1xuICAgICAgICAvLyBqb2luIHVwbGluayBzdHJlYW0gd2l0aCBzdHJlYW1zIFBhc3NUaHJvdWdoXG4gICAgICAgIHVwbGlua1N0cmVhbS5waXBlKHNlYXJjaFN0cmVhbSwgeyBlbmQ6IGZhbHNlIH0pO1xuICAgICAgICB1cGxpbmtTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycik6IHZvaWQge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgZXJyOiBlcnIgfSwgJ3VwbGluayBlcnJvcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgICAgICBjYigpO1xuICAgICAgICAgIC8vIHRvIGF2b2lkIGNhbGwgY2FsbGJhY2sgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICBjYiA9IGZ1bmN0aW9uICgpOiB2b2lkIHt9O1xuICAgICAgICB9KTtcbiAgICAgICAgdXBsaW5rU3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgICAvLyB0byBhdm9pZCBjYWxsIGNhbGxiYWNrIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgY2IgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VhcmNoU3RyZWFtLmFib3J0ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgIGlmICh1cGxpbmtTdHJlYW0uYWJvcnQpIHtcbiAgICAgICAgICAgIHVwbGlua1N0cmVhbS5hYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYigpO1xuICAgICAgICAgIC8vIHRvIGF2b2lkIGNhbGwgY2FsbGJhY2sgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICBjYiA9IGZ1bmN0aW9uICgpOiB2b2lkIHt9O1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIC8vIGV4ZWN1dGVkIGFmdGVyIGFsbCBzZXJpZXNcbiAgICAgIGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgLy8gYXR0YWNoIGEgbG9jYWwgc2VhcmNoIHJlc3VsdHNcbiAgICAgICAgY29uc3QgbG9jYWxTZWFyY2hTdHJlYW0gPSBzZWxmLmxvY2FsU3RvcmFnZS5zZWFyY2goc3RhcnRrZXksIG9wdGlvbnMpO1xuICAgICAgICBzZWFyY2hTdHJlYW0uYWJvcnQgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgICAgbG9jYWxTZWFyY2hTdHJlYW0uYWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgbG9jYWxTZWFyY2hTdHJlYW0ucGlwZShzZWFyY2hTdHJlYW0sIHsgZW5kOiB0cnVlIH0pO1xuICAgICAgICBsb2NhbFNlYXJjaFN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IGVycjogZXJyIH0sICdzZWFyY2ggZXJyb3I6IEB7ZXJyLm1lc3NhZ2V9Jyk7XG4gICAgICAgICAgc2VhcmNoU3RyZWFtLmVuZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHNlYXJjaFN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBvbmx5IHByaXZhdGUgbG9jYWwgcGFja2FnZXNcbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIGdldExvY2FsRGF0YWJhc2UoY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc3RvcmFnZVBsdWdpbi5nZXQoKGVyciwgbG9jYWxzKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jb2xsZWN0TG9jYWxQYWNrYWdlcyhsb2NhbHMpLnRoZW4oXG4gICAgICAgIChwYWNrYWdlcykgPT4gY2FsbGJhY2sobnVsbCwgcGFja2FnZXMpLFxuICAgICAgICAoZXJyKSA9PiBjYWxsYmFjayhlcnIpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgZWFjaCBsb2NhbCBwYWNrYWdlIG5hbWUsIGFwcGx5IGZpbHRlcnMsIGFuZCBjb2xsZWN0IHRoZSBsYXRlc3QgdmVyc2lvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2NvbGxlY3RMb2NhbFBhY2thZ2VzKGxvY2Fsczogc3RyaW5nW10pOiBQcm9taXNlPFZlcnNpb25bXT4ge1xuICAgIGNvbnN0IHBhY2thZ2VzOiBWZXJzaW9uW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbG9jYWxzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwa2dNZXRhZGF0YSA9IGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlLmdldFBhY2thZ2VNZXRhZGF0YUFzeW5jKG5hbWUpO1xuICAgICAgICBjb25zdCB7IGZpbHRlcmVkUGFja2FnZSB9ID0gYXdhaXQgdGhpcy5fYXBwbHlGaWx0ZXJzKHBrZ01ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgbGF0ZXN0ID0gZmlsdGVyZWRQYWNrYWdlW0RJU1RfVEFHU10/LmxhdGVzdDtcbiAgICAgICAgaWYgKGxhdGVzdCAmJiBmaWx0ZXJlZFBhY2thZ2UudmVyc2lvbnNbbGF0ZXN0XSkge1xuICAgICAgICAgIGNvbnN0IHZlcnNpb246IFZlcnNpb24gPSBmaWx0ZXJlZFBhY2thZ2UudmVyc2lvbnNbbGF0ZXN0XTtcbiAgICAgICAgICBjb25zdCB0aW1lTGlzdCA9IGZpbHRlcmVkUGFja2FnZS50aW1lIGFzIEdlbmVyaWNCb2R5O1xuICAgICAgICAgIGNvbnN0IHRpbWUgPSB0aW1lTGlzdFtsYXRlc3RdO1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICB2ZXJzaW9uLnRpbWUgPSB0aW1lO1xuXG4gICAgICAgICAgLy8gQWRkIGZvciBzdGFycyBhcGlcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgdmVyc2lvbi51c2VycyA9IGZpbHRlcmVkUGFja2FnZS51c2VycztcblxuICAgICAgICAgIHBhY2thZ2VzLnB1c2godmVyc2lvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2Fybih7IHBhY2thZ2U6IG5hbWUgfSwgJ3BhY2thZ2UgQHtwYWNrYWdlfSBkb2VzIG5vdCBoYXZlIGEgXCJsYXRlc3RcIiB0YWc/Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcih7IGVyciwgcGFja2FnZTogbmFtZSB9LCAnZXJyb3IgcmVhZGluZyBwYWNrYWdlIEB7cGFja2FnZX0nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhY2thZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGZldGNoZXMgcGFja2FnZSBtZXRhZGF0YSBmcm9tIHVwbGlua3MgYW5kIHN5bmNocm9uaXplcyBpdCB3aXRoIGxvY2FsIGRhdGFcbiAgIGlmIHBhY2thZ2UgaXMgYXZhaWxhYmxlIGxvY2FsbHksIGl0IE1VU1QgYmUgcHJvdmlkZWQgaW4gcGtnaW5mb1xuICAgcmV0dXJucyBjYWxsYmFjayhlcnIsIHJlc3VsdCwgdXBsaW5rX2Vycm9ycylcbiAgICovXG4gIHB1YmxpYyBfc3luY1VwbGlua3NNZXRhZGF0YShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZUluZm86IE1hbmlmZXN0LFxuICAgIG9wdGlvbnM6IElTeW5jVXBsaW5rcyxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgbGV0IGZvdW5kID0gdHJ1ZTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCB1cExpbmtzOiBQcm94eVN0b3JhZ2VbXSA9IFtdO1xuICAgIGNvbnN0IGhhc1RvTG9va0ludG9VcGxpbmtzID0gXy5pc05pbChvcHRpb25zLnVwbGlua3NMb29rKSB8fCBvcHRpb25zLnVwbGlua3NMb29rO1xuXG4gICAgaWYgKCFwYWNrYWdlSW5mbykge1xuICAgICAgZm91bmQgPSBmYWxzZTtcbiAgICAgIHBhY2thZ2VJbmZvID0gZ2VuZXJhdGVQYWNrYWdlVGVtcGxhdGUobmFtZSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB1cGxpbmsgaW4gdGhpcy51cGxpbmtzKSB7XG4gICAgICBpZiAoaGFzUHJveHlUbyhuYW1lLCB1cGxpbmssIHRoaXMuY29uZmlnLnBhY2thZ2VzKSAmJiBoYXNUb0xvb2tJbnRvVXBsaW5rcykge1xuICAgICAgICB1cExpbmtzLnB1c2godGhpcy51cGxpbmtzW3VwbGlua10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLm1hcChcbiAgICAgIHVwTGlua3MsXG4gICAgICAodXBMaW5rOiBQcm94eVN0b3JhZ2UsIGNiKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IF9vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHVwTGlua01ldGEgPSBwYWNrYWdlSW5mby5fdXBsaW5rc1t1cExpbmsudXBuYW1lXTtcblxuICAgICAgICBpZiAoaXNPYmplY3QodXBMaW5rTWV0YSkpIHtcbiAgICAgICAgICBjb25zdCBmZXRjaGVkID0gdXBMaW5rTWV0YS5mZXRjaGVkO1xuXG4gICAgICAgICAgaWYgKGZldGNoZWQgJiYgRGF0ZS5ub3coKSAtIGZldGNoZWQgPCB1cExpbmsubWF4YWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfb3B0aW9ucy5ldGFnID0gdXBMaW5rTWV0YS5ldGFnO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBMaW5rLmdldFJlbW90ZU1ldGFkYXRhKG5hbWUsIF9vcHRpb25zLCAoZXJyLCB1cExpbmtSZXNwb25zZSwgZVRhZyk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIgJiYgZXJyLnJlbW90ZVN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAgICAgICB1cExpbmtNZXRhLmZldGNoZWQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlcnIgfHwgIXVwTGlua1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IobnVsbCwgW2VyciB8fCBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcignbm8gZGF0YScpXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHVwTGlua1Jlc3BvbnNlID0gdmFsaWRhdGlvblV0aWxzLm5vcm1hbGl6ZU1ldGFkYXRhKHVwTGlua1Jlc3BvbnNlLCBuYW1lKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3ViOiAnb3V0JyxcbiAgICAgICAgICAgICAgICBlcnI6IGVycixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgJ3BhY2thZ2UuanNvbiB2YWxpZGF0aW5nIGVycm9yIEB7IWVyci5tZXNzYWdlfVxcbkB7ZXJyLnN0YWNrfSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gY2IobnVsbCwgW2Vycl0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhY2thZ2VJbmZvLl91cGxpbmtzW3VwTGluay51cG5hbWVdID0ge1xuICAgICAgICAgICAgZXRhZzogZVRhZyxcbiAgICAgICAgICAgIGZldGNoZWQ6IERhdGUubm93KCksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHBhY2thZ2VJbmZvID0gbWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsKHBhY2thZ2VJbmZvLCB1cExpbmtSZXNwb25zZSk7XG5cbiAgICAgICAgICB1cGRhdGVWZXJzaW9uc0hpZGRlblVwTGluayh1cExpbmtSZXNwb25zZS52ZXJzaW9ucywgdXBMaW5rKTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtZXJnZVZlcnNpb25zKHBhY2thZ2VJbmZvLCB1cExpbmtSZXNwb25zZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN1YjogJ291dCcsXG4gICAgICAgICAgICAgICAgZXJyOiBlcnIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICdwYWNrYWdlLmpzb24gcGFyc2luZyBlcnJvciBAeyFlcnIubWVzc2FnZX1cXG5Ae2Vyci5zdGFja30nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNiKG51bGwsIFtlcnJdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZiB3ZSBnb3QgdG8gdGhpcyBwb2ludCwgYXNzdW1lIHRoYXQgdGhlIGNvcnJlY3QgcGFja2FnZSBleGlzdHNcbiAgICAgICAgICAvLyBvbiB0aGUgdXBsaW5rXG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGNiKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGFzeW5jIChlcnI6IEVycm9yLCB1cExpbmtzRXJyb3JzOiBhbnkpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgYXNzZXJ0KCFlcnIgJiYgQXJyYXkuaXNBcnJheSh1cExpbmtzRXJyb3JzKSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNvbm5lY3Rpb24gdGltZW91dCBvciByZXNldCBlcnJvcnMgd2l0aCB1cGxpbmsocylcbiAgICAgICAgLy8gKHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IGZyb20gdGhlIHBhY2thZ2Ugbm90IGJlaW5nIGZvdW5kKVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgbGV0IHVwbGlua1RpbWVvdXRFcnJvcjtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVwTGlua3NFcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh1cExpbmtzRXJyb3JzW2ldKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdXBMaW5rc0Vycm9yc1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmICh1cExpbmtzRXJyb3JzW2ldW2pdKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gdXBMaW5rc0Vycm9yc1tpXVtqXS5jb2RlO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdFVElNRURPVVQnIHx8IGNvZGUgPT09ICdFU09DS0VUVElNRURPVVQnIHx8IGNvZGUgPT09ICdFQ09OTlJFU0VUJykge1xuICAgICAgICAgICAgICAgICAgICB1cGxpbmtUaW1lb3V0RXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXBsaW5rVGltZW91dEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3JDb2RlLmdldFNlcnZpY2VVbmF2YWlsYWJsZSgpLCBudWxsLCB1cExpbmtzRXJyb3JzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXROb3RGb3VuZChBUElfRVJST1IuTk9fUEFDS0FHRSksIG51bGwsIHVwTGlua3NFcnJvcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwTGlua3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXJlZFBhY2thZ2UsIGZpbHRlckVycm9ycyB9ID0gYXdhaXQgc2VsZi5fYXBwbHlGaWx0ZXJzKFxuICAgICAgICAgICAgcGFja2FnZUluZm8gYXMgTWFuaWZlc3RcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBmaWx0ZXJlZFBhY2thZ2UsIGZpbHRlckVycm9ycyk7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhY2thZ2VKc29uTG9jYWwgPSBhd2FpdCBzZWxmLmxvY2FsU3RvcmFnZS51cGRhdGVWZXJzaW9uc0FzeW5jKG5hbWUsIHBhY2thZ2VJbmZvKTtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlcmVkUGFja2FnZSwgZmlsdGVyRXJyb3JzIH0gPSBhd2FpdCBzZWxmLl9hcHBseUZpbHRlcnMocGFja2FnZUpzb25Mb2NhbCk7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsdGVyZWRQYWNrYWdlLCBfLmNvbmNhdCh1cExpbmtzRXJyb3JzLCBmaWx0ZXJFcnJvcnMpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYWxsIGNvbmZpZ3VyZWQgZmlsdGVyIHBsdWdpbnMgdG8gYSBwYWNrYWdlIG1hbmlmZXN0IHNlcXVlbnRpYWxseS5cbiAgICogRWFjaCBmaWx0ZXIncyBvdXRwdXQgaXMgcGFzc2VkIGFzIGlucHV0IHRvIHRoZSBuZXh0IGZpbHRlci5cbiAgICogUmV0dXJucyB0aGUgZmlsdGVyZWQgbWFuaWZlc3QgYW5kIGFueSBlcnJvcnMgdGhhdCBvY2N1cnJlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2FwcGx5RmlsdGVycyhcbiAgICBwYWNrYWdlSW5mbzogTWFuaWZlc3RcbiAgKTogUHJvbWlzZTx7IGZpbHRlcmVkUGFja2FnZTogTWFuaWZlc3Q7IGZpbHRlckVycm9yczogRXJyb3JbXSB9PiB7XG4gICAgY29uc3QgZmlsdGVyRXJyb3JzOiBFcnJvcltdID0gW107XG4gICAgbGV0IGZpbHRlcmVkUGFja2FnZSA9IHBhY2thZ2VJbmZvO1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIHRoaXMuZmlsdGVycyA/PyBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyZWRQYWNrYWdlID0gYXdhaXQgZmlsdGVyLmZpbHRlcl9tZXRhZGF0YShmaWx0ZXJlZFBhY2thZ2UpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgZmlsdGVyRXJyb3JzLnB1c2goZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgZmlsdGVyZWRQYWNrYWdlLCBmaWx0ZXJFcnJvcnMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHRhcmJhbGwgc2hvdWxkIGJlIHNlcnZlZCBiYXNlZCBvbiBmaWx0ZXIgcGx1Z2lucywgdXNpbmcgb25seVxuICAgKiBsb2NhbCBtZXRhZGF0YS4gUmV0dXJucyB0cnVlIChkZWZlcikgd2hlbiB0aGUgdmVyc2lvbiBpc24ndCBjYWNoZWQgbG9jYWxseVxuICAgKiDigJQgdGhlIHVwbGluay1zeW5jIHBhdGggaW4gZ2V0VGFyYmFsbCByZS1jaGVja3MgZmlsdGVycyBhZnRlciBzeW5jLCB3aGljaFxuICAgKiBhdm9pZHMgYSByZWR1bmRhbnQgdXBsaW5rIHJvdW5kLXRyaXAgYW5kIGRvdWJsZSBmaWx0ZXIgYXBwbGljYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9pc1RhcmJhbGxBbGxvd2VkQnlGaWx0ZXJzKG5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5maWx0ZXJzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwa2dNZXRhZGF0YSA9IGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlLmdldFBhY2thZ2VNZXRhZGF0YUFzeW5jKG5hbWUpO1xuICAgICAgaWYgKCFoYXNUYXJiYWxsKHBrZ01ldGFkYXRhLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB7IGZpbHRlcmVkUGFja2FnZSB9ID0gYXdhaXQgdGhpcy5fYXBwbHlGaWx0ZXJzKHBrZ01ldGFkYXRhKTtcbiAgICAgIHJldHVybiBoYXNUYXJiYWxsKGZpbHRlcmVkUGFja2FnZSwgZmlsZW5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAoZXJyPy5zdGF0dXMgPT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICB7IHBhY2thZ2U6IG5hbWUsIGZpbGVOYW1lOiBmaWxlbmFtZSwgZXJyIH0sXG4gICAgICAgICdlcnJvciBjaGVja2luZyBmaWx0ZXJzIGZvciB0YXJiYWxsIEB7ZmlsZU5hbWV9IG9mIHBhY2thZ2UgQHtwYWNrYWdlfTogQHtlcnIubWVzc2FnZX0nXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGhpZGRlbiB2YWx1ZSBmb3IgZWFjaCB2ZXJzaW9uLlxuICAgKiBAcGFyYW0ge0FycmF5fSB2ZXJzaW9ucyBsaXN0IG9mIHZlcnNpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHVwTGluayB1cGxpbmsgbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHVibGljIF91cGRhdGVWZXJzaW9uc0hpZGRlblVwTGluayh2ZXJzaW9uczogVmVyc2lvbnMsIHVwTGluazogUHJveHlTdG9yYWdlKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBpIGluIHZlcnNpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZlcnNpb25zLCBpKSkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdmVyc2lvbnNbaV07XG5cbiAgICAgICAgLy8gaG9sZHMgYSBcImhpZGRlblwiIHZhbHVlIHRvIGJlIHVzZWQgYnkgdGhlIHBhY2thZ2Ugc3RvcmFnZS5cbiAgICAgICAgdmVyc2lvbltTeW1ib2wuZm9yKCdfX3ZlcmRhY2Npb191cGxpbmsnKV0gPSB1cExpbmsudXBuYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdG9yYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxLQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxRQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxtQkFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsY0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsUUFBQSxHQUFBVixPQUFBO0FBY0EsSUFBQVcsT0FBQSxHQUFBWCxPQUFBO0FBRUEsSUFBQVksVUFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsYUFBQSxHQUFBZCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQWMsY0FBQSxHQUFBZCxPQUFBO0FBQ0EsSUFBQWUsYUFBQSxHQUFBZixPQUFBO0FBU0EsSUFBQWdCLFVBQUEsR0FBQWpCLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBaUIsV0FBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixNQUFBLEdBQUFsQixPQUFBO0FBQTZFLFNBQUFELHVCQUFBb0IsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUU3RSxNQUFNRyxLQUFLLEdBQUcsSUFBQUMsY0FBVSxF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LEVBQUUwQyxRQUFnQixFQUFvQjtJQUN6RixJQUFJLENBQUMsSUFBSSxDQUFDOUQsT0FBTyxFQUFFWSxNQUFNLEVBQUU7TUFDekIsT0FBTyxJQUFJO0lBQ2I7SUFFQSxJQUFJO01BQ0YsTUFBTTJJLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQ3pKLFlBQVksQ0FBQ2dHLHVCQUF1QixDQUFDMUUsSUFBSSxDQUFDO01BQ3pFLElBQUksQ0FBQyxJQUFBdUUsaUJBQVUsRUFBQzRELFdBQVcsRUFBRXpGLFFBQVEsQ0FBQyxFQUFFO1FBQ3RDLE9BQU8sSUFBSTtNQUNiO01BQ0EsTUFBTTtRQUFFMEY7TUFBZ0IsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDQyxhQUFhLENBQUNGLFdBQVcsQ0FBQztNQUNqRSxPQUFPLElBQUE1RCxpQkFBVSxFQUFDNkQsZUFBZSxFQUFFMUYsUUFBUSxDQUFDO0lBQzlDLENBQUMsQ0FBQyxPQUFPekIsR0FBUSxFQUFFO01BQ2pCLElBQUlBLEdBQUcsRUFBRW9DLE1BQU0sS0FBS0Msc0JBQVcsQ0FBQ0MsU0FBUyxFQUFFO1FBQ3pDLE9BQU8sSUFBSTtNQUNiO01BQ0EsSUFBSSxDQUFDOUUsTUFBTSxDQUFDK0QsS0FBSyxDQUNmO1FBQUVxRyxPQUFPLEVBQUU3SSxJQUFJO1FBQUUyRixRQUFRLEVBQUVqRCxRQUFRO1FBQUV6QjtNQUFJLENBQUMsRUFDMUMsc0ZBQ0YsQ0FBQztNQUNELE9BQU8sSUFBSTtJQUNiO0VBQ0Y7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ1NzSywyQkFBMkJBLENBQUMvQyxRQUFrQixFQUFFWSxNQUFvQixFQUFRO0lBQ2pGLEtBQUssTUFBTTJCLENBQUMsSUFBSXZDLFFBQVEsRUFBRTtNQUN4QixJQUFJcEIsTUFBTSxDQUFDb0UsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ2xELFFBQVEsRUFBRXVDLENBQUMsQ0FBQyxFQUFFO1FBQ3JELE1BQU1sSixPQUFPLEdBQUcyRyxRQUFRLENBQUN1QyxDQUFDLENBQUM7O1FBRTNCO1FBQ0FsSixPQUFPLENBQUM4SixNQUFNLENBQUNDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUd4QyxNQUFNLENBQUNLLE1BQU07TUFDM0Q7SUFDRjtFQUNGO0FBQ0Y7QUFBQyxJQUFBb0MsUUFBQSxHQUFBQyxPQUFBLENBQUE3TixPQUFBLEdBRWNHLE9BQU8iLCJpZ25vcmVMaXN0IjpbXX0=
|
package/build/lib/utils.d.ts
CHANGED
|
@@ -60,4 +60,9 @@ export declare function isRelatedToDeprecation(pkgInfo: Manifest): boolean;
|
|
|
60
60
|
export declare const resolveConfigPath: (storageLocation: string, file: string) => string;
|
|
61
61
|
export declare function logHTTPSWarning(storageLocation: any): void;
|
|
62
62
|
export declare function hasLogin(config: Config): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Check whether any version in a package manifest has a tarball URL
|
|
65
|
+
* that matches the given filename.
|
|
66
|
+
*/
|
|
67
|
+
export declare function hasTarball(pkg: Manifest, filename: string): boolean;
|
|
63
68
|
export { buildTokenUtil as buildToken, parseConfigFile };
|
package/build/lib/utils.js
CHANGED
|
@@ -16,6 +16,7 @@ exports.encodeScopedUri = encodeScopedUri;
|
|
|
16
16
|
exports.getVersion = getVersion;
|
|
17
17
|
exports.hasDiffOneKey = hasDiffOneKey;
|
|
18
18
|
exports.hasLogin = hasLogin;
|
|
19
|
+
exports.hasTarball = hasTarball;
|
|
19
20
|
exports.initLogger = initLogger;
|
|
20
21
|
exports.isObject = void 0;
|
|
21
22
|
exports.isObjectOrArray = isObjectOrArray;
|
|
@@ -262,4 +263,12 @@ function logHTTPSWarning(storageLocation) {
|
|
|
262
263
|
function hasLogin(config) {
|
|
263
264
|
return _lodash.default.isNil(config?.web?.login) || config?.web?.login === true;
|
|
264
265
|
}
|
|
265
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfbm9kZVBhdGgiLCJfc2VtdmVyIiwiX2NvbmZpZyIsIl9jb3JlIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImNyZWF0ZURlYnVnIiwiZ2V0QmFkRGF0YSIsImdldEJhZFJlcXVlc3QiLCJnZXRDb2RlIiwiZ2V0Q29uZmxpY3QiLCJnZXRGb3JiaWRkZW4iLCJnZXRJbnRlcm5hbEVycm9yIiwiZ2V0Tm90Rm91bmQiLCJnZXRTZXJ2aWNlVW5hdmFpbGFibGUiLCJnZXRVbmF1dGhvcml6ZWQiLCJlcnJvclV0aWxzIiwiaW5pdExvZ2dlciIsImxvZ0NvbmZpZyIsImxvZ3MiLCJsb2ciLCJ3YXJuaW5nVXRpbHMiLCJlbWl0IiwiQ29kZXMiLCJWRVJXQVIwMDIiLCJzZXR1cCIsImFkZFNjb3BlIiwic2NvcGUiLCJwYWNrYWdlTmFtZSIsImlzT2JqZWN0IiwiZXhwb3J0cyIsInZhbGlkYXRpb25VdGlscyIsImlzT2JqZWN0T3JBcnJheSIsIm9iaiIsIl8iLCJpc051bGwiLCJ0YWdWZXJzaW9uIiwiZGF0YSIsInZlcnNpb24iLCJ0YWciLCJESVNUX1RBR1MiLCJzZW12ZXIiLCJwYXJzZSIsImdldFZlcnNpb24iLCJwa2ciLCJpc05pbCIsInZlcnNpb25zIiwidmVyc2lvbkl0ZW0iLCJjb21wYXJlIiwidW5kZWZpbmVkIiwibm9ybWFsaXplRGlzdFRhZ3MiLCJzb3J0ZWQiLCJsYXRlc3QiLCJwa2dVdGlscyIsInNlbXZlclNvcnQiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwicG9wIiwiaXNBcnJheSIsImlzU3RyaW5nIiwicGFyc2VJbnRlcnZhbFRhYmxlIiwibXMiLCJzIiwibSIsImgiLCJkIiwidyIsIk0iLCJ5IiwicGFyc2VJbnRlcnZhbCIsImludGVydmFsIiwicmVzdWx0IiwibGFzdF9zdWZmaXgiLCJJbmZpbml0eSIsInNwbGl0IiwiZm9yRWFjaCIsIngiLCJtYXRjaCIsIkVycm9yIiwiTnVtYmVyIiwiRXJyb3JDb2RlIiwic29ydEJ5TmFtZSIsInBhY2thZ2VzIiwib3JkZXJBc2NlbmRpbmciLCJzbGljZSIsInNvcnQiLCJhIiwiYiIsImNvbXBhcmF0b3JOYW1lcyIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImRlbGV0ZVByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzVG9EZWxldGUiLCJvYmplY3RJdGVtIiwicHJvcGVydHkiLCJwYXJzZVJlYWRtZSIsInJlYWRtZSIsImlzRW1wdHkiLCJsb2dnZXIiLCJpbmZvIiwiZW5jb2RlU2NvcGVkVXJpIiwicmVwbGFjZSIsImhhc0RpZmZPbmVLZXkiLCJpc1ZlcnNpb25WYWxpZCIsInBhY2thZ2VNZXRhIiwicGFja2FnZVZlcnNpb24iLCJoYXNWZXJzaW9uIiwiaGFzTWF0Y2hWZXJzaW9uIiwiaW5jbHVkZXMiLCJpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uIiwicGtnSW5mbyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlc29sdmVDb25maWdQYXRoIiwic3RvcmFnZUxvY2F0aW9uIiwiZmlsZSIsInBhdGgiLCJyZXNvbHZlIiwiZGlybmFtZSIsImxvZ0hUVFBTV2FybmluZyIsImZhdGFsIiwia2V5UGVtIiwiY3NyUGVtIiwiY2VydFBlbSIsImpvaW4iLCJwcm9jZXNzIiwiZXhpdCIsImhhc0xvZ2luIiwiY29uZmlnIiwid2ViIiwibG9naW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuaW1wb3J0IHsgcGFyc2VDb25maWdGaWxlIH0gZnJvbSAnQHZlcmRhY2Npby9jb25maWcnO1xuaW1wb3J0IHsgZXJyb3JVdGlscywgcGtnVXRpbHMsIHZhbGlkYXRpb25VdGlscywgd2FybmluZ1V0aWxzIH0gZnJvbSAnQHZlcmRhY2Npby9jb3JlJztcbmltcG9ydCB7IENvbmZpZ1lhbWwsIExvZ2dlckNvbmZpZ0l0ZW0sIFN0cmluZ1ZhbHVlIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBDb25maWcsIE1hbmlmZXN0LCBWZXJzaW9uIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBidWlsZFRva2VuIGFzIGJ1aWxkVG9rZW5VdGlsIH0gZnJvbSAnQHZlcmRhY2Npby91dGlscyc7XG5cbmltcG9ydCB7IERJU1RfVEFHUywgY2VydFBlbSwgY3NyUGVtLCBrZXlQZW0gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBsb2dnZXIsIHNldHVwIH0gZnJvbSAnLi9sb2dnZXInO1xuXG5jb25zdCBkZWJ1ZyA9IGNyZWF0ZURlYnVnKCd2ZXJkYWNjaW86bGliOnV0aWxzJyk7XG5cbmNvbnN0IHtcbiAgZ2V0QmFkRGF0YSxcbiAgZ2V0QmFkUmVxdWVzdCxcbiAgZ2V0Q29kZSxcbiAgZ2V0Q29uZmxpY3QsXG4gIGdldEZvcmJpZGRlbixcbiAgZ2V0SW50ZXJuYWxFcnJvcixcbiAgZ2V0Tm90Rm91bmQsXG4gIGdldFNlcnZpY2VVbmF2YWlsYWJsZSxcbiAgZ2V0VW5hdXRob3JpemVkLFxufSA9IGVycm9yVXRpbHM7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0TG9nZ2VyKGxvZ0NvbmZpZzogQ29uZmlnWWFtbCkge1xuICBpZiAobG9nQ29uZmlnLmxvZ3MpIHtcbiAgICBsb2dDb25maWcubG9nID0gbG9nQ29uZmlnLmxvZ3M7XG4gICAgd2FybmluZ1V0aWxzLmVtaXQod2FybmluZ1V0aWxzLkNvZGVzLlZFUldBUjAwMik7XG4gIH1cbiAgZGVidWcoJ2luaXRpYWxpemluZyBsb2dnZXIgd2l0aCBjb25maWc6ICVvJywgbG9nQ29uZmlnLmxvZyk7XG4gIHNldHVwKGxvZ0NvbmZpZy5sb2cgYXMgTG9nZ2VyQ29uZmlnSXRlbSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRTY29wZShzY29wZTogc3RyaW5nLCBwYWNrYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBAJHtzY29wZX0vJHtwYWNrYWdlTmFtZX1gO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBhbiBPYmplY3RcbiAqIEBwYXJhbSB7Kn0gb2JqIHRoZSBlbGVtZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSB2YWxpZGF0aW9uVXRpbHMuaXNPYmplY3Q7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgbm90IHVzZWQgdW4gdjZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0T3JBcnJheShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gXy5pc09iamVjdChvYmopICYmIF8uaXNOdWxsKG9iaikgPT09IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnVmVyc2lvbihkYXRhOiBNYW5pZmVzdCwgdmVyc2lvbjogc3RyaW5nLCB0YWc6IFN0cmluZ1ZhbHVlKTogYm9vbGVhbiB7XG4gIGlmICh0YWcgJiYgZGF0YVtESVNUX1RBR1NdW3RhZ10gIT09IHZlcnNpb24gJiYgc2VtdmVyLnBhcnNlKHZlcnNpb24sIHRydWUpKSB7XG4gICAgLy8gdmFsaWQgdmVyc2lvbiAtIHN0b3JlXG4gICAgZGF0YVtESVNUX1RBR1NdW3RhZ10gPSB2ZXJzaW9uO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXRzIHZlcnNpb24gZnJvbSBhIHBhY2thZ2Ugb2JqZWN0IHRha2luZyBpbnRvIGFjY291bnQgc2VtdmVyIHdlaXJkbmVzcy5cbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJuIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVyc2lvbihwa2c6IE1hbmlmZXN0LCB2ZXJzaW9uOiBhbnkpOiBWZXJzaW9uIHwgdm9pZCB7XG4gIC8vIHRoaXMgY29uZGl0aW9uIG11c3QgYWxsb3cgY2FzdFxuICBpZiAoXy5pc05pbChwa2cudmVyc2lvbnNbdmVyc2lvbl0pID09PSBmYWxzZSkge1xuICAgIHJldHVybiBwa2cudmVyc2lvbnNbdmVyc2lvbl07XG4gIH1cblxuICB0cnkge1xuICAgIHZlcnNpb24gPSBzZW12ZXIucGFyc2UodmVyc2lvbiwgdHJ1ZSk7XG4gICAgZm9yIChjb25zdCB2ZXJzaW9uSXRlbSBpbiBwa2cudmVyc2lvbnMpIHtcbiAgICAgIGlmICh2ZXJzaW9uLmNvbXBhcmUoc2VtdmVyLnBhcnNlKHZlcnNpb25JdGVtLCB0cnVlKSkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBrZy52ZXJzaW9uc1t2ZXJzaW9uSXRlbV07XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRmxhdHRlbiBhcnJheXMgb2YgdGFncy5cbiAqIEBwYXJhbSB7Kn0gZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRGlzdFRhZ3MocGtnOiBNYW5pZmVzdCk6IHZvaWQge1xuICBsZXQgc29ydGVkO1xuICBpZiAoIXBrZ1tESVNUX1RBR1NdLmxhdGVzdCkge1xuICAgIC8vIG92ZXJ3cml0ZSBsYXRlc3Qgd2l0aCBoaWdoZXN0IGtub3duIHZlcnNpb24gYmFzZWQgb24gc2VtdmVyIHNvcnRcbiAgICBzb3J0ZWQgPSBwa2dVdGlscy5zZW12ZXJTb3J0KE9iamVjdC5rZXlzKHBrZy52ZXJzaW9ucykpO1xuICAgIGlmIChzb3J0ZWQgJiYgc29ydGVkLmxlbmd0aCkge1xuICAgICAgcGtnW0RJU1RfVEFHU10ubGF0ZXN0ID0gc29ydGVkLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgdGFnIGluIHBrZ1tESVNUX1RBR1NdKSB7XG4gICAgaWYgKF8uaXNBcnJheShwa2dbRElTVF9UQUdTXVt0YWddKSkge1xuICAgICAgaWYgKHBrZ1tESVNUX1RBR1NdW3RhZ10ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHNvcnQgYXJyYXlcbiAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgY2xlYXJseSB3cm9uZywgd2UgbmVlZCB0byByZXNlYXJjaCB3aHkgdGhpcyBpcyBsaWtlIHRoaXMuXG4gICAgICAgIHNvcnRlZCA9IHBrZ1V0aWxzLnNlbXZlclNvcnQocGtnW0RJU1RfVEFHU11bdGFnXSk7XG4gICAgICAgIGlmIChzb3J0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdXNlIGhpZ2hlc3QgdmVyc2lvbiBiYXNlZCBvbiBzZW12ZXIgc29ydFxuICAgICAgICAgIHBrZ1tESVNUX1RBR1NdW3RhZ10gPSBzb3J0ZWQucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBwa2dbRElTVF9UQUdTXVt0YWddO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhwa2dbRElTVF9UQUdTXVt0YWddKSkge1xuICAgICAgaWYgKCFzZW12ZXIucGFyc2UocGtnW0RJU1RfVEFHU11bdGFnXSwgdHJ1ZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIHZlcnNpb24gaXMgaW52YWxpZCwgZGVsZXRlIHRoZSBkaXN0LXRhZyBlbnRyeVxuICAgICAgICBkZWxldGUgcGtnW0RJU1RfVEFHU11bdGFnXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgcGFyc2VJbnRlcnZhbFRhYmxlID0ge1xuICAnJzogMTAwMCxcbiAgbXM6IDEsXG4gIHM6IDEwMDAsXG4gIG06IDYwICogMTAwMCxcbiAgaDogNjAgKiA2MCAqIDEwMDAsXG4gIGQ6IDg2NDAwMDAwLFxuICB3OiA3ICogODY0MDAwMDAsXG4gIE06IDMwICogODY0MDAwMDAsXG4gIHk6IDM2NSAqIDg2NDAwMDAwLFxufTtcblxuLyoqXG4gKiBQYXJzZSBhbiBpbnRlcm5hbCBzdHJpbmcgdG8gbnVtYmVyXG4gKiBAcGFyYW0geyp9IGludGVydmFsXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUludGVydmFsKGludGVydmFsOiBhbnkpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIGludGVydmFsID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBpbnRlcnZhbCAqIDEwMDA7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IDA7XG4gIGxldCBsYXN0X3N1ZmZpeCA9IEluZmluaXR5O1xuICBpbnRlcnZhbC5zcGxpdCgvXFxzKy8pLmZvckVhY2goZnVuY3Rpb24gKHgpOiB2b2lkIHtcbiAgICBpZiAoIXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbSA9IHgubWF0Y2goL14oKDB8WzEtOV1bMC05XSopKFxcLlswLTldKyk/KShtc3xzfG18aHxkfHd8TXx5fCkkLyk7XG4gICAgaWYgKFxuICAgICAgIW0gfHxcbiAgICAgIHBhcnNlSW50ZXJ2YWxUYWJsZVttWzRdXSA+PSBsYXN0X3N1ZmZpeCB8fFxuICAgICAgKG1bNF0gPT09ICcnICYmIGxhc3Rfc3VmZml4ICE9PSBJbmZpbml0eSlcbiAgICApIHtcbiAgICAgIHRocm93IEVycm9yKCdpbnZhbGlkIGludGVydmFsOiAnICsgaW50ZXJ2YWwpO1xuICAgIH1cbiAgICBsYXN0X3N1ZmZpeCA9IHBhcnNlSW50ZXJ2YWxUYWJsZVttWzRdXTtcbiAgICByZXN1bHQgKz0gTnVtYmVyKG1bMV0pICogcGFyc2VJbnRlcnZhbFRhYmxlW21bNF1dO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IEVycm9yQ29kZSA9IHtcbiAgZ2V0Q29uZmxpY3QsXG4gIGdldEJhZERhdGEsXG4gIGdldEJhZFJlcXVlc3QsXG4gIGdldEludGVybmFsRXJyb3IsXG4gIGdldFVuYXV0aG9yaXplZCxcbiAgZ2V0Rm9yYmlkZGVuLFxuICBnZXRTZXJ2aWNlVW5hdmFpbGFibGUsXG4gIGdldE5vdEZvdW5kLFxuICBnZXRDb2RlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeU5hbWUocGFja2FnZXM6IGFueVtdLCBvcmRlckFzY2VuZGluZzogYm9vbGVhbiB8IHZvaWQgPSB0cnVlKTogc3RyaW5nW10ge1xuICByZXR1cm4gcGFja2FnZXMuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb21wYXJhdG9yTmFtZXMgPSBhLm5hbWUudG9Mb3dlckNhc2UoKSA8IGIubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIG9yZGVyQXNjZW5kaW5nID8gKGNvbXBhcmF0b3JOYW1lcyA/IC0xIDogMSkgOiBjb21wYXJhdG9yTmFtZXMgPyAxIDogLTE7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlUHJvcGVydGllcyhwcm9wZXJ0aWVzVG9EZWxldGU6IHN0cmluZ1tdLCBvYmplY3RJdGVtOiBhbnkpOiBhbnkge1xuICBfLmZvckVhY2gocHJvcGVydGllc1RvRGVsZXRlLCAocHJvcGVydHkpOiBhbnkgPT4ge1xuICAgIGRlbGV0ZSBvYmplY3RJdGVtW3Byb3BlcnR5XTtcbiAgfSk7XG5cbiAgcmV0dXJuIG9iamVjdEl0ZW07XG59XG5cbi8qKlxuICogcGFyc2UgcGFja2FnZSByZWFkbWUgLSBtYXJrZG93bi9hc2NpaVxuICogQHBhcmFtIHtTdHJpbmd9IHBhY2thZ2VOYW1lIG5hbWUgb2YgcGFja2FnZVxuICogQHBhcmFtIHtTdHJpbmd9IHJlYWRtZSBwYWNrYWdlIHJlYWRtZVxuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGNvbnZlcnRlZCBodG1sIHRlbXBsYXRlXG4gKi9cbi8vIFRPRE86IHJlbmFtZSwgZG9lcyBub3QgcGFyc2UgYW55bW9yZVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVhZG1lKHBhY2thZ2VOYW1lOiBzdHJpbmcsIHJlYWRtZTogc3RyaW5nKTogc3RyaW5nIHwgdm9pZCB7XG4gIGlmIChfLmlzRW1wdHkocmVhZG1lKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gcmVhZG1lO1xuICB9XG5cbiAgLy8gbG9ncyByZWFkbWUgbm90IGZvdW5kIGVycm9yXG4gIGxvZ2dlci5pbmZvKHsgcGFja2FnZU5hbWUgfSwgJ0B7cGFja2FnZU5hbWV9OiBObyByZWFkbWUgZm91bmQnKTtcblxuICByZXR1cm4gJ0VSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCEnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU2NvcGVkVXJpKHBhY2thZ2VOYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhY2thZ2VOYW1lLnJlcGxhY2UoL1xcLy9nLCAnJTJmJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNEaWZmT25lS2V5KHZlcnNpb25zKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh2ZXJzaW9ucykubGVuZ3RoICE9PSAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWZXJzaW9uVmFsaWQocGFja2FnZU1ldGEsIHBhY2thZ2VWZXJzaW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IGhhc1ZlcnNpb24gPSB0eXBlb2YgcGFja2FnZVZlcnNpb24gIT09ICd1bmRlZmluZWQnO1xuICBpZiAoIWhhc1ZlcnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBoYXNNYXRjaFZlcnNpb24gPSBPYmplY3Qua2V5cyhwYWNrYWdlTWV0YS52ZXJzaW9ucykuaW5jbHVkZXMocGFja2FnZVZlcnNpb24pO1xuICByZXR1cm4gaGFzTWF0Y2hWZXJzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWxhdGVkVG9EZXByZWNhdGlvbihwa2dJbmZvOiBNYW5pZmVzdCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHZlcnNpb25zIH0gPSBwa2dJbmZvO1xuICBmb3IgKGNvbnN0IHZlcnNpb24gaW4gdmVyc2lvbnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZlcnNpb25zW3ZlcnNpb25dLCAnZGVwcmVjYXRlZCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNvbmZpZ1BhdGggPSBmdW5jdGlvbiAoc3RvcmFnZUxvY2F0aW9uOiBzdHJpbmcsIGZpbGU6IHN0cmluZykge1xuICByZXR1cm4gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShzdG9yYWdlTG9jYXRpb24pLCBmaWxlKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dIVFRQU1dhcm5pbmcoc3RvcmFnZUxvY2F0aW9uKSB7XG4gIGxvZ2dlci5mYXRhbChcbiAgICBbXG4gICAgICAnWW91IGhhdmUgZW5hYmxlZCBIVFRQUyBhbmQgbmVlZCB0byBzcGVjaWZ5IGVpdGhlciAnLFxuICAgICAgJyAgICBcImh0dHBzLmtleVwiIGFuZCBcImh0dHBzLmNlcnRcIiBvciAnLFxuICAgICAgJyAgICBcImh0dHBzLnBmeFwiIGFuZCBvcHRpb25hbGx5IFwiaHR0cHMucGFzc3BocmFzZVwiICcsXG4gICAgICAndG8gcnVuIGh0dHBzIHNlcnZlcicsXG4gICAgICAnJyxcbiAgICAgIC8vIGNvbW1hbmRzIGFyZSBib3Jyb3dlZCBmcm9tIG5vZGUuanMgZG9jc1xuICAgICAgJ1RvIHF1aWNrbHkgY3JlYXRlIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLCB1c2U6JyxcbiAgICAgICcgJCBvcGVuc3NsIGdlbnJzYSAtb3V0ICcgKyByZXNvbHZlQ29uZmlnUGF0aChzdG9yYWdlTG9jYXRpb24sIGtleVBlbSkgKyAnIDIwNDgnLFxuICAgICAgJyAkIG9wZW5zc2wgcmVxIC1uZXcgLXNoYTI1NiAta2V5ICcgK1xuICAgICAgICByZXNvbHZlQ29uZmlnUGF0aChzdG9yYWdlTG9jYXRpb24sIGtleVBlbSkgK1xuICAgICAgICAnIC1vdXQgJyArXG4gICAgICAgIHJlc29sdmVDb25maWdQYXRoKHN0b3JhZ2VMb2NhdGlvbiwgY3NyUGVtKSxcbiAgICAgICcgJCBvcGVuc3NsIHg1MDkgLXJlcSAtaW4gJyArXG4gICAgICAgIHJlc29sdmVDb25maWdQYXRoKHN0b3JhZ2VMb2NhdGlvbiwgY3NyUGVtKSArXG4gICAgICAgICcgLXNpZ25rZXkgJyArXG4gICAgICAgIHJlc29sdmVDb25maWdQYXRoKHN0b3JhZ2VMb2NhdGlvbiwga2V5UGVtKSArXG4gICAgICAgICcgLW91dCAnICtcbiAgICAgICAgcmVzb2x2ZUNvbmZpZ1BhdGgoc3RvcmFnZUxvY2F0aW9uLCBjZXJ0UGVtKSxcbiAgICAgICcnLFxuICAgICAgJ0FuZCB0aGVuIGFkZCB0byBjb25maWcgZmlsZSAoJyArIHN0b3JhZ2VMb2NhdGlvbiArICcpOicsXG4gICAgICAnICBodHRwczonLFxuICAgICAgYCAgICBrZXk6ICR7cmVzb2x2ZUNvbmZpZ1BhdGgoc3RvcmFnZUxvY2F0aW9uLCBrZXlQZW0pfWAsXG4gICAgICBgICAgIGNlcnQ6ICR7cmVzb2x2ZUNvbmZpZ1BhdGgoc3RvcmFnZUxvY2F0aW9uLCBjZXJ0UGVtKX1gLFxuICAgIF0uam9pbignXFxuJylcbiAgKTtcbiAgcHJvY2Vzcy5leGl0KDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTG9naW4oY29uZmlnOiBDb25maWcpIHtcbiAgcmV0dXJuIF8uaXNOaWwoY29uZmlnPy53ZWI/LmxvZ2luKSB8fCBjb25maWc/LndlYj8ubG9naW4gPT09IHRydWU7XG59XG5cbmV4cG9ydCB7IGJ1aWxkVG9rZW5VdGlsIGFzIGJ1aWxkVG9rZW4sIHBhcnNlQ29uZmlnRmlsZSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7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
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Check whether any version in a package manifest has a tarball URL
|
|
269
|
+
* that matches the given filename.
|
|
270
|
+
*/
|
|
271
|
+
function hasTarball(pkg, filename) {
|
|
272
|
+
return Object.values(pkg.versions || {}).some(version => version.dist?.tarball?.endsWith('/' + filename));
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfbm9kZVBhdGgiLCJfc2VtdmVyIiwiX2NvbmZpZyIsIl9jb3JlIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImNyZWF0ZURlYnVnIiwiZ2V0QmFkRGF0YSIsImdldEJhZFJlcXVlc3QiLCJnZXRDb2RlIiwiZ2V0Q29uZmxpY3QiLCJnZXRGb3JiaWRkZW4iLCJnZXRJbnRlcm5hbEVycm9yIiwiZ2V0Tm90Rm91bmQiLCJnZXRTZXJ2aWNlVW5hdmFpbGFibGUiLCJnZXRVbmF1dGhvcml6ZWQiLCJlcnJvclV0aWxzIiwiaW5pdExvZ2dlciIsImxvZ0NvbmZpZyIsImxvZ3MiLCJsb2ciLCJ3YXJuaW5nVXRpbHMiLCJlbWl0IiwiQ29kZXMiLCJWRVJXQVIwMDIiLCJzZXR1cCIsImFkZFNjb3BlIiwic2NvcGUiLCJwYWNrYWdlTmFtZSIsImlzT2JqZWN0IiwiZXhwb3J0cyIsInZhbGlkYXRpb25VdGlscyIsImlzT2JqZWN0T3JBcnJheSIsIm9iaiIsIl8iLCJpc051bGwiLCJ0YWdWZXJzaW9uIiwiZGF0YSIsInZlcnNpb24iLCJ0YWciLCJESVNUX1RBR1MiLCJzZW12ZXIiLCJwYXJzZSIsImdldFZlcnNpb24iLCJwa2ciLCJpc05pbCIsInZlcnNpb25zIiwidmVyc2lvbkl0ZW0iLCJjb21wYXJlIiwidW5kZWZpbmVkIiwibm9ybWFsaXplRGlzdFRhZ3MiLCJzb3J0ZWQiLCJsYXRlc3QiLCJwa2dVdGlscyIsInNlbXZlclNvcnQiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwicG9wIiwiaXNBcnJheSIsImlzU3RyaW5nIiwicGFyc2VJbnRlcnZhbFRhYmxlIiwibXMiLCJzIiwibSIsImgiLCJkIiwidyIsIk0iLCJ5IiwicGFyc2VJbnRlcnZhbCIsImludGVydmFsIiwicmVzdWx0IiwibGFzdF9zdWZmaXgiLCJJbmZpbml0eSIsInNwbGl0IiwiZm9yRWFjaCIsIngiLCJtYXRjaCIsIkVycm9yIiwiTnVtYmVyIiwiRXJyb3JDb2RlIiwic29ydEJ5TmFtZSIsInBhY2thZ2VzIiwib3JkZXJBc2NlbmRpbmciLCJzbGljZSIsInNvcnQiLCJhIiwiYiIsImNvbXBhcmF0b3JOYW1lcyIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImRlbGV0ZVByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzVG9EZWxldGUiLCJvYmplY3RJdGVtIiwicHJvcGVydHkiLCJwYXJzZVJlYWRtZSIsInJlYWRtZSIsImlzRW1wdHkiLCJsb2dnZXIiLCJpbmZvIiwiZW5jb2RlU2NvcGVkVXJpIiwicmVwbGFjZSIsImhhc0RpZmZPbmVLZXkiLCJpc1ZlcnNpb25WYWxpZCIsInBhY2thZ2VNZXRhIiwicGFja2FnZVZlcnNpb24iLCJoYXNWZXJzaW9uIiwiaGFzTWF0Y2hWZXJzaW9uIiwiaW5jbHVkZXMiLCJpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uIiwicGtnSW5mbyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlc29sdmVDb25maWdQYXRoIiwic3RvcmFnZUxvY2F0aW9uIiwiZmlsZSIsInBhdGgiLCJyZXNvbHZlIiwiZGlybmFtZSIsImxvZ0hUVFBTV2FybmluZyIsImZhdGFsIiwia2V5UGVtIiwiY3NyUGVtIiwiY2VydFBlbSIsImpvaW4iLCJwcm9jZXNzIiwiZXhpdCIsImhhc0xvZ2luIiwiY29uZmlnIiwid2ViIiwibG9naW4iLCJoYXNUYXJiYWxsIiwiZmlsZW5hbWUiLCJ2YWx1ZXMiLCJzb21lIiwiZGlzdCIsInRhcmJhbGwiLCJlbmRzV2l0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZURlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5pbXBvcnQgeyBwYXJzZUNvbmZpZ0ZpbGUgfSBmcm9tICdAdmVyZGFjY2lvL2NvbmZpZyc7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBwa2dVdGlscywgdmFsaWRhdGlvblV0aWxzLCB3YXJuaW5nVXRpbHMgfSBmcm9tICdAdmVyZGFjY2lvL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlnWWFtbCwgTG9nZ2VyQ29uZmlnSXRlbSwgU3RyaW5nVmFsdWUgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7IENvbmZpZywgTWFuaWZlc3QsIFZlcnNpb24gfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7IGJ1aWxkVG9rZW4gYXMgYnVpbGRUb2tlblV0aWwgfSBmcm9tICdAdmVyZGFjY2lvL3V0aWxzJztcblxuaW1wb3J0IHsgRElTVF9UQUdTLCBjZXJ0UGVtLCBjc3JQZW0sIGtleVBlbSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGxvZ2dlciwgc2V0dXAgfSBmcm9tICcuL2xvZ2dlcic7XG5cbmNvbnN0IGRlYnVnID0gY3JlYXRlRGVidWcoJ3ZlcmRhY2NpbzpsaWI6dXRpbHMnKTtcblxuY29uc3Qge1xuICBnZXRCYWREYXRhLFxuICBnZXRCYWRSZXF1ZXN0LFxuICBnZXRDb2RlLFxuICBnZXRDb25mbGljdCxcbiAgZ2V0Rm9yYmlkZGVuLFxuICBnZXRJbnRlcm5hbEVycm9yLFxuICBnZXROb3RGb3VuZCxcbiAgZ2V0U2VydmljZVVuYXZhaWxhYmxlLFxuICBnZXRVbmF1dGhvcml6ZWQsXG59ID0gZXJyb3JVdGlscztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRMb2dnZXIobG9nQ29uZmlnOiBDb25maWdZYW1sKSB7XG4gIGlmIChsb2dDb25maWcubG9ncykge1xuICAgIGxvZ0NvbmZpZy5sb2cgPSBsb2dDb25maWcubG9ncztcbiAgICB3YXJuaW5nVXRpbHMuZW1pdCh3YXJuaW5nVXRpbHMuQ29kZXMuVkVSV0FSMDAyKTtcbiAgfVxuICBkZWJ1ZygnaW5pdGlhbGl6aW5nIGxvZ2dlciB3aXRoIGNvbmZpZzogJW8nLCBsb2dDb25maWcubG9nKTtcbiAgc2V0dXAobG9nQ29uZmlnLmxvZyBhcyBMb2dnZXJDb25maWdJdGVtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFNjb3BlKHNjb3BlOiBzdHJpbmcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYEAke3Njb3BlfS8ke3BhY2thZ2VOYW1lfWA7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBlbGVtZW50IGlzIGFuIE9iamVjdFxuICogQHBhcmFtIHsqfSBvYmogdGhlIGVsZW1lbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBpc09iamVjdCA9IHZhbGlkYXRpb25VdGlscy5pc09iamVjdDtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBub3QgdXNlZCB1biB2NlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RPckFycmF5KG9iajogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBfLmlzT2JqZWN0KG9iaikgJiYgXy5pc051bGwob2JqKSA9PT0gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdWZXJzaW9uKGRhdGE6IE1hbmlmZXN0LCB2ZXJzaW9uOiBzdHJpbmcsIHRhZzogU3RyaW5nVmFsdWUpOiBib29sZWFuIHtcbiAgaWYgKHRhZyAmJiBkYXRhW0RJU1RfVEFHU11bdGFnXSAhPT0gdmVyc2lvbiAmJiBzZW12ZXIucGFyc2UodmVyc2lvbiwgdHJ1ZSkpIHtcbiAgICAvLyB2YWxpZCB2ZXJzaW9uIC0gc3RvcmVcbiAgICBkYXRhW0RJU1RfVEFHU11bdGFnXSA9IHZlcnNpb247XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldHMgdmVyc2lvbiBmcm9tIGEgcGFja2FnZSBvYmplY3QgdGFraW5nIGludG8gYWNjb3VudCBzZW12ZXIgd2VpcmRuZXNzLlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm4gdGhlIHNlbWFudGljIHZlcnNpb24gb2YgYSBwYWNrYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzaW9uKHBrZzogTWFuaWZlc3QsIHZlcnNpb246IGFueSk6IFZlcnNpb24gfCB2b2lkIHtcbiAgLy8gdGhpcyBjb25kaXRpb24gbXVzdCBhbGxvdyBjYXN0XG4gIGlmIChfLmlzTmlsKHBrZy52ZXJzaW9uc1t2ZXJzaW9uXSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIHBrZy52ZXJzaW9uc1t2ZXJzaW9uXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgdmVyc2lvbiA9IHNlbXZlci5wYXJzZSh2ZXJzaW9uLCB0cnVlKTtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb25JdGVtIGluIHBrZy52ZXJzaW9ucykge1xuICAgICAgaWYgKHZlcnNpb24uY29tcGFyZShzZW12ZXIucGFyc2UodmVyc2lvbkl0ZW0sIHRydWUpKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGtnLnZlcnNpb25zW3ZlcnNpb25JdGVtXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGbGF0dGVuIGFycmF5cyBvZiB0YWdzLlxuICogQHBhcmFtIHsqfSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEaXN0VGFncyhwa2c6IE1hbmlmZXN0KTogdm9pZCB7XG4gIGxldCBzb3J0ZWQ7XG4gIGlmICghcGtnW0RJU1RfVEFHU10ubGF0ZXN0KSB7XG4gICAgLy8gb3ZlcndyaXRlIGxhdGVzdCB3aXRoIGhpZ2hlc3Qga25vd24gdmVyc2lvbiBiYXNlZCBvbiBzZW12ZXIgc29ydFxuICAgIHNvcnRlZCA9IHBrZ1V0aWxzLnNlbXZlclNvcnQoT2JqZWN0LmtleXMocGtnLnZlcnNpb25zKSk7XG4gICAgaWYgKHNvcnRlZCAmJiBzb3J0ZWQubGVuZ3RoKSB7XG4gICAgICBwa2dbRElTVF9UQUdTXS5sYXRlc3QgPSBzb3J0ZWQucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCB0YWcgaW4gcGtnW0RJU1RfVEFHU10pIHtcbiAgICBpZiAoXy5pc0FycmF5KHBrZ1tESVNUX1RBR1NdW3RhZ10pKSB7XG4gICAgICBpZiAocGtnW0RJU1RfVEFHU11bdGFnXS5sZW5ndGgpIHtcbiAgICAgICAgLy8gc29ydCBhcnJheVxuICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyBjbGVhcmx5IHdyb25nLCB3ZSBuZWVkIHRvIHJlc2VhcmNoIHdoeSB0aGlzIGlzIGxpa2UgdGhpcy5cbiAgICAgICAgc29ydGVkID0gcGtnVXRpbHMuc2VtdmVyU29ydChwa2dbRElTVF9UQUdTXVt0YWddKTtcbiAgICAgICAgaWYgKHNvcnRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyB1c2UgaGlnaGVzdCB2ZXJzaW9uIGJhc2VkIG9uIHNlbXZlciBzb3J0XG4gICAgICAgICAgcGtnW0RJU1RfVEFHU11bdGFnXSA9IHNvcnRlZC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHBrZ1tESVNUX1RBR1NdW3RhZ107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHBrZ1tESVNUX1RBR1NdW3RhZ10pKSB7XG4gICAgICBpZiAoIXNlbXZlci5wYXJzZShwa2dbRElTVF9UQUdTXVt0YWddLCB0cnVlKSkge1xuICAgICAgICAvLyBpZiB0aGUgdmVyc2lvbiBpcyBpbnZhbGlkLCBkZWxldGUgdGhlIGRpc3QtdGFnIGVudHJ5XG4gICAgICAgIGRlbGV0ZSBwa2dbRElTVF9UQUdTXVt0YWddO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBwYXJzZUludGVydmFsVGFibGUgPSB7XG4gICcnOiAxMDAwLFxuICBtczogMSxcbiAgczogMTAwMCxcbiAgbTogNjAgKiAxMDAwLFxuICBoOiA2MCAqIDYwICogMTAwMCxcbiAgZDogODY0MDAwMDAsXG4gIHc6IDcgKiA4NjQwMDAwMCxcbiAgTTogMzAgKiA4NjQwMDAwMCxcbiAgeTogMzY1ICogODY0MDAwMDAsXG59O1xuXG4vKipcbiAqIFBhcnNlIGFuIGludGVybmFsIHN0cmluZyB0byBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gaW50ZXJ2YWxcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSW50ZXJ2YWwoaW50ZXJ2YWw6IGFueSk6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGludGVydmFsICogMTAwMDtcbiAgfVxuICBsZXQgcmVzdWx0ID0gMDtcbiAgbGV0IGxhc3Rfc3VmZml4ID0gSW5maW5pdHk7XG4gIGludGVydmFsLnNwbGl0KC9cXHMrLykuZm9yRWFjaChmdW5jdGlvbiAoeCk6IHZvaWQge1xuICAgIGlmICgheCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtID0geC5tYXRjaCgvXigoMHxbMS05XVswLTldKikoXFwuWzAtOV0rKT8pKG1zfHN8bXxofGR8d3xNfHl8KSQvKTtcbiAgICBpZiAoXG4gICAgICAhbSB8fFxuICAgICAgcGFyc2VJbnRlcnZhbFRhYmxlW21bNF1dID49IGxhc3Rfc3VmZml4IHx8XG4gICAgICAobVs0XSA9PT0gJycgJiYgbGFzdF9zdWZmaXggIT09IEluZmluaXR5KVxuICAgICkge1xuICAgICAgdGhyb3cgRXJyb3IoJ2ludmFsaWQgaW50ZXJ2YWw6ICcgKyBpbnRlcnZhbCk7XG4gICAgfVxuICAgIGxhc3Rfc3VmZml4ID0gcGFyc2VJbnRlcnZhbFRhYmxlW21bNF1dO1xuICAgIHJlc3VsdCArPSBOdW1iZXIobVsxXSkgKiBwYXJzZUludGVydmFsVGFibGVbbVs0XV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgRXJyb3JDb2RlID0ge1xuICBnZXRDb25mbGljdCxcbiAgZ2V0QmFkRGF0YSxcbiAgZ2V0QmFkUmVxdWVzdCxcbiAgZ2V0SW50ZXJuYWxFcnJvcixcbiAgZ2V0VW5hdXRob3JpemVkLFxuICBnZXRGb3JiaWRkZW4sXG4gIGdldFNlcnZpY2VVbmF2YWlsYWJsZSxcbiAgZ2V0Tm90Rm91bmQsXG4gIGdldENvZGUsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc29ydEJ5TmFtZShwYWNrYWdlczogYW55W10sIG9yZGVyQXNjZW5kaW5nOiBib29sZWFuIHwgdm9pZCA9IHRydWUpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBwYWNrYWdlcy5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpOiBudW1iZXIge1xuICAgIGNvbnN0IGNvbXBhcmF0b3JOYW1lcyA9IGEubmFtZS50b0xvd2VyQ2FzZSgpIDwgYi5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICByZXR1cm4gb3JkZXJBc2NlbmRpbmcgPyAoY29tcGFyYXRvck5hbWVzID8gLTEgOiAxKSA6IGNvbXBhcmF0b3JOYW1lcyA/IDEgOiAtMTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0aWVzKHByb3BlcnRpZXNUb0RlbGV0ZTogc3RyaW5nW10sIG9iamVjdEl0ZW06IGFueSk6IGFueSB7XG4gIF8uZm9yRWFjaChwcm9wZXJ0aWVzVG9EZWxldGUsIChwcm9wZXJ0eSk6IGFueSA9PiB7XG4gICAgZGVsZXRlIG9iamVjdEl0ZW1bcHJvcGVydHldO1xuICB9KTtcblxuICByZXR1cm4gb2JqZWN0SXRlbTtcbn1cblxuLyoqXG4gKiBwYXJzZSBwYWNrYWdlIHJlYWRtZSAtIG1hcmtkb3duL2FzY2lpXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFja2FnZU5hbWUgbmFtZSBvZiBwYWNrYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVhZG1lIHBhY2thZ2UgcmVhZG1lXG5cbiAqIEByZXR1cm4ge1N0cmluZ30gY29udmVydGVkIGh0bWwgdGVtcGxhdGVcbiAqL1xuLy8gVE9ETzogcmVuYW1lLCBkb2VzIG5vdCBwYXJzZSBhbnltb3JlXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWFkbWUocGFja2FnZU5hbWU6IHN0cmluZywgcmVhZG1lOiBzdHJpbmcpOiBzdHJpbmcgfCB2b2lkIHtcbiAgaWYgKF8uaXNFbXB0eShyZWFkbWUpID09PSBmYWxzZSkge1xuICAgIHJldHVybiByZWFkbWU7XG4gIH1cblxuICAvLyBsb2dzIHJlYWRtZSBub3QgZm91bmQgZXJyb3JcbiAgbG9nZ2VyLmluZm8oeyBwYWNrYWdlTmFtZSB9LCAnQHtwYWNrYWdlTmFtZX06IE5vIHJlYWRtZSBmb3VuZCcpO1xuXG4gIHJldHVybiAnRVJST1I6IE5vIFJFQURNRSBkYXRhIGZvdW5kISc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVTY29wZWRVcmkocGFja2FnZU5hbWUpOiBzdHJpbmcge1xuICByZXR1cm4gcGFja2FnZU5hbWUucmVwbGFjZSgvXFwvL2csICclMmYnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0RpZmZPbmVLZXkodmVyc2lvbnMpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHZlcnNpb25zKS5sZW5ndGggIT09IDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlcnNpb25WYWxpZChwYWNrYWdlTWV0YSwgcGFja2FnZVZlcnNpb24pOiBib29sZWFuIHtcbiAgY29uc3QgaGFzVmVyc2lvbiA9IHR5cGVvZiBwYWNrYWdlVmVyc2lvbiAhPT0gJ3VuZGVmaW5lZCc7XG4gIGlmICghaGFzVmVyc2lvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGhhc01hdGNoVmVyc2lvbiA9IE9iamVjdC5rZXlzKHBhY2thZ2VNZXRhLnZlcnNpb25zKS5pbmNsdWRlcyhwYWNrYWdlVmVyc2lvbik7XG4gIHJldHVybiBoYXNNYXRjaFZlcnNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uKHBrZ0luZm86IE1hbmlmZXN0KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdmVyc2lvbnMgfSA9IHBrZ0luZm87XG4gIGZvciAoY29uc3QgdmVyc2lvbiBpbiB2ZXJzaW9ucykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmVyc2lvbnNbdmVyc2lvbl0sICdkZXByZWNhdGVkJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQ29uZmlnUGF0aCA9IGZ1bmN0aW9uIChzdG9yYWdlTG9jYXRpb246IHN0cmluZywgZmlsZTogc3RyaW5nKSB7XG4gIHJldHVybiBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHN0b3JhZ2VMb2NhdGlvbiksIGZpbGUpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0hUVFBTV2FybmluZyhzdG9yYWdlTG9jYXRpb24pIHtcbiAgbG9nZ2VyLmZhdGFsKFxuICAgIFtcbiAgICAgICdZb3UgaGF2ZSBlbmFibGVkIEhUVFBTIGFuZCBuZWVkIHRvIHNwZWNpZnkgZWl0aGVyICcsXG4gICAgICAnICAgIFwiaHR0cHMua2V5XCIgYW5kIFwiaHR0cHMuY2VydFwiIG9yICcsXG4gICAgICAnICAgIFwiaHR0cHMucGZ4XCIgYW5kIG9wdGlvbmFsbHkgXCJodHRwcy5wYXNzcGhyYXNlXCIgJyxcbiAgICAgICd0byBydW4gaHR0cHMgc2VydmVyJyxcbiAgICAgICcnLFxuICAgICAgLy8gY29tbWFuZHMgYXJlIGJvcnJvd2VkIGZyb20gbm9kZS5qcyBkb2NzXG4gICAgICAnVG8gcXVpY2tseSBjcmVhdGUgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUsIHVzZTonLFxuICAgICAgJyAkIG9wZW5zc2wgZ2VucnNhIC1vdXQgJyArIHJlc29sdmVDb25maWdQYXRoKHN0b3JhZ2VMb2NhdGlvbiwga2V5UGVtKSArICcgMjA0OCcsXG4gICAgICAnICQgb3BlbnNzbCByZXEgLW5ldyAtc2hhMjU2IC1rZXkgJyArXG4gICAgICAgIHJlc29sdmVDb25maWdQYXRoKHN0b3JhZ2VMb2NhdGlvbiwga2V5UGVtKSArXG4gICAgICAgICcgLW91dCAnICtcbiAgICAgICAgcmVzb2x2ZUNvbmZpZ1BhdGgoc3RvcmFnZUxvY2F0aW9uLCBjc3JQZW0pLFxuICAgICAgJyAkIG9wZW5zc2wgeDUwOSAtcmVxIC1pbiAnICtcbiAgICAgICAgcmVzb2x2ZUNvbmZpZ1BhdGgoc3RvcmFnZUxvY2F0aW9uLCBjc3JQZW0pICtcbiAgICAgICAgJyAtc2lnbmtleSAnICtcbiAgICAgICAgcmVzb2x2ZUNvbmZpZ1BhdGgoc3RvcmFnZUxvY2F0aW9uLCBrZXlQZW0pICtcbiAgICAgICAgJyAtb3V0ICcgK1xuICAgICAgICByZXNvbHZlQ29uZmlnUGF0aChzdG9yYWdlTG9jYXRpb24sIGNlcnRQZW0pLFxuICAgICAgJycsXG4gICAgICAnQW5kIHRoZW4gYWRkIHRvIGNvbmZpZyBmaWxlICgnICsgc3RvcmFnZUxvY2F0aW9uICsgJyk6JyxcbiAgICAgICcgIGh0dHBzOicsXG4gICAgICBgICAgIGtleTogJHtyZXNvbHZlQ29uZmlnUGF0aChzdG9yYWdlTG9jYXRpb24sIGtleVBlbSl9YCxcbiAgICAgIGAgICAgY2VydDogJHtyZXNvbHZlQ29uZmlnUGF0aChzdG9yYWdlTG9jYXRpb24sIGNlcnRQZW0pfWAsXG4gICAgXS5qb2luKCdcXG4nKVxuICApO1xuICBwcm9jZXNzLmV4aXQoMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMb2dpbihjb25maWc6IENvbmZpZykge1xuICByZXR1cm4gXy5pc05pbChjb25maWc/LndlYj8ubG9naW4pIHx8IGNvbmZpZz8ud2ViPy5sb2dpbiA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFueSB2ZXJzaW9uIGluIGEgcGFja2FnZSBtYW5pZmVzdCBoYXMgYSB0YXJiYWxsIFVSTFxuICogdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBmaWxlbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1RhcmJhbGwocGtnOiBNYW5pZmVzdCwgZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhwa2cudmVyc2lvbnMgfHwge30pLnNvbWUoKHZlcnNpb24pID0+XG4gICAgKHZlcnNpb24gYXMgVmVyc2lvbikuZGlzdD8udGFyYmFsbD8uZW5kc1dpdGgoJy8nICsgZmlsZW5hbWUpXG4gICk7XG59XG5cbmV4cG9ydCB7IGJ1aWxkVG9rZW5VdGlsIGFzIGJ1aWxkVG9rZW4sIHBhcnNlQ29uZmlnRmlsZSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsU0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssS0FBQSxHQUFBTCxPQUFBO0FBR0EsSUFBQU0sTUFBQSxHQUFBTixPQUFBO0FBRUEsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsT0FBQSxHQUFBUixPQUFBO0FBQXlDLFNBQUFELHVCQUFBVSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRXpDLE1BQU1HLEtBQUssR0FBRyxJQUFBQyxjQUFXLEVBQUMscUJBQXFCLENBQUM7QUFFaEQsTUFBTTtFQUNKQyxVQUFVO0VBQ1ZDLGFBQWE7RUFDYkMsT0FBTztFQUNQQyxXQUFXO0VBQ1hDLFlBQVk7RUFDWkMsZ0JBQWdCO0VBQ2hCQyxXQUFXO0VBQ1hDLHFCQUFxQjtFQUNyQkM7QUFDRixDQUFDLEdBQUdDLGdCQUFVO0FBRVAsU0FBU0MsVUFBVUEsQ0FBQ0MsU0FBcUIsRUFBRTtFQUNoRCxJQUFJQSxTQUFTLENBQUND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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "verdaccio",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.6.0",
|
|
4
4
|
"description": "A lightweight private npm proxy registry",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Verdaccio Maintainers",
|
|
@@ -20,22 +20,22 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@cypress/request": "3.0.10",
|
|
23
|
-
"@verdaccio/auth": "8.0.
|
|
24
|
-
"@verdaccio/config": "8.
|
|
25
|
-
"@verdaccio/core": "8.
|
|
26
|
-
"@verdaccio/hooks": "8.0.
|
|
27
|
-
"@verdaccio/loaders": "8.0.
|
|
28
|
-
"@verdaccio/local-storage-legacy": "11.
|
|
29
|
-
"@verdaccio/logger": "8.0.
|
|
30
|
-
"@verdaccio/middleware": "8.0.
|
|
31
|
-
"@verdaccio/package-filter": "13.0.
|
|
32
|
-
"@verdaccio/search-indexer": "8.0.0
|
|
33
|
-
"@verdaccio/signature": "8.0.
|
|
34
|
-
"@verdaccio/streams": "10.2.
|
|
35
|
-
"@verdaccio/tarball": "13.0.
|
|
23
|
+
"@verdaccio/auth": "8.0.1",
|
|
24
|
+
"@verdaccio/config": "8.1.0",
|
|
25
|
+
"@verdaccio/core": "8.1.0",
|
|
26
|
+
"@verdaccio/hooks": "8.0.1",
|
|
27
|
+
"@verdaccio/loaders": "8.0.1",
|
|
28
|
+
"@verdaccio/local-storage-legacy": "11.3.1",
|
|
29
|
+
"@verdaccio/logger": "8.0.1",
|
|
30
|
+
"@verdaccio/middleware": "8.0.1",
|
|
31
|
+
"@verdaccio/package-filter": "13.0.1",
|
|
32
|
+
"@verdaccio/search-indexer": "8.0.0",
|
|
33
|
+
"@verdaccio/signature": "8.0.1",
|
|
34
|
+
"@verdaccio/streams": "10.2.3",
|
|
35
|
+
"@verdaccio/tarball": "13.0.1",
|
|
36
36
|
"@verdaccio/ui-theme": "9.0.0-next-9.14",
|
|
37
|
-
"@verdaccio/url": "13.0.
|
|
38
|
-
"@verdaccio/utils": "8.1.
|
|
37
|
+
"@verdaccio/url": "13.0.1",
|
|
38
|
+
"@verdaccio/utils": "8.1.1",
|
|
39
39
|
"JSONStream": "1.3.5",
|
|
40
40
|
"async": "3.2.6",
|
|
41
41
|
"clipanion": "4.0.0-rc.4",
|
|
@@ -47,9 +47,9 @@
|
|
|
47
47
|
"lodash": "4.18.1",
|
|
48
48
|
"lru-cache": "7.18.3",
|
|
49
49
|
"mime": "3.0.0",
|
|
50
|
-
"semver": "7.
|
|
51
|
-
"verdaccio-audit": "13.0.
|
|
52
|
-
"verdaccio-htpasswd": "13.0.
|
|
50
|
+
"semver": "7.8.0",
|
|
51
|
+
"verdaccio-audit": "13.0.1",
|
|
52
|
+
"verdaccio-htpasswd": "13.0.1"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@babel/cli": "7.28.6",
|
|
@@ -76,20 +76,16 @@
|
|
|
76
76
|
"@verdaccio-scope/verdaccio-auth-foo": "0.0.2",
|
|
77
77
|
"@verdaccio/e2e-cli": "2.6.0",
|
|
78
78
|
"@verdaccio/e2e-ui": "2.4.1",
|
|
79
|
-
"@verdaccio/eslint-config": "13.
|
|
80
|
-
"@verdaccio/test-helper": "4.0.0
|
|
81
|
-
"@verdaccio/types": "13.0.0
|
|
82
|
-
"@vitest/coverage-v8": "
|
|
83
|
-
"@vitest/eslint-plugin": "1.6.
|
|
79
|
+
"@verdaccio/eslint-config": "13.1.0",
|
|
80
|
+
"@verdaccio/test-helper": "4.0.0",
|
|
81
|
+
"@verdaccio/types": "13.0.0",
|
|
82
|
+
"@vitest/coverage-v8": "4.1.5",
|
|
83
|
+
"@vitest/eslint-plugin": "1.6.17",
|
|
84
84
|
"babel-plugin-transform-inline-environment-variables": "0.4.4",
|
|
85
85
|
"cross-env": "10.1.0",
|
|
86
86
|
"cypress": "15",
|
|
87
87
|
"eslint": "10.0.3",
|
|
88
88
|
"eslint-plugin-cypress": "6.1.0",
|
|
89
|
-
"eslint-plugin-jest": "29.15.0",
|
|
90
|
-
"eslint-plugin-react": "7.37.5",
|
|
91
|
-
"eslint-plugin-react-hooks": "7.0.1",
|
|
92
|
-
"eslint-plugin-verdaccio": "10.1.0",
|
|
93
89
|
"fs-extra": "11.3.2",
|
|
94
90
|
"get-port": "7.1.0",
|
|
95
91
|
"kleur": "4.1.5",
|
|
@@ -101,9 +97,9 @@
|
|
|
101
97
|
"supertest": "7.2.2",
|
|
102
98
|
"ts-node": "10.9.2",
|
|
103
99
|
"typescript": "5.9.3",
|
|
104
|
-
"verdaccio-auth-memory": "10.3.
|
|
105
|
-
"verdaccio-memory": "10.4.
|
|
106
|
-
"vitest": "
|
|
100
|
+
"verdaccio-auth-memory": "10.3.3",
|
|
101
|
+
"verdaccio-memory": "10.4.3",
|
|
102
|
+
"vitest": "4.1.5"
|
|
107
103
|
},
|
|
108
104
|
"keywords": [
|
|
109
105
|
"private",
|
|
@@ -144,7 +140,7 @@
|
|
|
144
140
|
"e2e:ui:local:open": "./scripts/e2e-ui-local.sh --open"
|
|
145
141
|
},
|
|
146
142
|
"engines": {
|
|
147
|
-
"node": ">=
|
|
143
|
+
"node": ">=20"
|
|
148
144
|
},
|
|
149
145
|
"preferGlobal": true,
|
|
150
146
|
"license": "MIT",
|
|
@@ -157,5 +153,5 @@
|
|
|
157
153
|
"url": "https://opencollective.com/verdaccio",
|
|
158
154
|
"logo": "https://opencollective.com/verdaccio/logo.txt"
|
|
159
155
|
},
|
|
160
|
-
"packageManager": "yarn@4.
|
|
156
|
+
"packageManager": "yarn@4.14.1"
|
|
161
157
|
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createRegistryConfig, homeTests } from '@verdaccio/e2e-ui';
|
|
2
|
-
|
|
3
|
-
const registryUrl = Cypress.env('VERDACCIO_URL') || 'http://localhost:4873';
|
|
4
|
-
|
|
5
|
-
const config = createRegistryConfig({
|
|
6
|
-
registryUrl,
|
|
7
|
-
title: 'Verdaccio e2e',
|
|
8
|
-
credentials: { user: 'test', password: 'test' },
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
homeTests(config);
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createRegistryConfig, signinTests } from '@verdaccio/e2e-ui';
|
|
2
|
-
|
|
3
|
-
const registryUrl = Cypress.env('VERDACCIO_URL') || 'http://localhost:4873';
|
|
4
|
-
|
|
5
|
-
const config = createRegistryConfig({
|
|
6
|
-
registryUrl,
|
|
7
|
-
title: 'Verdaccio e2e',
|
|
8
|
-
credentials: { user: 'test', password: 'test' },
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
signinTests(config);
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createRegistryConfig, layoutTests } from '@verdaccio/e2e-ui';
|
|
2
|
-
|
|
3
|
-
const registryUrl = Cypress.env('VERDACCIO_URL') || 'http://localhost:4873';
|
|
4
|
-
|
|
5
|
-
const config = createRegistryConfig({
|
|
6
|
-
registryUrl,
|
|
7
|
-
title: 'Verdaccio e2e',
|
|
8
|
-
credentials: { user: 'test', password: 'test' },
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
layoutTests(config);
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createRegistryConfig, searchTests } from '@verdaccio/e2e-ui';
|
|
2
|
-
|
|
3
|
-
const registryUrl = Cypress.env('VERDACCIO_URL') || 'http://localhost:4873';
|
|
4
|
-
|
|
5
|
-
const config = createRegistryConfig({
|
|
6
|
-
registryUrl,
|
|
7
|
-
title: 'Verdaccio e2e',
|
|
8
|
-
credentials: { user: 'test', password: 'test' },
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
searchTests(config);
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createRegistryConfig, settingsTests } from '@verdaccio/e2e-ui';
|
|
2
|
-
|
|
3
|
-
const registryUrl = Cypress.env('VERDACCIO_URL') || 'http://localhost:4873';
|
|
4
|
-
|
|
5
|
-
const config = createRegistryConfig({
|
|
6
|
-
registryUrl,
|
|
7
|
-
title: 'Verdaccio e2e',
|
|
8
|
-
credentials: { user: 'test', password: 'test' },
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
settingsTests(config);
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createRegistryConfig, publishTests } from '@verdaccio/e2e-ui';
|
|
2
|
-
|
|
3
|
-
const registryUrl = Cypress.env('VERDACCIO_URL') || 'http://localhost:4873';
|
|
4
|
-
|
|
5
|
-
const config = createRegistryConfig({
|
|
6
|
-
registryUrl,
|
|
7
|
-
title: 'Verdaccio e2e',
|
|
8
|
-
credentials: { user: 'test', password: 'test' },
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
publishTests(config);
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { changePasswordTests, createRegistryConfig } from '@verdaccio/e2e-ui';
|
|
2
|
-
|
|
3
|
-
const registryUrl = Cypress.env('VERDACCIO_URL') || 'http://localhost:4873';
|
|
4
|
-
|
|
5
|
-
// Unlike the e2e-tests repo (which targets the published `verdaccio:6`
|
|
6
|
-
// docker image and has to skip the happy path around the unpublished
|
|
7
|
-
// reset_password inversion fix), this spec runs against the locally
|
|
8
|
-
// built 6.x source in this repo — where the fix lives — so every
|
|
9
|
-
// change-password scenario can execute.
|
|
10
|
-
const config = createRegistryConfig({
|
|
11
|
-
registryUrl,
|
|
12
|
-
title: 'Verdaccio e2e',
|
|
13
|
-
credentials: { user: 'test', password: 'test' },
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// The published `@verdaccio/e2e-ui@2.4.0` change-password suite ends its
|
|
17
|
-
// happy-path test on `/-/web/success` with a valid JWT still in
|
|
18
|
-
// localStorage. Its `after()` hook then does `cy.visit('/')` + `cy.login`
|
|
19
|
-
// to restore the original password, but the home page renders the
|
|
20
|
-
// logged-in menu (no `header--button-login`) so `cy.login` times out.
|
|
21
|
-
//
|
|
22
|
-
// Mocha runs outer `afterEach` hooks *before* inner `after` hooks, so
|
|
23
|
-
// dropping the session here clears the way for the suite's restore step
|
|
24
|
-
// to find the Login button. Remove this block once the e2e-ui release
|
|
25
|
-
// that ships the equivalent cleanup inside the suite lands in
|
|
26
|
-
// `package.json`.
|
|
27
|
-
afterEach(() => {
|
|
28
|
-
cy.clearLocalStorage();
|
|
29
|
-
cy.clearCookies();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
changePasswordTests(config);
|
package/cypress/support/e2e.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '@verdaccio/e2e-ui/commands';
|
package/cypress.config.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'cypress';
|
|
2
|
-
|
|
3
|
-
import { setupVerdaccioTasks } from '@verdaccio/e2e-ui';
|
|
4
|
-
|
|
5
|
-
const registryUrl = process.env.VERDACCIO_URL || 'http://localhost:4873';
|
|
6
|
-
|
|
7
|
-
export default defineConfig({
|
|
8
|
-
e2e: {
|
|
9
|
-
baseUrl: registryUrl,
|
|
10
|
-
specPattern: 'cypress/e2e/**/*.cy.ts',
|
|
11
|
-
supportFile: 'cypress/support/e2e.ts',
|
|
12
|
-
setupNodeEvents(on) {
|
|
13
|
-
setupVerdaccioTasks(on, { registryUrl });
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
video: false,
|
|
17
|
-
screenshotOnRunFailure: false,
|
|
18
|
-
env: {
|
|
19
|
-
VERDACCIO_URL: registryUrl,
|
|
20
|
-
},
|
|
21
|
-
});
|