@cloudbase/auth 3.3.4 → 3.3.6
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/dist/cjs/index.js +1 -1
- package/dist/cjs/type.d.ts +2 -0
- package/dist/cjs/type.js +1 -1
- package/dist/cjs/v1-compat.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/type.d.ts +2 -0
- package/dist/esm/type.js +1 -1
- package/dist/esm/v1-compat.js +1 -1
- package/package.json +5 -5
- package/src/index.ts +19 -4
- package/src/type.ts +2 -0
- package/src/v1-compat.ts +5 -4
package/dist/cjs/index.js
CHANGED
|
@@ -3013,4 +3013,4 @@ function registerAuth(app) {
|
|
|
3013
3013
|
}
|
|
3014
3014
|
}
|
|
3015
3015
|
exports.registerAuth = registerAuth;
|
|
3016
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLDBDQVl5QjtBQUN6QixxQ0FBMEM7QUFDMUMseUNBVW9CO0FBQ3BCLGlDQUFxRztBQUNyRyx5Q0FNb0I7QUFvdEZLLG1HQXh0RnZCLDhCQUFrQixPQXd0RnVCO0FBQUUsbUdBdnRGM0MsOEJBQWtCLE9BdXRGMkM7QUFBRSxzR0F0dEYvRCxpQ0FBcUIsT0FzdEYrRDtBQW50RnRGLGtEQUE0QztBQWtDNUMsSUFBTSxTQUFTLEdBQUcsY0FBTSxPQUFBLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQWhFLENBQWdFLENBQUE7QUFtQ3hGLElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQTtBQWtCN0IsSUFBTSxrQkFBa0IsR0FBRyxVQUFBLFFBQVEsSUFBSSxPQUFBLFVBQUMsTUFBTTtJQUM1QyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQU0sQ0FBQyxtQkFBbUIsd0JBQU8sTUFBTSxLQUFFLFNBQVMsRUFBRSxnQ0FBd0IsQ0FBQyxpQkFBaUIsSUFBRyxDQUFBO0FBQ2pILENBQUMsRUFGc0MsQ0FFdEMsQ0FBQTtBQU9EO0lBdUJFLGNBQVksT0FBcUI7UUFDdkIsSUFBQSxLQUFLLEdBQW9CLE9BQU8sTUFBM0IsRUFBRSxhQUFhLEdBQUssT0FBTyxjQUFaLENBQVk7UUFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFFbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFJWSw2QkFBYyxHQUEzQjs7O2dCQUNFLElBQUksQ0FBQyxHQUFH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QkFBaUIsT0FBQTtBQUFFLGtHQUFBLFNBQVMsT0FBQTtBQUlyQyxTQUFnQixZQUFZLENBQUMsR0FBMEM7SUFDckUsSUFBSTtRQUNGLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtLQUNqQztJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtBQUNILENBQUM7QUFORCxvQ0FNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZSwgSUNsb3VkYmFzZUNvbmZpZywgSUNsb3VkYmFzZVBsYXRmb3JtSW5mbyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IElDbG91ZGJhc2VDYWNoZSB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY2FjaGUnXG5pbXBvcnQgdHlwZSB7IElDbG91ZGJhc2VSZXF1ZXN0IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9yZXF1ZXN0J1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQXV0aENvbmZpZywgSVVzZXIsIElMb2dpblN0YXRlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9hdXRoJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ29tcG9uZW50IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jb21wb25lbnQnXG5pbXBvcnQgdHlwZSB7IEF1dGhPcHRpb25zLCBDcmVkZW50aWFscyB9IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgnXG5pbXBvcnQge1xuICBDbG91ZGJhc2VPQXV0aCxcbiAgQVVUSF9BUElfUFJFRklYLFxuICBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUsXG4gIEVWRU5UUyxcbiAgQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUsXG4gIE9BVVRIX1RZUEUsXG4gIHdlQXBwSnd0RGVjb2RlQWxsLFxuICBBdXRoRXJyb3IsXG4gIEF1dGhFcnJvckNhdGVnb3J5LFxuICBhdXRoTW9kZWxzLFxuICBERUZBVUxUX05PREVfQUNDRVNTX1NDT1BFLFxufSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuaW1wb3J0IHsgdXNlQXV0aEFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXInXG5pbXBvcnQge1xuICBwcmludFdhcm4sXG4gIHRocm93RXJyb3IsXG4gIEVSUk9SUyxcbiAgQ09NTVVOSVRZX1NJVEVfVVJMLFxuICBjYXRjaEVycm9yc0RlY29yYXRvcixcbiAgQ2xvdWRiYXNlRXZlbnRFbWl0dGVyLFxuICBDbG91ZGJhc2VDYWNoZSxcbiAgYWRhcHRlckZvcld4TXAsXG4gIHVzZURlZmF1bHRBZGFwdGVyLFxufSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IHNhdmVUb0Jyb3dzZXJTZXNzaW9uLCBnZXRCcm93c2VyU2Vzc2lvbiwgcmVtb3ZlQnJvd3NlclNlc3Npb24sIGFkZFVybFNlYXJjaCB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQge1xuICBBdXRoVjFDb21wYXQsXG4gIFdlaXhpbkF1dGhQcm92aWRlcixcbiAgQ3VzdG9tQXV0aFByb3ZpZGVyLFxuICBBbm9ueW1vdXNBdXRoUHJvdmlkZXIsXG4gIGFwcGx5VXNlclYxQ29tcGF0LFxufSBmcm9tICcuL3YxLWNvbXBhdCdcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSAnQGNsb3VkYmFzZS91dGlsaXRpZXMnXG5pbXBvcnQge1xuICBDb21tb25SZXMsXG4gIERlbGV0ZU1lUmVxLFxuICBHZXRDbGFpbXNSZXMsXG4gIEdldFVzZXJJZGVudGl0aWVzUmVzLFxuICBHZXRVc2VyUmVzLFxuICBMaW5rSWRlbnRpdHlSZXEsXG4gIExpbmtJZGVudGl0eVJlcyxcbiAgT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjayxcbiAgUmVhdXRoZW50aWNhdGVSZXMsXG4gIFJlc2VuZFJlcSxcbiAgUmVzZW5kUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yRW1haWxSZXMsXG4gIFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEsXG4gIFNldFNlc3Npb25SZXEsXG4gIFNpZ25JbkFub255bW91c2x5UmVxLFxuICBTaWduSW5PQXV0aFJlcyxcbiAgU2lnbkluUmVzLFxuICBTaWduSW5XaXRoSWRUb2tlblJlcSxcbiAgU2lnbkluV2l0aE9BdXRoUmVxLFxuICBTaWduSW5XaXRoT3RwUmVxLFxuICBTaWduSW5XaXRoT3RwUmVzLFxuICBTaWduSW5XaXRoUGFzc3dvcmRSZXEsXG4gIFNpZ25VcFJlcyxcbiAgVW5saW5rSWRlbnRpdHlSZXEsXG4gIFVwZGF0ZVVzZXJBdHRyaWJ1dGVzLFxuICBVcGRhdGVVc2VyUmVxLFxuICBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcyxcbiAgVmVyaWZ5T0F1dGhSZXEsXG4gIFZlcmlmeU9BdXRoUmVzLFxuICBWZXJpZnlPdHBSZXEsXG59IGZyb20gJy4vdHlwZSdcblxuY29uc3QgaXNCcm93c2VyID0gKCkgPT4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5leHBvcnQgdHlwZSB7XG4gIFNpZ25JblJlcyxcbiAgR2V0VXNlclJlcyxcbiAgQ29tbW9uUmVzLFxuICBTaWduSW5XaXRoT3RwUmVzLFxuICBTaWduSW5PQXV0aFJlcyxcbiAgR2V0Q2xhaW1zUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yRW1haWxSZXMsXG4gIEdldFVzZXJJZGVudGl0aWVzUmVzLFxuICBMaW5rSWRlbnRpdHlSZXMsXG4gIFJlYXV0aGVudGljYXRlUmVzLFxuICBSZXNlbmRSZXMsXG4gIFVwZGF0ZVVzZXJXaXRoVmVyaWZpY2F0aW9uUmVzLFxuICBPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrLFxuICBTaWduSW5XaXRoUGFzc3dvcmRSZXEsXG4gIFNpZ25JbldpdGhJZFRva2VuUmVxLFxuICBTaWduSW5XaXRoT0F1dGhSZXEsXG4gIFZlcmlmeU9BdXRoUmVxLFxuICBWZXJpZnlPdHBSZXEsXG4gIExpbmtJZGVudGl0eVJlcSxcbiAgVW5saW5rSWRlbnRpdHlSZXEsXG4gIFVwZGF0ZVVzZXJSZXEsXG4gIFNpZ25JbldpdGhPdHBSZXEsXG4gIFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEsXG4gIFJlc2VuZFJlcSxcbiAgU2V0U2Vzc2lvblJlcSxcbiAgRGVsZXRlTWVSZXEsXG4gIFNpZ25VcFJlcyxcbn0gZnJvbSAnLi90eXBlJ1xuXG5kZWNsYXJlIGNvbnN0IGNsb3VkYmFzZTogSUNsb3VkYmFzZVxuZGVjbGFyZSBjb25zdCB3eDogYW55XG5cbmNvbnN0IENPTVBPTkVOVF9OQU1FID0gJ2F1dGgnXG5cbmludGVyZmFjZSBVc2VySW5mbyB7XG4gIHVpZD86IHN0cmluZ1xuICBnZW5kZXI/OiBzdHJpbmdcbiAgcGljdHVyZT86IHN0cmluZ1xuICBlbWFpbD86IHN0cmluZ1xuICBlbWFpbF92ZXJpZmllZD86IGJvb2xlYW5cbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nXG4gIHVzZXJuYW1lPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgYmlydGhkYXRlPzogc3RyaW5nXG4gIHpvbmVpbmZvPzogc3RyaW5nXG4gIGxvY2FsZT86IHN0cmluZ1xuICBzdWI/OiBzdHJpbmdcbiAgY3JlYXRlZF9mcm9tPzogc3RyaW5nXG59XG5cbmNvbnN0IG9uQ3JlZGVudGlhbHNFcnJvciA9IGV2ZW50QnVzID0+IChwYXJhbXMpID0+IHtcbiAgZXZlbnRCdXMuZmlyZShFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgeyAuLi5wYXJhbXMsIGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLkNSRURFTlRJQUxTX0VSUk9SIH0pXG59XG5cbmludGVyZmFjZSBJVXNlck9wdGlvbnMge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyIGltcGxlbWVudHMgSVVzZXIge1xuICBwdWJsaWMgdWlkPzogc3RyaW5nXG4gIHB1YmxpYyBnZW5kZXI/OiBzdHJpbmdcbiAgcHVibGljIHBpY3R1cmU/OiBzdHJpbmdcbiAgcHVibGljIGVtYWlsPzogc3RyaW5nXG4gIHB1YmxpYyBlbWFpbFZlcmlmaWVkPzogYm9vbGVhblxuICBwdWJsaWMgcGhvbmVOdW1iZXI/OiBzdHJpbmdcbiAgcHVibGljIHVzZXJuYW1lPzogc3RyaW5nIC8vIOeUqOaIt+WQjeensO+8jOmVv+W6piA1LTI0IOS9je+8jOaUr+aMgeWtl+espuS4reiLseaWh+OAgeaVsOWtl+OAgeeJueauiuWtl+espu+8iOS7heaUr+aMgV8t77yJ77yM5LiN5pSv5oyB5Lit5paHXG4gIHB1YmxpYyBuYW1lPzogc3RyaW5nXG4gIHB1YmxpYyBwcm92aWRlcnM/OiB7XG4gICAgaWQ/OiBzdHJpbmdcbiAgICBwcm92aWRlclVzZXJJZD86IHN0cmluZ1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgfVtdXG4gIHB1YmxpYyBiaXJ0aGRhdGU/OiBzdHJpbmdcbiAgcHVibGljIHpvbmVpbmZvPzogc3RyaW5nXG4gIHB1YmxpYyBsb2NhbGU/OiBzdHJpbmdcbiAgcHVibGljIHN1Yj86IHN0cmluZ1xuICBwdWJsaWMgY3JlYXRlZEZyb20/OiBzdHJpbmdcblxuICBwcml2YXRlIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgcHJpdmF0ZSBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aCAvLyBDbG91ZGJhc2VPQXV0aCDnsbvlnotcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJVXNlck9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGNhY2hlLCBvYXV0aEluc3RhbmNlIH0gPSBvcHRpb25zXG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy5zZXRVc2VySW5mbygpXG4gIH1cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeUqOaIt+S/oeaBry3lkIzmraVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsSW5mbygpIHtcbiAgICB0aGlzLnVpZCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygndWlkJykgYXMgc3RyaW5nXG4gICAgdGhpcy5nZW5kZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2dlbmRlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMucGljdHVyZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncGljdHVyZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuZW1haWwgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd1c2VybmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMubmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuYmlydGhkYXRlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdiaXJ0aGRhdGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnpvbmVpbmZvID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd6b25laW5mbycpIGFzIHN0cmluZ1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdsb2NhbGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnc3ViJykgYXMgc3RyaW5nXG4gICAgdGhpcy5jcmVhdGVkRnJvbSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnY3JlYXRlZF9mcm9tJykgYXMgc3RyaW5nXG4gICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Byb3ZpZGVycycpIGFzIGFueVxuICB9XG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2tMb2NhbEluZm9Bc3luYygpIHtcbiAgICB0aGlzLnVpZCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCd1aWQnKVxuICAgIHRoaXMuZ2VuZGVyID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ2dlbmRlcicpXG4gICAgdGhpcy5waWN0dXJlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaWN0dXJlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCdlbWFpbCcpXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ3VzZXJuYW1lJylcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ25hbWUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmJpcnRoZGF0ZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnYmlydGhkYXRlJykgYXMgc3RyaW5nXG4gICAgdGhpcy56b25laW5mbyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnem9uZWluZm8nKSBhcyBzdHJpbmdcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbG9jYWxlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5zdWIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3N1YicpIGFzIHN0cmluZ1xuICAgIHRoaXMuY3JlYXRlZEZyb20gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2NyZWF0ZWRfZnJvbScpIGFzIHN0cmluZ1xuICAgIHRoaXMucHJvdmlkZXJzID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwcm92aWRlcnMnKSBhcyBhbnlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLfkv6Hmga9cbiAgICogQHBhcmFtIHVzZXJJbmZvXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDnlKjmiLfkv6Hmga/kuK3mmK/lkKbljIXlkKvpnZ7ms5XlgLwnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHVwZGF0ZSh1c2VySW5mbzogYXV0aE1vZGVscy5Vc2VyUHJvZmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNvbnN0IHsgbmFtZSwgZ2VuZGVyLCBhdmF0YXJVcmwsIHByb3ZpbmNlLCBjb3VudHJ5LCBjaXR5IH0gPSB1c2VySW5mb1xuICAgIGNvbnN0IG5ld1VzZXJJbmZvID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0VXNlclByb2ZpbGUoeyAuLi51c2VySW5mbyB9KVxuXG4gICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKG5ld1VzZXJJbmZvKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlVXNlckJhc2ljSW5mbyh7IC4uLnBhcmFtcyB9KVxuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICog5pu05paw5a+G56CBXG4gICAqIEBwYXJhbSBuZXdQYXNzd29yZFxuICAgKiBAcGFyYW0gb2xkUGFzc3dvcmRcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDlr4bnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGVQYXNzd29yZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAzIC0g5paw5a+G56CB5Lit5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyB1cGRhdGVQYXNzd29yZChuZXdQYXNzd29yZDogc3RyaW5nLCBvbGRQYXNzd29yZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVwZGF0ZVBhc3N3b3JkQnlPbGQoe1xuICAgICAgb2xkX3Bhc3N3b3JkOiBvbGRQYXNzd29yZCxcbiAgICAgIG5ld19wYXNzd29yZDogbmV3UGFzc3dvcmQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLflkI1cbiAgICogQHBhcmFtIHVzZXJuYW1lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35ZCN5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlVXNlcm5hbWUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6hueUqOaIt+WQjeWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgdXBkYXRlVXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3VzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVwZGF0ZSh7XG4gICAgICB1c2VybmFtZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+OAguW9k+eUqOaIt+WcqOWFtuS7luWuouaIt+err+abtOaWsOeUqOaIt+S/oeaBr+S5i+WQju+8jOWPr+S7peiwg+eUqOatpOaOpeWPo+WQjOatpeabtOaWsOS5i+WQjueahOS/oeaBr+OAglxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+WIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnJlZnJlc2goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHJlZnJlc2gocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxhdXRoTW9kZWxzLlVzZXJJbmZvPiB7XG4gICAgY29uc3QgbmV3VXNlckluZm8gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRVc2VySW5mbyhwYXJhbXMpXG4gICAgaWYgKChuZXdVc2VySW5mbyBhcyBhbnkpLmNvZGUgPT09ICdJTlZBTElEX0FDQ0VTU19UT0tFTicpIHtcbiAgICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyh7fSlcbiAgICAgIHRocm93IG5ld1VzZXJJbmZvXG4gICAgfVxuICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyhuZXdVc2VySW5mbylcbiAgICByZXR1cm4gbmV3VXNlckluZm9cbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2NhbFVzZXJJbmZvKGtleT86IHN0cmluZyk6IHN0cmluZyB8IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuY2FjaGUuZ2V0U3RvcmUodXNlckluZm9LZXkpXG5cbiAgICBpZiAoIWtleSkgcmV0dXJuIHVzZXJJbmZvIHx8IHt9XG5cbiAgICByZXR1cm4gdXNlckluZm9ba2V5XVxuICB9XG5cbiAgcHVibGljIHNldExvY2FsVXNlckluZm8odXNlckluZm86IGFueSkge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIHRoaXMuY2FjaGUuc2V0U3RvcmUodXNlckluZm9LZXksIHVzZXJJbmZvKVxuICAgIHRoaXMuc2V0VXNlckluZm8oKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRMb2NhbFVzZXJJbmZvQXN5bmMoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgdGhpcy5jYWNoZS5nZXRTdG9yZUFzeW5jKHVzZXJJbmZvS2V5KVxuICAgIHJldHVybiB1c2VySW5mb1trZXldXG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJJbmZvKCkge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5jYWNoZS5nZXRTdG9yZSh1c2VySW5mb0tleSlcbiAgICA7W1xuICAgICAgJ3VpZCcsXG4gICAgICAnZW1haWwnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAncGljdHVyZScsXG4gICAgICAnZW1haWxfdmVyaWZpZWQnLFxuICAgICAgJ3Bob25lX251bWJlcicsXG4gICAgICAnYmlydGhkYXRlJyxcbiAgICAgICd6b25laW5mbycsXG4gICAgICAnbG9jYWxlJyxcbiAgICAgICdzdWInLFxuICAgICAgJ2NyZWF0ZWRfZnJvbScsXG4gICAgICAncHJvdmlkZXJzJyxcbiAgICAgICd1c2VybmFtZScsXG4gICAgICAnY3JlYXRlZF9hdCcsXG4gICAgXS5mb3JFYWNoKChpbmZvS2V5KSA9PiB7XG4gICAgICB0aGlzW2luZm9LZXldID0gdXNlckluZm9baW5mb0tleV1cbiAgICB9KVxuICB9XG59XG5cbi8vIOW6lOeUqCB2MSDlhbzlrrnmlrnms5XliLAgVXNlciDnsbtcbmFwcGx5VXNlclYxQ29tcGF0KFVzZXIpXG5cbmludGVyZmFjZSBJTG9naW5TdGF0ZU9wdGlvbnMgZXh0ZW5kcyBJVXNlck9wdGlvbnMge1xuICBlbnZJZDogc3RyaW5nXG59XG5leHBvcnQgY2xhc3MgTG9naW5TdGF0ZSBpbXBsZW1lbnRzIElMb2dpblN0YXRlIHtcbiAgcHVibGljIHVzZXI6IFVzZXJcbiAgcHVibGljIG9hdXRoTG9naW5TdGF0ZTogYW55XG5cbiAgcHJpdmF0ZSBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aFxuICBwcml2YXRlIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJTG9naW5TdGF0ZU9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGVudklkLCBjYWNoZSwgb2F1dGhJbnN0YW5jZSB9ID0gb3B0aW9uc1xuICAgIGlmICghZW52SWQpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAnZW52SWQgaXMgbm90IGRlZmluZWQnKVxuICAgIH1cbiAgICB0aGlzLmNhY2hlID0gY2FjaGVcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBvYXV0aEluc3RhbmNlXG5cbiAgICB0aGlzLnVzZXIgPSBuZXcgVXNlcih7XG4gICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgIG9hdXRoSW5zdGFuY2UsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0xvY2FsU3RhdGUoKSB7XG4gICAgdGhpcy5vYXV0aExvZ2luU3RhdGUgPSB0aGlzLm9hdXRoSW5zdGFuY2U/LmF1dGhBcGkuaGFzTG9naW5TdGF0ZVN5bmMoKVxuICAgIHRoaXMudXNlci5jaGVja0xvY2FsSW5mbygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hlY2tMb2NhbFN0YXRlQXN5bmMoKSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIGF3YWl0IHRoaXMudXNlci5jaGVja0xvY2FsSW5mb0FzeW5jKClcbiAgfVxufVxuXG5pbnRlcmZhY2UgSUF1dGhDb25maWcgZXh0ZW5kcyBJQ2xvdWRiYXNlQXV0aENvbmZpZyB7XG4gIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgcmVxdWVzdD86IElDbG91ZGJhc2VSZXF1ZXN0XG4gIHJ1bnRpbWU/OiBzdHJpbmdcbn1cblxuY2xhc3MgQXV0aCBleHRlbmRzIEF1dGhWMUNvbXBhdCB7XG4gIHJlYWRvbmx5IGNvbmZpZzogSUF1dGhDb25maWdcbiAgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGhcbiAgcmVhZG9ubHkgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuICBwcml2YXRlIGxpc3RlbmVyczogTWFwPHN0cmluZywgU2V0PE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2s+PiA9IG5ldyBNYXAoKVxuICBwcml2YXRlIGhhc0xpc3RlbmVyU2V0VXAgPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSUF1dGhDb25maWcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBjb25maWcub2F1dGhJbnN0YW5jZVxuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGVcbiAgICB0aGlzLmluaXQoKVxuICAgIHRoaXMuc2V0QWNjZXNzS2V5KClcbiAgfVxuXG4gIC8vID09PT09PT09PT0gbmV3IGF1dGggYXBpIG1ldGhvZHMgbWVyZ2VkIGJlbG93ID09PT09PT09PT1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25pbmFub255bW91c2x5XG4gICAqIFNpZ24gaW4gYSB1c2VyIGFub255bW91c2x5LlxuICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBhdXRoLnNpZ25JbkFub255bW91c2x5KCk7XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkocGFyYW1zOiBTaWduSW5Bbm9ueW1vdXNseVJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KHBhcmFtcylcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBhdXRoRXJyb3IgPSBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NpZ25JbkFub255bW91c2x5JyB9KVxuICAgICAgLy8g5Yy/5ZCN55m75b2V5aSx6LSl5pe25o+Q5L6b5piO56Gu5oyH5byVXG4gICAgICBpZiAoYXV0aEVycm9yLmNhdGVnb3J5ID09PSBBdXRoRXJyb3JDYXRlZ29yeS5QUk9WSURFUl9OT1RfRU5BQkxFRCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGF1dGhFcnJvci5oZWxwTWVzc2FnZSlcbiAgICAgICAgY29uc29sZS5lcnJvcignW0Nsb3VkQmFzZSBBdXRoXSDmj5DnpLrvvJrljL/lkI3nmbvlvZXpnIDopoHlnKjmjqfliLblj7DlvIDlkK/jgIzljL/lkI3nmbvlvZXjgI3jgIJcXG4nXG4gICAgICAgICAgKyAnICDlpoLmnpzmgqjpnIDopoHkvb/nlKjnlKjmiLflkI3lr4bnoIHnmbvlvZXvvIzor7fmlLnnlKggYXV0aC5zaWduSW5XaXRoUGFzc3dvcmQoeyB1c2VybmFtZSwgcGFzc3dvcmQgfSnjgIJcXG4nXG4gICAgICAgICAgKyAnICDkuI3opoHlnKjljL/lkI3nmbvlvZXlpLHotKXlkI7oh6rliqjlm57pgIDliLDlr4bnoIHnmbvlvZXvvIzov5nkuKTnp43mlrnlvI/nmoTkvb/nlKjlnLrmma/kuI3lkIzjgIInLClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW0Nsb3VkQmFzZSBBdXRoXSBzaWduSW5Bbm9ueW1vdXNseSDlpLHotKUgWyR7YXV0aEVycm9yLmNhdGVnb3J5fV06ICR7YXV0aEVycm9yLm1lc3NhZ2V9YClcbiAgICAgICAgaWYgKGF1dGhFcnJvci5sb2dpbk1ldGhvZEhpbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYXV0aEVycm9yLmxvZ2luTWV0aG9kSGludClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBhdXRoRXJyb3IgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbnVwXG4gICAqIFNpZ24gdXAgYSBuZXcgdXNlciB3aXRoIGVtYWlsIG9yIHBob25lIHVzaW5nIGEgb25lLXRpbWUgcGFzc3dvcmQgKE9UUCkuIElmIHRoZSBhY2NvdW50IG5vdCBleGlzdCwgYSBuZXcgYWNjb3VudCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduVXBSZXM+XG4gICAqL1xuICBhc3luYyBzaWduVXAocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25VcFJlcXVlc3QgJiB7IHBob25lPzogc3RyaW5nIH0pOiBQcm9taXNlPFNpZ25VcFJlcz4ge1xuICAgIGlmIChwYXJhbXMucGhvbmVfbnVtYmVyIHx8IHBhcmFtcy52ZXJpZmljYXRpb25fY29kZSB8fCBwYXJhbXMudmVyaWZpY2F0aW9uX3Rva2VuIHx8IHBhcmFtcy5wcm92aWRlcl90b2tlbikge1xuICAgICAgaWYgKHBhcmFtcy5waG9uZV9udW1iZXIpIHtcbiAgICAgICAgcGFyYW1zLnBob25lX251bWJlciA9IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lX251bWJlcilcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcChwYXJhbXMpXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKCkgYXMgYW55XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHBhcmFtcy5lbWFpbCA/IHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9LClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHsgdG9rZW4sIG1lc3NhZ2VJZCA9IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkIH0pOiBQcm9taXNlPFNpZ25JblJlcz4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8g56ys5LiJ5q2l77ya5b6F55So5oi36L6T5YWl5a6M6aqM6K+B56CB5LmL5ZCO77yM6aqM6K+B55+t5L+h6aqM6K+B56CBXG4gICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblRva2VuUmVzID0gYXdhaXQgdGhpcy52ZXJpZnkoe1xuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9pZDogbWVzc2FnZUlkIHx8IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB0b2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAvLyDnrKzlm5vmraXvvJrms6jlhozlubbnmbvlvZXmiJbnm7TmjqXnmbvlvZVcbiAgICAgICAgICAgICAgLy8g5aaC5p6c55So5oi35bey57uP5a2Y5Zyo77yM55u05o6l55m75b2VXG4gICAgICAgICAgICAgIGlmICh2ZXJpZmljYXRpb25JbmZvLmlzX3VzZXIpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNpZ25Jbih7XG4gICAgICAgICAgICAgICAgICB1c2VybmFtZTogcGFyYW1zLmVtYWlsIHx8IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSxcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW5SZXMudmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c55So5oi35LiN5a2Y5Zyo77yM5rOo5YaM55So5oi3XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGFyYW1zKSlcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YS5lbWFpbFxuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBob25lXG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAoe1xuICAgICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICAgIC4uLihwYXJhbXMuZW1haWwgPyB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfSA6IHsgcGhvbmVfbnVtYmVyOiB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfSksXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuUmVzLnZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB0b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NpZ25VcCcgfSkgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnc2lnblVwJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWdub3V0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF1dGguc2lnbk91dCgpO1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBzaWduT3V0KHBhcmFtcz86IGF1dGhNb2RlbHMuU2lnbm91dFJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLlNpZ25vdXRSZXNwb25zZSAmIHsgZGF0YTogT2JqZWN0OyBlcnJvcjogQXV0aEVycm9yIH0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduT3V0KHBhcmFtcylcbiAgICAgIGF3YWl0IHRoaXMuY2FjaGUucmVtb3ZlU3RvcmVBc3luYyh1c2VySW5mb0tleSlcbiAgICAgIHRoaXMuc2V0QWNjZXNzS2V5KClcblxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnRUeXBlOiBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTl9PVVQgfSlcblxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX09VVCB9KVxuXG4gICAgICAvLyByZXPov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4ucmVzLCBkYXRhOiB7fSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnc2lnbk91dCcgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtb25hdXRoc3RhdGVjaGFuZ2VcbiAgICogUmVjZWl2ZSBhIG5vdGlmaWNhdGlvbiBldmVyeSB0aW1lIGFuIGF1dGggZXZlbnQgaGFwcGVucy5cbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIFByb21pc2U8eyBkYXRhOiB7IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIH0sIGVycm9yOiBFcnJvciB8IG51bGwgfT5cbiAgICovXG4gIG9uQXV0aFN0YXRlQ2hhbmdlKGNhbGxiYWNrOiBPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVyU2V0VXApIHtcbiAgICAgIHRoaXMuc2V0dXBMaXN0ZW5lcnMoKVxuICAgICAgdGhpcy5oYXNMaXN0ZW5lclNldFVwID0gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IGlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNilcblxuICAgIGlmICghdGhpcy5saXN0ZW5lcnMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGlkLCBuZXcgU2V0KCkpXG4gICAgfVxuXG4gICAgdGhpcy5saXN0ZW5lcnMuZ2V0KGlkKSEuYWRkKGNhbGxiYWNrKVxuXG4gICAgLy8g6L+U5ZueIFN1YnNjcmlwdGlvbiDlr7nosaFcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICBpZCxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgdW5zdWJzY3JpYmU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5saXN0ZW5lcnMuZ2V0KGlkKVxuICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgICAgY2FsbGJhY2tzLmRlbGV0ZShjYWxsYmFjaylcbiAgICAgICAgICBpZiAoY2FsbGJhY2tzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLmRlbGV0ZShpZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHsgc3Vic2NyaXB0aW9uIH0sXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRocGFzc3dvcmRcbiAgICogTG9nIGluIGFuIGV4aXN0aW5nIHVzZXIgd2l0aCBhbiBlbWFpbCBhbmQgcGFzc3dvcmQgb3IgcGhvbmUgYW5kIHBhc3N3b3JkIG9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhQYXNzd29yZChwYXJhbXM6IFNpZ25JbldpdGhQYXNzd29yZFJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnVzZXJuYW1lL2VtYWlsL3Bob25l5LiJ6YCJ5LiA77yMcGFzc3dvcmTlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVBdExlYXN0T25lKFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIFtbJ3VzZXJuYW1lJ10sIFsnZW1haWwnXSwgWydwaG9uZSddXSxcbiAgICAgICAgJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIHVzZXJuYW1lLCBlbWFpbCwgb3IgcGhvbmUnLFxuICAgICAgKVxuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcGFzc3dvcmQ6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQYXNzd29yZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMuc2lnbkluKHtcbiAgICAgICAgdXNlcm5hbWU6IHBhcmFtcy51c2VybmFtZSB8fCBwYXJhbXMuZW1haWwgfHwgdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpLFxuICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3N3b3JkLFxuICAgICAgICAuLi4ocGFyYW1zLmlzX2VuY3J5cHQgPyB7IGlzRW5jcnlwdDogdHJ1ZSwgdmVyc2lvbjogJ3YyJyB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBhdXRoRXJyb3IgPSBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NpZ25JbldpdGhQYXNzd29yZCcgfSlcbiAgICAgIC8vIOagueaNrumUmeivr+WIhuexu+i+k+WHuuWvueW6lOeahOWPr+aTjeS9nOaAp+aMh+W8lVxuICAgICAgaWYgKGF1dGhFcnJvci5jYXRlZ29yeSA9PT0gQXV0aEVycm9yQ2F0ZWdvcnkuUFJPVklERVJfTk9UX0VOQUJMRUQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihhdXRoRXJyb3IuaGVscE1lc3NhZ2UpXG4gICAgICB9IGVsc2UgaWYgKGF1dGhFcnJvci5jYXRlZ29yeSA9PT0gQXV0aEVycm9yQ2F0ZWdvcnkuSU5WQUxJRF9DUkVERU5USUFMUykge1xuICAgICAgICBjb25zb2xlLndhcm4oYXV0aEVycm9yLmhlbHBNZXNzYWdlKVxuICAgICAgfSBlbHNlIGlmIChhdXRoRXJyb3IuY2F0ZWdvcnkgPT09IEF1dGhFcnJvckNhdGVnb3J5LlVTRVJfTk9UX0ZPVU5EKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihhdXRoRXJyb3IuaGVscE1lc3NhZ2UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtDbG91ZEJhc2UgQXV0aF0gc2lnbkluV2l0aFBhc3N3b3JkIOWksei0pSBbJHthdXRoRXJyb3IuY2F0ZWdvcnl9XTogJHthdXRoRXJyb3IubWVzc2FnZX1gKVxuICAgICAgfVxuICAgICAgaWYgKGF1dGhFcnJvci5sb2dpbk1ldGhvZEhpbnQpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGF1dGhFcnJvci5sb2dpbk1ldGhvZEhpbnQpXG4gICAgICB9XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IGF1dGhFcnJvciB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRoaWR0b2tlblxuICAgKiDnrKzkuInmlrnlubPlj7DnmbvlvZXjgILlpoLmnpznlKjmiLfkuI3lrZjlnKjvvIzkvJrmoLnmja7kupHlvIDlj5HlubPlj7At55m75b2V5pa55byP5Lit5a+55bqU6Lqr5Lu95rqQ55qE55m75b2V5qih5byP6YWN572u77yM5Yik5pat5piv5ZCm6Ieq5Yqo5rOo5YaMXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoSWRUb2tlbihwYXJhbXM6IFNpZ25JbldpdGhJZFRva2VuUmVxKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yadG9rZW7lv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHRva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnVG9rZW4gaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLnNpZ25JbldpdGhQcm92aWRlcih7XG4gICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwYXJhbXMudG9rZW4sXG4gICAgICB9KVxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdzaWduSW5XaXRoSWRUb2tlbicgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbmlud2l0aG90cFxuICAgKiBMb2cgaW4gYSB1c2VyIHVzaW5nIGEgb25lLXRpbWUgcGFzc3dvcmQgKE9UUCkuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5XaXRoT3RwUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aE90cChwYXJhbXM6IFNpZ25JbldpdGhPdHBSZXEpOiBQcm9taXNlPFNpZ25JbldpdGhPdHBSZXM+IHtcbiAgICBpZiAoIXBhcmFtcy5vcHRpb25zPy5lbWFpbFJlZGlyZWN0VG8gJiYgKHBhcmFtcy5vcHRpb25zPy5zaG91bGRDcmVhdGVVc2VyID09PSB1bmRlZmluZWQgfHwgISFwYXJhbXMub3B0aW9ucz8uc2hvdWxkQ3JlYXRlVXNlcikpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25VcCh7XG4gICAgICAgIGVtYWlsOiBwYXJhbXMuZW1haWwsXG4gICAgICAgIHBob25lOiBwYXJhbXMucGhvbmUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHtcbiAgICAgICAgZW1haWxfcmVkaXJlY3RfdG86IHBhcmFtcy5vcHRpb25zPy5lbWFpbFJlZGlyZWN0VG8sXG4gICAgICAgIC4uLihwYXJhbXMuZW1haWwgPyB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfSA6IHsgcGhvbmVfbnVtYmVyOiB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfSksXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgICBzZXNzaW9uOiBudWxsLFxuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHsgdG9rZW4sIG1lc3NhZ2VJZCA9IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkIH0pOiBQcm9taXNlPFNpZ25JblJlcz4gPT4gdGhpcy52ZXJpZnlPdHAoe1xuICAgICAgICAgICAgZW1haWw6IHBhcmFtcy5lbWFpbCxcbiAgICAgICAgICAgIHBob25lOiBwYXJhbXMucGhvbmUsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdzaWduSW5XaXRoT3RwJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOagoemqjOesrOS4ieaWueW5s+WPsOaOiOadg+eZu+W9leWbnuiwg1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5T0F1dGgocGFyYW1zPzogVmVyaWZ5T0F1dGhSZXEpOiBQcm9taXNlPFZlcmlmeU9BdXRoUmVzPiB7XG4gICAgY29uc3QgZGF0YTogYW55ID0ge31cbiAgICB0cnkge1xuICAgICAgLy8g5Zue6LCD6IezIHByb3ZpZGVyX3JlZGlyZWN0X3VyaSDlnLDlnYDvvIh1cmwgcXVlcnnkuK3mkLrluKYg5o6I5p2DY29kZe+8jHN0YXRl562J5Y+C5pWw77yJ77yM5q2k5pe25qOA5p+lIHN0YXRlIOaYr+WQpuespuWQiOmihOacn++8iOWmgiDoh6rlt7Horr7nva7nmoQgd3hfb3BlbilcbiAgICAgIGNvbnN0IGNvZGUgPSBwYXJhbXM/LmNvZGUgfHwgdXRpbHMuZ2V0UXVlcnkoJ2NvZGUnKVxuICAgICAgY29uc3Qgc3RhdGUgPSBwYXJhbXM/LnN0YXRlIHx8IHV0aWxzLmdldFF1ZXJ5KCdzdGF0ZScpXG5cbiAgICAgIC8vIOWPguaVsOagoemqjO+8mmNvZGXlkoxzdGF0ZeW/heWhq1xuICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICdDb2RlIGlzIHJlcXVpcmVkJyB9KSB9XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ1N0YXRlIGlzIHJlcXVpcmVkJyB9KSB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IGdldEJyb3dzZXJTZXNzaW9uKHN0YXRlKVxuICAgICAgZGF0YS50eXBlID0gY2FjaGVEYXRhPy50eXBlXG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gcGFyYW1zPy5wcm92aWRlciB8fCBjYWNoZURhdGE/LnByb3ZpZGVyIHx8IHV0aWxzLmdldFF1ZXJ5KCdwcm92aWRlcicpXG5cbiAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0pIH1cbiAgICAgIH1cblxuICAgICAgLy8gc3RhdGXnrKblkIjpooTmnJ/vvIzliJnojrflj5bor6XkuInmlrnlubPlj7B0b2tlblxuICAgICAgY29uc3QgeyBwcm92aWRlcl90b2tlbjogdG9rZW4gfSA9IGF3YWl0IHRoaXMuZ3JhbnRQcm92aWRlclRva2VuKHtcbiAgICAgICAgcHJvdmlkZXJfaWQ6IHByb3ZpZGVyLFxuICAgICAgICBwcm92aWRlcl9yZWRpcmVjdF91cmk6IGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lLCAvLyDmjIflrprkuInmlrnlubPlj7Dot7Plm57nmoQgdXJsIOWcsOWdgFxuICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLCAvLyDnrKzkuInmlrnlubPlj7Dot7Povazlm57pobXpnaLml7bvvIx1cmwgcGFyYW0g5Lit5pC65bim55qEIGNvZGUg5Y+C5pWwXG4gICAgICB9KVxuXG4gICAgICBsZXQgcmVzOiBWZXJpZnlPQXV0aFJlc1xuXG4gICAgICBpZiAoY2FjaGVEYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuQklORF9JREVOVElUWSkge1xuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS50b0JpbmRJZGVudGl0eSh7IHByb3ZpZGVyX3Rva2VuOiB0b2tlbiwgcHJvdmlkZXIsIGZpcmVFdmVudDogdHJ1ZSB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g6YCa6L+HIHByb3ZpZGVyX3Rva2VuIOS7heeZu+W9leaIlueZu+W9leW5tuazqOWGjO+8iOS4juS6keW8gOWPkeW5s+WPsC3nmbvlvZXmlrnlvI8t6Lqr5Lu95rqQ55m75b2V5qih5byP6YWN572u5pyJ5YWz77yJXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMuc2lnbkluV2l0aElkVG9rZW4oe1xuICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KVxuICAgICAgICByZXMuZGF0YSA9IHsgLi4uZGF0YSwgLi4ucmVzLmRhdGEgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhbFNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24/LnNlYXJjaClcbiAgICAgIGxvY2FsU2VhcmNoLmRlbGV0ZSgnY29kZScpXG4gICAgICBsb2NhbFNlYXJjaC5kZWxldGUoJ3N0YXRlJylcbiAgICAgIHJlcy5kYXRhLnJlZGlyZWN0VXJsID0gYWRkVXJsU2VhcmNoKFxuICAgICAgICBjYWNoZURhdGE/LnNlYXJjaCA9PT0gdW5kZWZpbmVkID8gYD8ke2xvY2FsU2VhcmNoLnRvU3RyaW5nKCl9YCA6IGNhY2hlRGF0YT8uc2VhcmNoLFxuICAgICAgICBjYWNoZURhdGE/Lmhhc2ggfHwgbG9jYXRpb24uaGFzaCxcbiAgICAgIClcbiAgICAgIHJlbW92ZUJyb3dzZXJTZXNzaW9uKHN0YXRlKVxuXG4gICAgICByZXR1cm4gcmVzXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3ZlcmlmeU9BdXRoJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRob2F1dGhcbiAgICog55Sf5oiQ56ys5LiJ5pa55bmz5Y+w5o6I5p2DIFVyaSDvvIjlpoLlvq7kv6Hkuoznu7TnoIHmiavnoIHmjojmnYPnvZHpobXvvIlcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25Jbk9BdXRoUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aE9BdXRoKHBhcmFtczogU2lnbkluV2l0aE9BdXRoUmVxKTogUHJvbWlzZTxTaWduSW5PQXV0aFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJpwcm92aWRlcuW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcHJvdmlkZXI6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQcm92aWRlciBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGhyZWYgPSBwYXJhbXMub3B0aW9ucz8ucmVkaXJlY3RUbyB8fCBsb2NhdGlvbi5ocmVmXG5cbiAgICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyBVUkwoaHJlZilcblxuICAgICAgY29uc3QgcHJvdmlkZXJfcmVkaXJlY3RfdXJpID0gdXJsT2JqZWN0Lm9yaWdpbiArIHVybE9iamVjdC5wYXRobmFtZVxuXG4gICAgICBjb25zdCBzdGF0ZSA9IHBhcmFtcy5vcHRpb25zPy5zdGF0ZSB8fCBgcHJkLSR7cGFyYW1zLnByb3ZpZGVyfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpXG4gICAgICAgIC5zbGljZSgyKX1gXG5cbiAgICAgIGNvbnN0IHsgdXJpIH0gPSBhd2FpdCB0aGlzLmdlblByb3ZpZGVyUmVkaXJlY3RVcmkoe1xuICAgICAgICBwcm92aWRlcl9pZDogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBwcm92aWRlcl9yZWRpcmVjdF91cmksXG4gICAgICAgIHN0YXRlLFxuICAgICAgfSlcblxuICAgICAgLy8g5a+5IFVSTCDov5vooYzop6PnoIFcbiAgICAgIGNvbnN0IGRlY29kZWRVcmkgPSBkZWNvZGVVUklDb21wb25lbnQodXJpKVxuXG4gICAgICAvLyDlkIjlubbpop3lpJbnmoTmn6Xor6Llj4LmlbBcbiAgICAgIGxldCBmaW5hbFVyaSA9IGRlY29kZWRVcmlcblxuICAgICAgaWYgKHBhcmFtcy5vcHRpb25zPy5xdWVyeVBhcmFtcykge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGRlY29kZWRVcmkpXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHBhcmFtcy5vcHRpb25zLnF1ZXJ5UGFyYW1zKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChrZXksIHZhbHVlKVxuICAgICAgICB9KVxuICAgICAgICBmaW5hbFVyaSA9IHVybC50b1N0cmluZygpXG4gICAgICB9XG5cbiAgICAgIHNhdmVUb0Jyb3dzZXJTZXNzaW9uKHN0YXRlLCB7XG4gICAgICAgIHByb3ZpZGVyOiBwYXJhbXMucHJvdmlkZXIsXG4gICAgICAgIHNlYXJjaDogdXJsT2JqZWN0LnNlYXJjaCxcbiAgICAgICAgaGFzaDogdXJsT2JqZWN0Lmhhc2gsXG4gICAgICAgIHR5cGU6IHBhcmFtcy5vcHRpb25zPy50eXBlIHx8IE9BVVRIX1RZUEUuU0lHTl9JTixcbiAgICAgIH0pXG5cbiAgICAgIGlmIChpc0Jyb3dzZXIoKSAmJiAhcGFyYW1zLm9wdGlvbnM/LnNraXBCcm93c2VyUmVkaXJlY3QpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihmaW5hbFVyaSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1cmw6IGZpbmFsVXJpLCBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NpZ25JbldpdGhPQXV0aCcgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXRjbGFpbXNcbiAgYXN5bmMgZ2V0Q2xhaW1zKCk6IFByb21pc2U8R2V0Q2xhaW1zUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4gfSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKVxuICAgICAgY29uc3QgcGFyc2VkVG9rZW4gPSB3ZUFwcEp3dERlY29kZUFsbChhY2Nlc3NUb2tlbilcbiAgICAgIHJldHVybiB7IGRhdGE6IHBhcnNlZFRva2VuLCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdnZXRDbGFpbXMnIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXJlc2V0cGFzc3dvcmRmb3JlbWFpbFxuICAgKiDpgJrov4cgZW1haWwg5oiW5omL5py65Y+36YeN572u5a+G56CBXG4gICAqIEBwYXJhbSBlbWFpbE9yUGhvbmUg6YKu566x5oiW5omL5py65Y+3XG4gICAqIEByZXR1cm5zIFByb21pc2U8UmVzZXRQYXNzd29yZEZvckVtYWlsUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVzZXRQYXNzd29yZEZvckVtYWlsKFxuICAgIGVtYWlsT3JQaG9uZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7IHJlZGlyZWN0VG8/OiBzdHJpbmcgfSxcbiAgKTogUHJvbWlzZTxSZXNldFBhc3N3b3JkRm9yRW1haWxSZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yaZW1haWxPclBob25l5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKFxuICAgICAgICB7IGVtYWlsT3JQaG9uZSB9LFxuICAgICAgICB7XG4gICAgICAgICAgZW1haWxPclBob25lOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnRW1haWwgb3IgcGhvbmUgaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHsgcmVkaXJlY3RUbyB9ID0gb3B0aW9ucyB8fCB7fVxuXG4gICAgICAvLyDliKTmlq3mmK/pgq7nrrHov5jmmK/miYvmnLrlj7dcbiAgICAgIGNvbnN0IGlzRW1haWwgPSBlbWFpbE9yUGhvbmUuaW5jbHVkZXMoJ0AnKVxuICAgICAgbGV0IHZlcmlmaWNhdGlvblBhcmFtczogeyBlbWFpbD86IHN0cmluZzsgcGhvbmVfbnVtYmVyPzogc3RyaW5nIH1cblxuICAgICAgaWYgKGlzRW1haWwpIHtcbiAgICAgICAgdmVyaWZpY2F0aW9uUGFyYW1zID0geyBlbWFpbDogZW1haWxPclBob25lIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOato+inhOWMluaJi+acuuWPt1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRQaG9uZSA9IHRoaXMuZm9ybWF0UGhvbmUoZW1haWxPclBob25lKVxuICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IHBob25lX251bWJlcjogZm9ybWF0dGVkUGhvbmUgfVxuICAgICAgfVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHZlcmlmaWNhdGlvblBhcmFtcylcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHVwZGF0ZVVzZXI6IGFzeW5jIChhdHRyaWJ1dGVzOiBVcGRhdGVVc2VyQXR0cmlidXRlcyk6IFByb21pc2U8U2lnbkluUmVzPiA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgICAgbm9uY2U6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdOb25jZSBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQYXNzd29yZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyDnrKzkuInmraXvvJrlvoXnlKjmiLfovpPlhaXlrozpqozor4HnoIHkuYvlkI7vvIzpqozor4Hpqozor4HnoIFcbiAgICAgICAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uVG9rZW5SZXMgPSBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogYXR0cmlidXRlcy5ub25jZSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZXNldFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICBlbWFpbDogaXNFbWFpbCA/IGVtYWlsT3JQaG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwaG9uZV9udW1iZXI6ICFpc0VtYWlsID8gZW1haWxPclBob25lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG5ld19wYXNzd29yZDogYXR0cmlidXRlcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuUmVzLnZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlBBU1NXT1JEX1JFQ09WRVJZLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2lnbkluV2l0aFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICBlbWFpbDogaXNFbWFpbCA/IGVtYWlsT3JQaG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwaG9uZTogIWlzRW1haWwgPyBlbWFpbE9yUGhvbmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGF0dHJpYnV0ZXMucGFzc3dvcmQsXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0VG8gJiYgaXNCcm93c2VyKCkpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHJlZGlyZWN0VG8pXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAncmVzZXRQYXNzd29yZEZvckVtYWlsJyB9KSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdyZXNldFBhc3N3b3JkRm9yRW1haWwnIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6YCa6L+H5pen5a+G56CB6YeN572u5a+G56CBXG4gICAqIEBwYXJhbSBuZXdfcGFzc3dvcmRcbiAgICogQHBhcmFtIG9sZF9wYXNzd29yZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgcmVzZXRQYXNzd29yZEZvck9sZChwYXJhbXM6IFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlUGFzc3dvcmRCeU9sZCh7XG4gICAgICAgIG9sZF9wYXNzd29yZDogcGFyYW1zLm9sZF9wYXNzd29yZCxcbiAgICAgICAgbmV3X3Bhc3N3b3JkOiBwYXJhbXMubmV3X3Bhc3N3b3JkLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdyZXNldFBhc3N3b3JkRm9yT2xkJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC12ZXJpZnlvdHBcbiAgICogTG9nIGluIGEgdXNlciBnaXZlbiBhIFVzZXIgc3VwcGxpZWQgT1RQIGFuZCB2ZXJpZmljYXRpb25JZCByZWNlaXZlZCB0aHJvdWdoIG1vYmlsZSBvciBlbWFpbC5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHZlcmlmeU90cChwYXJhbXM6IFZlcmlmeU90cFJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcGFyYW1zXG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJp0b2tlbuWSjHZlcmlmaWNhdGlvbkluZm/lv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHRva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnVG9rZW4gaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgIG1lc3NhZ2VJZDogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ21lc3NhZ2VJZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChbJ3Bob25lX2NoYW5nZScsICdlbWFpbF9jaGFuZ2UnXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiBwYXJhbXMubWVzc2FnZUlkLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBwYXJhbXMudG9rZW4sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgICAgdmVyaWZpY2F0aW9uSW5mbzogeyB2ZXJpZmljYXRpb25faWQ6IHBhcmFtcy5tZXNzYWdlSWQsIGlzX3VzZXI6IHRydWUgfSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25Db2RlOiBwYXJhbXMudG9rZW4sXG4gICAgICAgICAgdXNlcm5hbWU6IHBhcmFtcy5lbWFpbCB8fCB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfHwgJycsXG4gICAgICAgICAgbG9naW5UeXBlOiBwYXJhbXMuZW1haWwgPyAnZW1haWwnIDogJ3Bob25lJyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICd2ZXJpZnlPdHAnIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWdldFNlc3Npb25cbiAgICogUmV0dXJucyB0aGUgc2Vzc2lvbiwgcmVmcmVzaGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbigpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldENyZWRlbnRpYWxzKClcblxuICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5zY29wZSA9PT0gJ2FjY2Vzc0tleScpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBudWxsIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHVzZXIgfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoZmFsc2UpXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogeyAuLi5jcmVkZW50aWFscywgdXNlciB9LCB1c2VyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ2dldFNlc3Npb24nIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXJlZnJlc2hzZXNzaW9uXG4gICAqIOaXoOiuuui/h+acn+eKtuaAgeWmguS9le+8jOmDvei/lOWbnuS4gOS4quaWsOeahOS8muivnVxuICAgKiBAcGFyYW0gcmVmcmVzaF90b2tlblxuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHJlZnJlc2hTZXNzaW9uKHJlZnJlc2hfdG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW4gfHwgY3JlZGVudGlhbHMucmVmcmVzaF90b2tlblxuICAgICAgY29uc3QgbmV3VG9rZW5zID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5yZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpXG4gICAgICBjb25zdCB7IGRhdGE6IHsgdXNlciB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcihmYWxzZSlcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyLCBzZXNzaW9uOiB7IC4uLm5ld1Rva2VucywgdXNlciB9IH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3JlZnJlc2hTZXNzaW9uJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXR1c2VyXG4gICAqIOWmguaenOWtmOWcqOeOsOacieS8muivne+8jOWImeiOt+WPluW9k+WJjeeUqOaIt+ivpue7huS/oeaBr1xuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJSZXM+XG4gICAqL1xuICBhc3luYyBnZXRVc2VyKGlzUmVmcmVzaCA9IHRydWUpOiBQcm9taXNlPEdldFVzZXJSZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlciA9IHRoaXMuY29udmVydFRvVXNlcihhd2FpdCB0aGlzLmdldEN1cnJlbnRVc2VyKGlzUmVmcmVzaCkpXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIgfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnZ2V0VXNlcicgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDliLfmlrDnlKjmiLfkv6Hmga9cbiAgICogQHJldHVybnMgUHJvbWlzZTxDb21tb25SZXM+XG4gICAqL1xuICBhc3luYyByZWZyZXNoVXNlcigpOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmN1cnJlbnRVc2VyLnJlZnJlc2goKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdyZWZyZXNoVXNlcicgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdXBkYXRldXNlclxuICAgKiDmm7TmlrDnlKjmiLfkv6Hmga9cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJSZXMgfCBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcz5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVVzZXIocGFyYW1zOiBVcGRhdGVVc2VyUmVxKTogUHJvbWlzZTxHZXRVc2VyUmVzIHwgVXBkYXRlVXNlcldpdGhWZXJpZmljYXRpb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77ya6Iez5bCR5pyJ5LiA5Liq5pu05paw5a2X5q616KKr5o+Q5L6bXG4gICAgICBjb25zdCBoYXNWYWx1ZSA9IE9iamVjdC5rZXlzKHBhcmFtcykuc29tZShrZXkgPT4gcGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCAmJiBwYXJhbXNba2V5XSAhPT0gbnVsbCAmJiBwYXJhbXNba2V5XSAhPT0gJycsKVxuICAgICAgaWYgKCFoYXNWYWx1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ0F0IGxlYXN0IG9uZSBmaWVsZCBtdXN0IGJlIHByb3ZpZGVkIGZvciB1cGRhdGUnIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZW1haWwsIHBob25lLCAuLi5yZXN0UGFyYW1zIH0gPSBwYXJhbXNcblxuICAgICAgLy8g5qOA5p+l5piv5ZCm6ZyA6KaB5pu05pawIGVtYWlsIOaIliBwaG9uZVxuICAgICAgY29uc3QgbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA9IGVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IG5lZWRzUGhvbmVWZXJpZmljYXRpb24gPSBwaG9uZSAhPT0gdW5kZWZpbmVkXG5cbiAgICAgIGxldCBleHRyYVJlcyA9IHt9XG5cbiAgICAgIGlmIChuZWVkc0VtYWlsVmVyaWZpY2F0aW9uIHx8IG5lZWRzUGhvbmVWZXJpZmljYXRpb24pIHtcbiAgICAgICAgLy8g6ZyA6KaB5Y+R6YCB6aqM6K+B56CBXG4gICAgICAgIGxldCB2ZXJpZmljYXRpb25QYXJhbXM6IHsgZW1haWw/OiBzdHJpbmc7IHBob25lX251bWJlcj86IHN0cmluZyB9XG4gICAgICAgIGxldCB2ZXJpZmljYXRpb25UeXBlOiAnZW1haWxfY2hhbmdlJyB8ICdwaG9uZV9jaGFuZ2UnXG5cbiAgICAgICAgaWYgKG5lZWRzRW1haWxWZXJpZmljYXRpb24pIHtcbiAgICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfVxuICAgICAgICAgIHZlcmlmaWNhdGlvblR5cGUgPSAnZW1haWxfY2hhbmdlJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIOato+inhOWMluaJi+acuuWPt1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpXG4gICAgICAgICAgdmVyaWZpY2F0aW9uUGFyYW1zID0geyBwaG9uZV9udW1iZXI6IGZvcm1hdHRlZFBob25lIH1cbiAgICAgICAgICB2ZXJpZmljYXRpb25UeXBlID0gJ3Bob25lX2NoYW5nZSdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWPkemAgemqjOivgeeggVxuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24odmVyaWZpY2F0aW9uUGFyYW1zKVxuXG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3RQYXJhbXMpLmxlbmd0aCA+IDAgJiYgKGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyhyZXN0UGFyYW1zKSlcblxuICAgICAgICBleHRyYVJlcyA9IHtcbiAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHZlcmlmeVBhcmFtczogeyBlbWFpbD86IHN0cmluZzsgcGhvbmU/OiBzdHJpbmc7IHRva2VuOiBzdHJpbmcgfSk6IFByb21pc2U8R2V0VXNlclJlcz4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKHZlcmlmeVBhcmFtcy5lbWFpbCAmJiBwYXJhbXMuZW1haWwgPT09IHZlcmlmeVBhcmFtcy5lbWFpbCkge1xuICAgICAgICAgICAgICAgIC8vIOmqjOivgeeggemqjOivgVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdlbWFpbF9jaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IHBhcmFtcy5lbWFpbCxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9KVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcmlmeVBhcmFtcy5waG9uZSAmJiBwYXJhbXMucGhvbmUgPT09IHZlcmlmeVBhcmFtcy5waG9uZSkge1xuICAgICAgICAgICAgICAgIC8vIOmqjOivgeeggemqjOivgVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdwaG9uZV9jaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgcGhvbmU6IHBhcmFtcy5waG9uZSxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHsgcGhvbmU6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHZlcmlmaWNhdGlvblR5cGUsXG4gICAgICAgICAgICAgICAgICBlbWFpbDogbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA/IHBhcmFtcy5lbWFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHBob25lOiAhbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA/IHBhcmFtcy5waG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8g6aqM6K+B5oiQ5Yqf5ZCO5pu05paw55So5oi35L+h5oGvXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtcylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHVzZXIgfSxcbiAgICAgICAgICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcihmYWxzZSlcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuVVNFUl9VUERBVEVEIH0pXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyIH0sIGVycm9yOiBudWxsIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICd1cGRhdGVVc2VyJyB9KSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5LiN6ZyA6KaB6aqM6K+B77yM55u05o6l5pu05pawXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXMpXG4gICAgICB9XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHsgdXNlciB9LFxuICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcihmYWxzZSlcbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlVTRVJfVVBEQVRFRCB9KVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIsIC4uLmV4dHJhUmVzIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3VwZGF0ZVVzZXInIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWdldHVzZXJpZGVudGl0aWVzXG4gICAqIOiOt+WPluaJgOaciei6q+S7vea6kFxuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJJZGVudGl0aWVzUmVzPlxuICAgKi9cbiAgYXN5bmMgZ2V0VXNlcklkZW50aXRpZXMoKTogUHJvbWlzZTxHZXRVc2VySWRlbnRpdGllc1Jlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlcnMoKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgaWRlbnRpdGllczogcHJvdmlkZXJzPy5kYXRhPy5maWx0ZXIodiA9PiAhIXYuYmluZCkgYXMgdW5rbm93biBhcyBHZXRVc2VySWRlbnRpdGllc1Jlc1snZGF0YSddWydpZGVudGl0aWVzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnZ2V0VXNlcklkZW50aXRpZXMnIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWxpbmtpZGVudGl0eVxuICAgKiDnu5Hlrprouqvku73mupDliLDlvZPliY3nlKjmiLdcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPExpbmtJZGVudGl0eVJlcz5cbiAgICovXG4gIGFzeW5jIGxpbmtJZGVudGl0eShwYXJhbXM6IExpbmtJZGVudGl0eVJlcSk6IFByb21pc2U8TGlua0lkZW50aXR5UmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnByb3ZpZGVy5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBwcm92aWRlcjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Byb3ZpZGVyIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zaWduSW5XaXRoT0F1dGgoe1xuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgdHlwZTogT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ2xpbmtJZGVudGl0eScgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdW5saW5raWRlbnRpdHlcbiAgICog6Kej57uR6Lqr5Lu95rqQXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxDb21tb25SZXM+XG4gICAqL1xuICBhc3luYyB1bmxpbmtJZGVudGl0eShwYXJhbXM6IFVubGlua0lkZW50aXR5UmVxKTogUHJvbWlzZTxDb21tb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yacHJvdmlkZXLlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHByb3ZpZGVyOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51bmJpbmRQcm92aWRlcih7IHByb3ZpZGVyX2lkOiBwYXJhbXMucHJvdmlkZXIgfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3VubGlua0lkZW50aXR5JyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1yZWF1dGhlbnRpY2F0aW9uXG4gICAqIOmHjeaWsOiupOivgVxuICAgKiBAcmV0dXJucyBQcm9taXNlPFJlYXV0aGVudGljYXRlUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVhdXRoZW50aWNhdGUoKTogUHJvbWlzZTxSZWF1dGhlbnRpY2F0ZVJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHsgdXNlciB9LFxuICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcihmYWxzZSlcblxuICAgICAgdGhpcy52YWxpZGF0ZUF0TGVhc3RPbmUodXNlciwgW1snZW1haWwnLCAncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuICAgICAgY29uc3QgdXNlckluZm8gPSB1c2VyLmVtYWlsID8geyBlbWFpbDogdXNlci5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUodXNlci5waG9uZSkgfVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHVzZXJJbmZvKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLy8g56ys5LqM5q2l77ya562J5b6F55So5oi36L6T5YWl6aqM6K+B56CB77yI6YCa6L+HIFByb21pc2Ug5YyF6KOF55So5oi36L6T5YWl5LqL5Lu277yJXG4gICAgICAgICAgdXBkYXRlVXNlcjogYXN5bmMgKGF0dHJpYnV0ZXM6IFVwZGF0ZVVzZXJBdHRyaWJ1dGVzKTogUHJvbWlzZTxTaWduSW5SZXM+ID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMoYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICBub25jZTogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ05vbmNlIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgLy8g56ys5LiJ5q2l77ya5b6F55So5oi36L6T5YWl5a6M6aqM6K+B56CB5LmL5ZCO77yM6aqM6K+B6aqM6K+B56CBXG4gICAgICAgICAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uVG9rZW5SZXMgPSBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IGF0dHJpYnV0ZXMubm9uY2UsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIC8vIOesrOWbm+atpe+8muiOt+WPliBzdWRvX3Rva2VuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3Vkb1JlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8oe1xuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuOiB2ZXJpZmljYXRpb25Ub2tlblJlcy52ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICAgIG5ld19wYXNzd29yZDogYXR0cmlidXRlcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgIHN1ZG9fdG9rZW46IHN1ZG9SZXMuc3Vkb190b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25Db2RlOiBhdHRyaWJ1dGVzLm5vbmNlLFxuICAgICAgICAgICAgICAgICAgLi4udXNlckluZm8sXG4gICAgICAgICAgICAgICAgICBsb2dpblR5cGU6IHVzZXJJbmZvLmVtYWlsID8gJ2VtYWlsJyA6ICdwaG9uZScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAncmVhdXRoZW50aWNhdGUnIH0pIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3JlYXV0aGVudGljYXRlJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1yZXNlbmRcbiAgICog6YeN5paw5Y+R6YCB6aqM6K+B56CBXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxSZXNlbmRSZXM+XG4gICAqL1xuICBhc3luYyByZXNlbmQocGFyYW1zOiBSZXNlbmRSZXEpOiBQcm9taXNlPFJlc2VuZFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXJhbXMudHlwZSA9PT0gJ3NpZ251cCcgPyAnQU5ZJyA6ICdVU0VSJ1xuICAgICAgY29uc3QgZGF0YTogeyBlbWFpbD86IHN0cmluZzsgcGhvbmVfbnVtYmVyPzogc3RyaW5nOyB0YXJnZXQ6ICdVU0VSJyB8ICdBTlknIH0gPSB7IHRhcmdldCB9XG4gICAgICBpZiAoJ2VtYWlsJyBpbiBwYXJhbXMpIHtcbiAgICAgICAgZGF0YS5lbWFpbCA9IHBhcmFtcy5lbWFpbFxuICAgICAgfVxuXG4gICAgICBpZiAoJ3Bob25lJyBpbiBwYXJhbXMpIHtcbiAgICAgICAgZGF0YS5waG9uZV9udW1iZXIgPSB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSlcbiAgICAgIH1cblxuICAgICAgLy8g6YeN5paw5Y+R6YCB6aqM6K+B56CBXG4gICAgICBjb25zdCB7IHZlcmlmaWNhdGlvbl9pZDogdmVyaWZpY2F0aW9uSWQgfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFZlcmlmaWNhdGlvbihkYXRhKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7IG1lc3NhZ2VJZDogdmVyaWZpY2F0aW9uSWQgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3Jlc2VuZCcgfSksXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zZXRzZXNzaW9uXG4gICAqIOS9v+eUqGFjY2Vzc190b2tlbuWSjHJlZnJlc2hfdG9rZW7mnaXorr7nva7kvJror51cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNldFNlc3Npb24ocGFyYW1zOiBTZXRTZXNzaW9uUmVxKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnQWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICByZWZyZXNoX3Rva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUmVmcmVzaCB0b2tlbiBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQucmVmcmVzaFRva2VuKHBhcmFtcywgeyB0aHJvd0Vycm9yOiB0cnVlIH0pXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX0lOIH0pXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NldFNlc3Npb24nIH0pIH1cbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtZXhjaGFuZ2Vjb2RlZm9yc2Vzc2lvblxuICBhc3luYyBleGNoYW5nZUNvZGVGb3JTZXNzaW9uKCkge1xuICAgIC8vXG4gIH1cblxuICAvKipcbiAgICog5Yig6Zmk5b2T5YmN55So5oi3XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVVzZXIocGFyYW1zOiBEZWxldGVNZVJlcSk6IFByb21pc2U8Q29tbW9uUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHBhc3N3b3JkOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUGFzc3dvcmQgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCB7IHN1ZG9fdG9rZW4gfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8ocGFyYW1zKVxuXG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZSh7IHN1ZG9fdG9rZW4gfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ2RlbGV0ZVVzZXInIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6Lez6L2s57O757uf6buY6K6k55m75b2V6aG1XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuVG9EZWZhdWx0TG9naW5QYWdlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIGFzeW5jIHRvRGVmYXVsdExvZ2luUGFnZShwYXJhbXM6IGF1dGhNb2RlbHMuVG9EZWZhdWx0TG9naW5QYWdlID0ge30pOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdWZXJzaW9uID0gcGFyYW1zLmNvbmZpZ192ZXJzaW9uIHx8ICdlbnYnXG4gICAgICBjb25zdCBxdWVyeSA9IE9iamVjdC5rZXlzKHBhcmFtcy5xdWVyeSB8fCB7fSlcbiAgICAgICAgLm1hcChrZXkgPT4gYCR7a2V5fT0ke3BhcmFtcy5xdWVyeVtrZXldfWApXG4gICAgICAgIC5qb2luKCcmJylcblxuICAgICAgaWYgKGFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgICB3eC5uYXZpZ2F0ZVRvKHsgdXJsOiBgL3BhY2thZ2VzLyR3ZF9zeXN0ZW0vcGFnZXMvbG9naW4vaW5kZXgke3F1ZXJ5ID8gYD8ke3F1ZXJ5fWAgOiAnJ31gIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWRpcmVjdFVyaSA9IHBhcmFtcy5yZWRpcmVjdF91cmkgfHwgd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTChyZWRpcmVjdFVyaSlcbiAgICAgICAgY29uc3QgbG9naW5QYWdlID0gYCR7dXJsT2JqLm9yaWdpbn0vX19hdXRoLz9hcHBfaWQ9JHtwYXJhbXMuYXBwX2lkIHx8ICcnfSZlbnZfaWQ9JHt0aGlzLmNvbmZpZy5lbnZ9JmNsaWVudF9pZD0ke1xuICAgICAgICAgIHRoaXMuY29uZmlnLmNsaWVudElkIHx8IHRoaXMuY29uZmlnLmVudlxuICAgICAgICB9JmNvbmZpZ192ZXJzaW9uPSR7Y29uZmlnVmVyc2lvbn0mcmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX0ke3F1ZXJ5ID8gYCYke3F1ZXJ5fWAgOiAnJ31gXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbG9naW5QYWdlXG4gICAgICB9XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAndG9EZWZhdWx0TG9naW5QYWdlJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiHquWumuS5ieeZu+W9lVxuICAgKiBAcGFyYW0gZ2V0VGlja0ZuICgpID0+IFByb21pc2U8c3RyaW5nPiwg6I635Y+W6Ieq5a6a5LmJ55m75b2VIHRpY2tldCDnmoTlh73mlbBcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhDdXN0b21UaWNrZXQoZ2V0VGlja0ZuPzogYXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm4pOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIGlmIChnZXRUaWNrRm4pIHtcbiAgICAgIHRoaXMuc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KClcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnc2lnbkluV2l0aEN1c3RvbVRpY2tldCcgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo9vcGVuSWTpnZnpu5jnmbvlvZVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhPcGVuSWQoeyB1c2VXeENsb3VkID0gdHJ1ZSB9ID0ge30pOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAnb3Blbl9pZCcsXG4gICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKFxuICAgICAgICAgIHsgcHJvdmlkZXJfdG9rZW46IHJlc3VsdC5wcm92aWRlcl90b2tlbiB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKGNyZWRlbnRpYWxzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBjcmVkZW50aWFsc1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscyBhcyBDcmVkZW50aWFscylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgbWFpbkZ1bmMocmVzLmNvZGUpXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhaWw6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IHJlcz8uZXJybm9cbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgLy8gbG9naW5TdGF0Zei/lOWbnuaYr+S4uuS6huWFvOWuuXYy54mI5pysXG4gICAgICByZXR1cm4geyAuLi4obG9naW5TdGF0ZSBhcyBhbnkpLCBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdzaWduSW5XaXRoT3BlbklkJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+aJi+acuuWPt+aOiOadg+eZu+W9lVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aFBob25lQXV0aCh7IHBob25lQ29kZSA9ICcnLCB1c2VXeENsb3VkID0gZmFsc2UgfSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICd3eCBhcGkgdW5kZWZpbmVkJyB9KSB9XG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG4gICAgY29uc3QgcHJvdmlkZXJJbmZvID0ge1xuICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7IHByb3ZpZGVyX2NvZGVfdHlwZTogJ3Bob25lJywgY29kZTogcGhvbmVDb2RlLCBhcHBpZDogd3hJbmZvLmFwcElkIH0sXG4gICAgICBwcm92aWRlcl9pZDogd3hJbmZvLmFwcElkLFxuICAgIH1cblxuICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgd3gubG9naW4oKVxuICAgIDsocHJvdmlkZXJJbmZvIGFzIGFueSkucHJvdmlkZXJfY29kZSA9IGNvZGVcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm92aWRlclRva2VuID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHByb3ZpZGVySW5mbywgdXNlV3hDbG91ZClcbiAgICAgIGlmIChwcm92aWRlclRva2VuLmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgcHJvdmlkZXJUb2tlblxuICAgICAgfVxuXG4gICAgICBjb25zdCBzaWduSW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbi5wcm92aWRlcl90b2tlbixcbiAgICAgIH0sIHVzZVd4Q2xvdWQpXG5cbiAgICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgc2lnbkluUmVzXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdzaWduSW5XaXRoUGhvbmVBdXRoJyB9KSB9XG4gICAgfVxuXG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG5cbiAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAvLyBsb2dpblN0YXRl6L+U5Zue5piv5Li65LqG5YW85a65djLniYjmnKxcbiAgICByZXR1cm4geyAuLi4obG9naW5TdGF0ZSBhcyBhbnkpLCBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gIH1cblxuICAvKipcbiAgICog57uR5a6a5omL5py65Y+3XG4gICAqIEBwYXJhbSBwaG9uZU51bWJlclxuICAgKiBAcGFyYW0gcGhvbmVDb2RlXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a5omL5py65Y+35aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kUGhvbmVOdW1iZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huefreS/oemqjOivgeeggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgYmluZFBob25lTnVtYmVyKHBhcmFtczogYXV0aE1vZGVscy5CaW5kUGhvbmVSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmVkaXRDb250YWN0KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDop6Pnu5HkuInmlrnnu5HlrppcbiAgICogQHBhcmFtIGxvZ2luVHlwZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+ino+mZpOS4ieaWuee7keWumuWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkudW5iaW5kUHJvdmlkZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjei0puaIt+aYr+WQpuW3sue7j+S4juatpOeZu+W9leaWueW8j+ino+e7kScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgdW5iaW5kUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLlVuYmluZFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51bmJpbmRQcm92aWRlcihwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog5pu05paw6YKu566x5Zyw5Z2AXG4gICAqIEBwYXJhbSBlbWFpbFxuICAgKiBAcGFyYW0gc3Vkb190b2tlblxuICAgKiBAcGFyYW0gdmVyaWZpY2F0aW9uX3Rva2VuXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a6YKu566x5Zyw5Z2A5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kRW1haWwoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6humCrueuseWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYmluZEVtYWlsKHBhcmFtczogYXV0aE1vZGVscy5CaW5kRW1haWxSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmVkaXRDb250YWN0KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiB2ZXJpZnlcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlZlcmlmeVJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLlZlcmlmeVJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIFVzZXJcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfpqozor4HnoIHpqozor4HlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLnZlcmlmeSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG5omL5py66aqM6K+B56CBL+mCrueuseeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5KHBhcmFtczogYXV0aE1vZGVscy5WZXJpZnlSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlZlcmlmeVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnZlcmlmeShwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W6aqM6K+B56CBXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZT59XG4gICAqIEBtZW1iZXJvZiBVc2VyXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W6aqM6K+B56CB5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRWZXJpZmljYXRpb24oKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huaJi+acuumqjOivgeeggS/pgq7nrrHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldFZlcmlmaWNhdGlvbihcbiAgICBwYXJhbXM6IGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCxcbiAgICBvcHRpb25zPzogeyB3aXRoQ2FwdGNoYTogYm9vbGVhbiB9LFxuICApOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICBpZiAocGFyYW1zLnBob25lX251bWJlcikge1xuICAgICAgcGFyYW1zLnBob25lX251bWJlciA9IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lX251bWJlcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFZlcmlmaWNhdGlvbihwYXJhbXMsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN55m75b2V55qE55So5oi35L+h5oGvLeWQjOatpVxuICAgKi9cbiAgZ2V0IGN1cnJlbnRVc2VyKCkge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0Q3VycmVudFVzZXIgaW5zdGVhZCcsXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsb2dpblN0YXRlID0gdGhpcy5oYXNMb2dpblN0YXRlKClcblxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICByZXR1cm4gbG9naW5TdGF0ZS51c2VyIHx8IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nmbvlvZXnmoTnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRDdXJyZW50VXNlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVudFVzZXIoaXNSZWZyZXNoID0gdHJ1ZSk6IFByb21pc2U8KGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+KSB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKGlzUmVmcmVzaCkge1xuICAgICAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICAgICAgaWYgKGxvZ2luU3RhdGUpIHtcbiAgICAgICAgICAvLyDmr4/mrKHpg73lj5Hor7fmsYLojrflj5bmnIDmlrDnlKjmiLfkv6Hmga/vvIzkuI3otbDnvJPlrZhcbiAgICAgICAgICBhd2FpdCBsb2dpblN0YXRlLnVzZXIucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy9cbiAgICB9XG5cbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBpZiAobG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgdXNlckluZm8gPSBsb2dpblN0YXRlLnVzZXIuZ2V0TG9jYWxVc2VySW5mbygpIGFzIGF1dGhNb2RlbHMuVXNlckluZm9cbiAgICAgIGF3YWl0IGxvZ2luU3RhdGUudXNlci5jaGVja0xvY2FsSW5mb0FzeW5jKClcbiAgICAgIHJldHVybiB7IC4uLmxvZ2luU3RhdGUudXNlciwgLi4udXNlckluZm8gfSBhcyB1bmtub3duIGFzIGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICog5Yy/5ZCN55m75b2VXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+Wwj+eoi+W6j+WMv+WQjeeZu+W9leWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWMv+WQjeeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5Bbm9ueW1vdXNseUluV3goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5SW5XeCh7XG4gICAgdXNlV3hDbG91ZCxcbiAgfToge1xuICAgIHVzZVd4Q2xvdWQ/OiBib29sZWFuXG4gIH0gPSB7fSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAnb3Blbl9pZCcsXG4gICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluQW5vbnltb3VzbHkoXG4gICAgICAgICAgeyBwcm92aWRlcl90b2tlbjogcmVzdWx0LnByb3ZpZGVyX3Rva2VuIH0sXG4gICAgICAgICAgdXNlV3hDbG91ZCxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmICgoY3JlZGVudGlhbHMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IGNyZWRlbnRpYWxzXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgd3gubG9naW4oe1xuICAgICAgICBzdWNjZXNzOiBhc3luYyAocmVzOiB7IGNvZGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IG1haW5GdW5jKHJlcy5jb2RlKVxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihyZXM/LmVyck1zZylcbiAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IHJlcz8uZXJybm9cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHVuZGVmaW5lZCwgeyBhc3luY1JlZnJlc2hVc2VyOiB0cnVlIH0pXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP57uR5a6aT3BlbklEXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+Wwj+eoi+W6j+e7keWumk9wZW5JROWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j29wZW5JZOmdmem7mOeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5iaW5kT3BlbklkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kT3BlbklkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbih7XG4gICAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSxcbiAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ29wZW5faWQnLFxuICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRXaXRoUHJvdmlkZXIoeyBwcm92aWRlcl90b2tlbjogcmVzdWx0LnByb3ZpZGVyX3Rva2VuIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBtYWluRnVuYyhyZXMuY29kZSlcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo91bmlvbklk6Z2Z6buY55m75b2V5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoVW5pb25JZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFVuaW9uSWQoKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVySWQgPSB3eEluZm8/LmFwcElkXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IHJlcy5jb2RlLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX2lkOiBwcm92aWRlcklkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAgICAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAndW5pb25faWQnLFxuICAgICAgICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBjb25zdCB7IHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuIH0gPSByZXN1bHRcblxuICAgICAgICAgICAgICBpZiAoIXByb3ZpZGVyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9pZDogcHJvdmlkZXJJZCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBpZiAoKHNpZ25JblJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHNpZ25JblJlcylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP55+t5L+h6aqM6K+B56CB55m76ZmGXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+efreS/oemqjOivgeeggeeZu+mZhicsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j+efreS/oemqjOivgeeggeeZu+mZhicsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoU21zKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoU21zKHtcbiAgICB2ZXJpZmljYXRpb25JbmZvID0geyB2ZXJpZmljYXRpb25faWQ6ICcnLCBpc191c2VyOiBmYWxzZSB9LFxuICAgIHZlcmlmaWNhdGlvbkNvZGUgPSAnJyxcbiAgICBwaG9uZU51bSA9ICcnLFxuICAgIGJpbmRJbmZvID0gdW5kZWZpbmVkLFxuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgIHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICAgIGJpbmRJbmZvLFxuICAgICAgICB1c2VybmFtZTogcGhvbmVOdW0sXG4gICAgICAgIGxvZ2luVHlwZTogJ3NtcycsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDpgq7nrrHpqozor4HnoIHnmbvpmYZcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6YKu566x6aqM6K+B56CB55m76ZmGJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG6YKu566x55m76ZmGJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhFbWFpbCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEVtYWlsKHtcbiAgICB2ZXJpZmljYXRpb25JbmZvID0geyB2ZXJpZmljYXRpb25faWQ6ICcnLCBpc191c2VyOiBmYWxzZSB9LFxuICAgIHZlcmlmaWNhdGlvbkNvZGUgPSAnJyxcbiAgICBiaW5kSW5mbyA9IHVuZGVmaW5lZCxcbiAgICBlbWFpbCA9ICcnLFxuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgIHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICAgIGJpbmRJbmZvLFxuICAgICAgICB1c2VybmFtZTogZW1haWwsXG4gICAgICAgIGxvZ2luVHlwZTogJ2VtYWlsJyxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiuvue9ruiOt+WPluiHquWumuS5ieeZu+W9lSB0aWNrZXQg5Ye95pWwXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm59IGdldFRpY2tGblxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIHNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbjogYXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm4pOiB2b2lkIHtcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm4pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICAvLyBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAvLyAgIHRpdGxlOiAn6Ieq5a6a5LmJ55m75b2V5aSx6LSlJyxcbiAgLy8gICBtZXNzYWdlczogW1xuICAvLyAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gIC8vICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG6Ieq5a6a5LmJ55m75b2VJyxcbiAgLy8gICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgJyAgMyAtIHRpY2tldCDmmK/lkKblvZLlsZ7kuo7lvZPliY3njq/looMnLFxuICAvLyAgICAgJyAgNCAtIOWIm+W7uiB0aWNrZXQg55qE6Ieq5a6a5LmJ55m75b2V56eB6ZKl5piv5ZCm6L+H5pyfJyxcbiAgLy8gICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAvLyAgIF0sXG4gIC8vIH0pXG4gIC8vIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAvLyAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKVxuICAvLyAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluKHBhcmFtczogYXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHBhcmFtcylcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKlxuICAvLyAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2lnblVwUmVxdWVzdH0gcGFyYW1zXG4gIC8vICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAvLyAgKiBAbWVtYmVyb2YgQXV0aFxuICAvLyAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+azqOWGjOWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huaMh+WumueZu+W9leaWueW8jycsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduVXAoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25VcChwYXJhbXM6IGF1dGhNb2RlbHMuU2lnblVwUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XG4gIC8vICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnblVwKHBhcmFtcylcbiAgLy8gICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiDorr7nva7lr4bnoIFcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlNldFBhc3N3b3JkUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5TZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0UGFzc3dvcmQocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOajgOa1i+eUqOaIt+WQjeaYr+WQpuW3sue7j+WNoOeUqFxuICAgKiBAcGFyYW0gdXNlcm5hbWVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bnlKjmiLfmmK/lkKbooqvljaDnlKjlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmlzVXNlcm5hbWVSZWdpc3RlcmVkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBpc1VzZXJuYW1lUmVnaXN0ZXJlZCh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHR5cGVvZiB1c2VybmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAndXNlcm5hbWUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBleGlzdCB9ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuY2hlY2tJZlVzZXJFeGlzdCh7IHVzZXJuYW1lIH0pXG4gICAgcmV0dXJuIGV4aXN0XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGhhc0xvZ2luU3RhdGUoKTogTG9naW5TdGF0ZSB8IG51bGwge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0TG9naW5TdGF0ZSBpbnN0ZWFkJyxcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9hdXRoTG9naW5TdGF0ZSA9IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5oYXNMb2dpblN0YXRlU3luYygpXG4gICAgaWYgKG9hdXRoTG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gbG9naW5TdGF0ZVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeZu+W9leaAgS3lvILmraVcbiAgICog5q2kQVBJ5Li65YW85a655byC5q2lc3RvcmFnZeeahOW5s+WPsFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPluacrOWcsOeZu+W9leaAgeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0TG9naW5TdGF0ZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0TG9naW5TdGF0ZSgpIHtcbiAgICBsZXQgb2F1dGhMb2dpblN0YXRlID0gbnVsbFxuXG4gICAgdHJ5IHtcbiAgICAgIG9hdXRoTG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChvYXV0aExvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIOS9v+eUqCBnZXRDdXJyZW50VXNlciDku6Pmm7/vvIzlm6DkuLrkuI5ub2RlLXNka+aWueazleWQjeWGsueqgVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRVc2VySW5mbygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckluZm8oKTogUHJvbWlzZTwoYXV0aE1vZGVscy5Vc2VySW5mbyAmIFBhcnRpYWw8VXNlcj4pIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRVc2VyKClcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5blvq7mkK3mj5Lku7bnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDmmK/lkKblt7LnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuZ2V0V2VkYVVzZXJJbmZvKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRXZWRhVXNlckluZm8oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0V2VkYVVzZXJJbmZvKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtczogYXV0aE1vZGVscy5Nb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCkge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICBhd2FpdCAobG9naW5TdGF0ZS51c2VyIGFzIFVzZXIpLnVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRBdXRoSGVhZGVyIOWFvOWuueWkhOeQhlxuICAgKiDov5Tlm57nqbrlr7nosaFcbiAgICovXG4gIHB1YmxpYyBnZXRBdXRoSGVhZGVyKCk6IHt9IHtcbiAgICBjb25zb2xlLmVycm9yKCdBdXRoLmdldEF1dGhIZWFkZXIgQVBJIOW3suW6n+W8gycpXG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICAvKipcbiAgICog5Li65bey5pyJ6LSm5oi357uR56ys5LiJ5pa56LSm5oi3XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumuesrOS4ieaWueeZu+W9leaWueW8j+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZFdpdGhQcm92aWRlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5q2k6LSm5oi35piv5ZCm5bey57uP57uR5a6a5q2k56ys5LiJ5pa5JyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kV2l0aFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmn6Xor6LnlKjmiLdcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0fSBhcHBlbmRlZF9wYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlVc2VyKHF1ZXJ5T2JqOiBhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5xdWVyeVVzZXJQcm9maWxlKHF1ZXJ5T2JqKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgIGNvbnN0IG9hdXRoQWNjZXNzVG9rZW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICByZXR1cm4ge1xuICAgICAgYWNjZXNzVG9rZW46IG9hdXRoQWNjZXNzVG9rZW5SZXMsXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ3JhbnRQcm92aWRlclRva2VuKHBhcmFtczogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXM6IGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucGF0Y2hQcm92aWRlclRva2VuKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhXZWNoYXQocGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhXZWNoYXQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdyYW50VG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLkdyYW50VG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRUb2tlbihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShwYXJhbXM6IGF1dGhNb2RlbHMuR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5SZXNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZXNldFBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXZpY2VBdXRob3JpemUocGFyYW1zOiBhdXRoTW9kZWxzLkRldmljZUF1dGhvcml6ZVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuRGV2aWNlQXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZGV2aWNlQXV0aG9yaXplKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWRvKHBhcmFtczogYXV0aE1vZGVscy5TdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5TdWRvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc3VkbyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlTWUocGFyYW1zOiBhdXRoTW9kZWxzLldpdGhTdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8YXV0aE1vZGVscy5Qcm92aWRlcnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlcnMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkubG9naW5TY29wZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5Hcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5sb2dpbkdyb3VwcygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25Mb2dpblN0YXRlQ2hhbmdlZChjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8ub24oRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIC8vIGdldExvZ2luU3RhdGXkvJrph43lpI3op6blj5FnZXRDcmVkZW50aWFsc++8jOWvvOiHtOatu+W+queOr++8jOaJgOS7pWdldENyZWRlbnRpYWxz5Ye66ZSZ5LiN5YaN5Ye65Y+RZ2V0TG9naW5TdGF0ZVxuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IHBhcmFtcz8uZGF0YT8uZXZlbnRUeXBlICE9PSBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuQ1JFREVOVElBTFNfRVJST1IgPyBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKSA6IHt9XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIHsgLi4ucGFyYW1zLCAuLi5sb2dpblN0YXRlIH0pXG4gICAgfSlcbiAgICAvLyDnq4vliLvmiafooYzkuIDmrKHlm57osINcbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGxvZ2luU3RhdGUpXG4gIH1cblxuICAvKipcbiAgICog5by65Yi25Yi35pawdG9rZW5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bouqvku73kv6Hmga9cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldENyZWRlbnRpYWxzKClcbiAgfVxuICAvKipcbiAgICog5YaZ5YWl6Lqr5Lu95L+h5oGvXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bouqvku73mupDnsbvlnosnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFByb3ZpZGVyU3ViVHlwZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJTdWJUeXBlKCk6IFByb21pc2U8YXV0aE1vZGVscy5Qcm92aWRlclN1YlR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0UHJvdmlkZXJTdWJUeXBlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXB0Y2hhRGF0YShwYXJhbXM6IHsgc3RhdGU6IHN0cmluZzsgcmVkaXJlY3RfdXJpPzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuY3JlYXRlQ2FwdGNoYURhdGEocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtczogeyB0b2tlbjogc3RyaW5nOyBrZXk6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRNaW5pUHJvZ3JhbVFyQ29kZShwYXJhbXM6IGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldE1pbmlQcm9ncmFtQ29kZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zOiBhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1cyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpbihwYXJhbXM6IGF1dGhNb2RlbHMuTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VyQmVoYXZpb3JMb2cocGFyYW1zOiBhdXRoTW9kZWxzLkdldFVzZXJCZWhhdmlvckxvZyk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRVc2VyQmVoYXZpb3JMb2dSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VXNlckJlaGF2aW9yTG9nKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBzbXMvZW1haWwg6aqM6K+B56CB55m75b2VL+azqOWGjO+8jOmAu+i+keS4gOiHtOaUtuaVm1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgdmVyaWZpY2F0aW9uSW5mbyA9IHsgdmVyaWZpY2F0aW9uX2lkOiAnJywgaXNfdXNlcjogZmFsc2UgfSxcbiAgICB2ZXJpZmljYXRpb25Db2RlID0gJycsXG4gICAgdXNlcm5hbWU6IHJhd1VzZXJuYW1lID0gJycsXG4gICAgYmluZEluZm8gPSB1bmRlZmluZWQsXG4gICAgbG9naW5UeXBlID0gJycsXG4gIH06IHtcbiAgICB2ZXJpZmljYXRpb25JbmZvPzogYXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZVxuICAgIHZlcmlmaWNhdGlvbkNvZGU/OiBzdHJpbmdcbiAgICB1c2VybmFtZT86IHN0cmluZ1xuICAgIGJpbmRJbmZvPzogYW55XG4gICAgbG9naW5UeXBlPzogc3RyaW5nXG4gIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICB0cnkge1xuICAgICAgLy8gMS4g6aqM6K+B6aqM6K+B56CBXG4gICAgICBjb25zdCB2ZXJpZnlSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnkoe1xuICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICgodmVyaWZ5UmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgdmVyaWZ5UmVzXG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAgIGNvbnN0IHsgdmVyaWZpY2F0aW9uX3Rva2VuIH0gPSB2ZXJpZnlSZXNcblxuICAgICAgLy8g5omL5py655m75b2V5Y+C5pWwXG4gICAgICBsZXQgdXNlcm5hbWUgPSB0aGlzLmZvcm1hdFBob25lKHJhd1VzZXJuYW1lKVxuICAgICAgbGV0IHNpZ25VcFBhcmFtOiBhbnkgPSB7IHBob25lX251bWJlcjogdXNlcm5hbWUgfVxuXG4gICAgICAvLyDpgq7nrrHnmbvlvZXlj4LmlbBcbiAgICAgIGlmIChsb2dpblR5cGUgPT09ICdlbWFpbCcpIHtcbiAgICAgICAgdXNlcm5hbWUgPSByYXdVc2VybmFtZVxuICAgICAgICBzaWduVXBQYXJhbSA9IHsgZW1haWw6IHVzZXJuYW1lIH1cbiAgICAgIH1cblxuICAgICAgLy8gMi4g5qC55o2u5piv5ZCm5bey57uP5piv55So5oi377yM5YiG5Yir6LWw55m75b2V5oiW5rOo5YaM6YC76L6RXG4gICAgICBpZiAodmVyaWZpY2F0aW9uSW5mby5pc191c2VyKSB7XG4gICAgICAgIC8vIOengeacieWMlueOr+Wig+aIluiAheiHquWumuS5ieW6lOeUqOi1sHYx54mI5pys55qE6ICB6YC76L6RXG4gICAgICAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25Jbih7XG4gICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBzaWduSW5SZXNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaW5kSW5mbykge1xuICAgICAgICAgIGNvbnN0IGJpbmRSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgICAgIHByb3ZpZGVyX3Rva2VuOiAoYmluZEluZm8gYXMgYW55KT8ucHJvdmlkZXJUb2tlbixcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKChiaW5kUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICAgIHRocm93IGJpbmRSZXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOiHquWumuS5ieW6lOeUqOi1sHNpZ25VcOmAu+i+kVxuICAgICAgICBjb25zdCBzaWduVXBSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAoe1xuICAgICAgICAgIC4uLnNpZ25VcFBhcmFtLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICBwcm92aWRlcl90b2tlbjogKGJpbmRJbmZvIGFzIGFueSk/LnByb3ZpZGVySWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKChzaWduVXBSZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IHNpZ25VcFJlc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUxvZ2luU3RhdGUoXG4gICAgcGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9LFxuICAgIG9wdGlvbnM/OiB7IGFzeW5jUmVmcmVzaFVzZXI/OiBib29sZWFuOyB1c2VySW5mbz86IGFueSB9LFxuICApOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBjb25zdCBsb2dpblN0YXRlID0gbmV3IExvZ2luU3RhdGUoe1xuICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlLFxuICAgIH0pXG5cbiAgICBhd2FpdCBsb2dpblN0YXRlLmNoZWNrTG9jYWxTdGF0ZUFzeW5jKClcblxuICAgIGlmIChvcHRpb25zPy51c2VySW5mbykge1xuICAgICAgbG9naW5TdGF0ZS51c2VyLnNldExvY2FsVXNlckluZm8ob3B0aW9ucy51c2VySW5mbylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnM/LmFzeW5jUmVmcmVzaFVzZXIpIHtcbiAgICAgICAgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCB7IGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05fSU4gfSlcblxuICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTiB9KVxuICAgIHJldHVybiBsb2dpblN0YXRlXG4gIH1cblxuICBhc3luYyBzZXRBY2Nlc3NLZXkoKSB7XG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gJydcbiAgICBsZXQgc2NvcGUgPSAnJ1xuICAgIGlmICh0aGlzLmNvbmZpZy5hY2Nlc3NLZXkpIHtcbiAgICAgIGFjY2Vzc1Rva2VuID0gdGhpcy5jb25maWcuYWNjZXNzS2V5XG4gICAgICBzY29wZSA9ICdhY2Nlc3NLZXknXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRJZCAmJiB0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRLZXkpIHtcbiAgICAgIGFjY2Vzc1Rva2VuID0gJydcbiAgICAgIHNjb3BlID0gREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRVxuICAgIH1cblxuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnNldEFjY2Vzc0tleUNyZWRlbnRpYWxzKHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgdG9rZW5fdHlwZTogJ0JlYXJlcicsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZSgrbmV3IERhdGUoKSArICtuZXcgRGF0ZSgpKSxcbiAgICAgICAgZXhwaXJlc19pbjogK25ldyBEYXRlKCkgKyArbmV3IERhdGUoKSxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignYWNjZXNzS2V5IGVycm9yOiAnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybWF0UGhvbmUocGhvbmU6IHN0cmluZykge1xuICAgIGlmICghL1xccysvLnRlc3QocGhvbmUpICYmIC9eXFwrXFxkezEsM31cXGQrLy50ZXN0KHBob25lKSkge1xuICAgICAgcmV0dXJuIHBob25lLnJlcGxhY2UoL14oXFwrXFxkezEsMn0pKFxcZCspJC8sICckMSAkMicpXG4gICAgfVxuICAgIHJldHVybiAvXlxcK1xcZHsxLDN9XFxzKy8udGVzdChwaG9uZSkgPyBwaG9uZSA6IGArODYgJHtwaG9uZX1gXG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUxpc3RlbmVycyhldmVudCwgc2Vzc2lvbiwgaW5mbyk6IE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2sge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGNhbGxiYWNrcykgPT4ge1xuICAgICAgY2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbGJhY2soZXZlbnQsIHNlc3Npb24sIGluZm8pXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYXV0aCBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2s6JywgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jb25maWcuZXZlbnRCdXM/Lm9uKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gcGFyYW1zPy5kYXRhPy5ldmVudFxuICAgICAgY29uc3QgaW5mbyA9IHBhcmFtcz8uZGF0YT8uaW5mb1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhOiB7IHNlc3Npb24gfSxcbiAgICAgIH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICB0aGlzLm5vdGlmeUxpc3RlbmVycyhldmVudCwgc2Vzc2lvbiwgaW5mbylcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9Vc2VyKHVzZXJJbmZvOiBhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPikge1xuICAgIGlmICghdXNlckluZm8pIHJldHVybiBudWxsXG5cbiAgICAvLyDkvJjlhYjkvb/nlKggdXNlckluZm8g5Lit55qE5pWw5o2u77yIVjMgQVBJ77yJXG4gICAgY29uc3QgZW1haWwgPSB1c2VySW5mbz8uZW1haWwgfHwgJydcbiAgICBjb25zdCBwaG9uZSA9IHVzZXJJbmZvPy5waG9uZV9udW1iZXIgfHwgJydcbiAgICBjb25zdCB1c2VySWQgPSB1c2VySW5mbz8uc3ViIHx8IHVzZXJJbmZvPy51aWQgfHwgJydcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdXNlcklkLFxuICAgICAgYXVkOiAnYXV0aGVudGljYXRlZCcsXG4gICAgICByb2xlOiB1c2VySW5mby5ncm91cHM/Lm1hcD8uKGdyb3VwID0+ICh0eXBlb2YgZ3JvdXAgPT09ICdzdHJpbmcnID8gZ3JvdXAgOiBncm91cC5pZCkpLFxuICAgICAgZW1haWw6IGVtYWlsIHx8ICcnLFxuICAgICAgZW1haWxfY29uZmlybWVkX2F0OiB1c2VySW5mbz8uZW1haWxfdmVyaWZpZWQgPyB1c2VySW5mby5jcmVhdGVkX2F0IDogdXNlckluZm8uY3JlYXRlZF9hdCxcbiAgICAgIHBob25lLFxuICAgICAgcGhvbmVfY29uZmlybWVkX2F0OiBwaG9uZSA/IHVzZXJJbmZvLmNyZWF0ZWRfYXQgOiB1bmRlZmluZWQsXG4gICAgICBjb25maXJtZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICBsYXN0X3NpZ25faW5fYXQ6ICh1c2VySW5mbyBhcyBhbnkpLmxhc3Rfc2lnbl9pbl9hdCxcbiAgICAgIGFwcF9tZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlcjogdXNlckluZm8ubG9naW5UeXBlPy50b0xvd2VyQ2FzZSgpIHx8ICdjbG91ZGJhc2UnLFxuICAgICAgICBwcm92aWRlcnM6IFt1c2VySW5mby5sb2dpblR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJ2Nsb3VkYmFzZSddLFxuICAgICAgfSxcbiAgICAgIHVzZXJfbWV0YWRhdGE6IHtcbiAgICAgICAgLy8gVjMgQVBJIOeUqOaIt+S/oeaBr1xuICAgICAgICBuYW1lOiB1c2VySW5mbz8ubmFtZSxcbiAgICAgICAgcGljdHVyZTogdXNlckluZm8/LnBpY3R1cmUsXG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mbz8udXNlcm5hbWUsIC8vIOeUqOaIt+WQjeensO+8jOmVv+W6piA1LTI0IOS9je+8jOaUr+aMgeWtl+espuS4reiLseaWh+OAgeaVsOWtl+OAgeeJueauiuWtl+espu+8iOS7heaUr+aMgV8t77yJ77yM5LiN5pSv5oyB5Lit5paHXG4gICAgICAgIGdlbmRlcjogdXNlckluZm8/LmdlbmRlcixcbiAgICAgICAgbG9jYWxlOiB1c2VySW5mbz8ubG9jYWxlLFxuICAgICAgICAvLyBWMiBBUEkg5YW85a6577yI5L2/55SoIGFueSDpgb/lhY3nsbvlnovplJnor6/vvIlcbiAgICAgICAgdWlkOiB1c2VySW5mby51aWQsXG4gICAgICAgIG5pY2tOYW1lOiB1c2VySW5mby5uaWNrTmFtZSB8fCB1c2VySW5mbz8ubmFtZSxcbiAgICAgICAgYXZhdGFyVXJsOiB1c2VySW5mby5hdmF0YXJVcmwgfHwgdXNlckluZm8ucGljdHVyZSxcbiAgICAgICAgbG9jYXRpb246IHVzZXJJbmZvLmxvY2F0aW9uLFxuICAgICAgICBoYXNQYXNzd29yZDogdXNlckluZm8uaGFzUGFzc3dvcmQsXG4gICAgICB9LFxuICAgICAgaWRlbnRpdGllczpcbiAgICAgICAgdXNlckluZm8/LnByb3ZpZGVycz8ubWFwKHAgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCB8fCAnJyxcbiAgICAgICAgICBpZGVudGl0eV9pZDogcC5pZCB8fCAnJyxcbiAgICAgICAgICB1c2VyX2lkOiB1c2VySWQsXG4gICAgICAgICAgaWRlbnRpdHlfZGF0YToge1xuICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHAuaWQsXG4gICAgICAgICAgICBwcm92aWRlcl91c2VyX2lkOiBwLnByb3ZpZGVyX3VzZXJfaWQsXG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm92aWRlcjogcC5pZCB8fCAnY2xvdWRiYXNlJyxcbiAgICAgICAgICBjcmVhdGVkX2F0OiB1c2VySW5mby5jcmVhdGVkX2F0LFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IHVzZXJJbmZvLnVwZGF0ZWRfYXQsXG4gICAgICAgICAgbGFzdF9zaWduX2luX2F0OiAodXNlckluZm8gYXMgYW55KS5sYXN0X3NpZ25faW5fYXQsXG4gICAgICAgIH0pKSB8fCBbXSxcbiAgICAgIGNyZWF0ZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICB1cGRhdGVkX2F0OiB1c2VySW5mby51cGRhdGVkX2F0LFxuICAgICAgaXNfYW5vbnltb3VzOiB1c2VySW5mby5uYW1lID09PSAnYW5vbnltb3VzJyxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Y+C5pWw5qCh6aqM6L6F5Yqp5pa55rOVXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFyYW1zKHBhcmFtczogYW55LCBydWxlczogeyBba2V5OiBzdHJpbmddOiB7IHJlcXVpcmVkPzogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0gfSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2tleSwgcnVsZV0gb2YgT2JqZWN0LmVudHJpZXMocnVsZXMpKSB7XG4gICAgICBpZiAocnVsZS5yZXF1aXJlZCAmJiAocGFyYW1zPy5ba2V5XSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtcz8uW2tleV0gPT09IG51bGwgfHwgcGFyYW1zPy5ba2V5XSA9PT0gJycpKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiBydWxlLm1lc3NhZ2UgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5qCh6aqM5b+F5aGr5Y+C5pWw57uE77yI6Iez5bCR5pyJ5LiA5Liq5Y+C5pWw5b+F6aG75pyJ5YC877yJXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXM6IGFueSwgZmllbGRHcm91cHM6IHN0cmluZ1tdW10sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gZmllbGRHcm91cHMuc29tZShncm91cCA9PiBncm91cC5zb21lKGZpZWxkID0+IHBhcmFtcz8uW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcz8uW2ZpZWxkXSAhPT0gbnVsbCAmJiBwYXJhbXM/LltmaWVsZF0gIT09ICcnKSwpXG5cbiAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZSB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHsgZXJyb3I6IEVycm9yIHwgbnVsbCB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuSU5JVElBTF9TRVNTSU9OIH0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElnbm9yZSBlcnJvcnMgd2hlbiBjaGVja2luZyBmb3IgZXhpc3RpbmcgY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9XG4gIH1cbn1cblxudHlwZSBUSW5pdEF1dGhPcHRpb25zID0gUGljazxcbklDbG91ZGJhc2VBdXRoQ29uZmlnLFxuJ3JlZ2lvbicgfCAncGVyc2lzdGVuY2UnIHwgJ2kxOG4nIHwgJ2FjY2Vzc0tleScgfCAndXNlV3hDbG91ZCcgfCAnYXV0aCdcbj4gJlxuUGFydGlhbDxBdXRoT3B0aW9ucz4gJiB7XG4gIGRldGVjdFNlc3Npb25JblVybD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXV0aEluc3RhbmNlKFxuICBjb25maWc6IFRJbml0QXV0aE9wdGlvbnMgJiB7IHNka1ZlcnNpb24/OiBzdHJpbmcgfSxcbiAgb3B0aW9ucz86IHtcbiAgICBjbGllbnRJZDogSUNsb3VkYmFzZUNvbmZpZ1snY2xpZW50SWQnXVxuICAgIGVudjogSUNsb3VkYmFzZUNvbmZpZ1snZW52J11cbiAgICBhcGlPcmlnaW46IHN0cmluZ1xuICAgIGNhY2hlPzogSUNsb3VkYmFzZUNhY2hlXG4gICAgcGxhdGZvcm0/OiBJQ2xvdWRiYXNlWydwbGF0Zm9ybSddXG4gICAgYXBwPzogSUNsb3VkYmFzZVxuICAgIGRlYnVnPzogSUNsb3VkYmFzZUF1dGhDb25maWdbJ2RlYnVnJ11cbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw/OiBJQ2xvdWRiYXNlQXV0aENvbmZpZ1snZGV0ZWN0U2Vzc2lvbkluVXJsJ11cbiAgfSxcbikge1xuICBjb25zdCB7IHJlZ2lvbiA9ICdhcC1zaGFuZ2hhaScsIGkxOG4sIGFjY2Vzc0tleSwgdXNlV3hDbG91ZCB9ID0gY29uZmlnXG4gIGNvbnN0IHBsYXRmb3JtID0gb3B0aW9ucz8ucGxhdGZvcm0gfHwgKHVzZURlZmF1bHRBZGFwdGVyLmJpbmQob3B0aW9ucykoKSBhcyBJQ2xvdWRiYXNlUGxhdGZvcm1JbmZvKVxuICBjb25zdCB7IHJ1bnRpbWUsIGFkYXB0ZXIgfSA9IHBsYXRmb3JtXG5cbiAgY29uc3QgeyBlbnYsIGNsaWVudElkLCBkZWJ1ZywgY2FjaGUsIGFwcDogY2xvdWRiYXNlIH0gPSBvcHRpb25zIHx8IHt9XG4gIGxldCB7IGFwaU9yaWdpbiB9ID0gb3B0aW9ucyB8fCB7fVxuICBpZiAoIWFwaU9yaWdpbikge1xuICAgIGFwaU9yaWdpbiA9IGBodHRwczovLyR7ZW52fS4ke3JlZ2lvbn0udGNiLWFwaS50ZW5jZW50Y2xvdWRhcGkuY29tYFxuICB9XG5cbiAgY29uc3QgY29tbW9uT3B0cyA9IHtcbiAgICBlbnYsXG4gICAgY2xpZW50SWQsXG4gICAgaTE4bixcbiAgICBhY2Nlc3NLZXksXG4gICAgdXNlV3hDbG91ZCxcbiAgICBldmVudEJ1czogbmV3IENsb3VkYmFzZUV2ZW50RW1pdHRlcigpLFxuICB9XG5cbiAgY29uc3Qgb2F1dGhJbnN0YW5jZSA9IG5ldyBDbG91ZGJhc2VPQXV0aCh1c2VBdXRoQWRhcHRlcih7XG4gICAgLi4uY29tbW9uT3B0cyxcbiAgICBhcGlPcmlnaW4sXG4gICAgYXBpUGF0aDogY29uZmlnPy5hcGlQYXRoIHx8IEFVVEhfQVBJX1BSRUZJWCxcbiAgICAvLyBAdG9kbyDku6XkuIvmnIDlpb3otbBhZGFwdG9y5aSE55CG77yM55uu5YmNb2F1dGjmqKHlnZfmsqHmjIlhZGFwdG9y5o6l5Y+j6K6+6K6hXG4gICAgc3RvcmFnZTogY29uZmlnPy5zdG9yYWdlLFxuICAgIGJhc2VSZXF1ZXN0OiBjb25maWc/LmJhc2VSZXF1ZXN0LFxuICAgIHJlcXVlc3Q6IGNvbmZpZz8ucmVxdWVzdCxcbiAgICBhbm9ueW1vdXNTaWduSW5GdW5jOiBjb25maWc/LmFub255bW91c1NpZ25JbkZ1bmMsXG4gICAgY2FwdGNoYU9wdGlvbnM6IGNvbmZpZz8uY2FwdGNoYU9wdGlvbnMsXG4gICAgd3hDbG91ZDogY29uZmlnPy53eENsb3VkLFxuICAgIGFkYXB0ZXIsXG4gICAgb25DcmVkZW50aWFsc0Vycm9yOiBvbkNyZWRlbnRpYWxzRXJyb3IoY29tbW9uT3B0cy5ldmVudEJ1cyksXG4gICAgaGVhZGVyczogeyAnWC1TREstVmVyc2lvbic6IGBAY2xvdWRiYXNlL2pzLXNkay8ke2NvbmZpZy5zZGtWZXJzaW9ufWAsIC4uLihjb25maWcuaGVhZGVycyB8fCB7fSkgfSxcbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw6IGNvbmZpZy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgZGVidWcsXG4gICAgYXV0aDogb3B0aW9ucy5hcHA/LmNvbmZpZz8uYXV0aCxcbiAgfSksKVxuXG4gIGNvbnN0IGF1dGhJbnN0YW5jZSA9IG5ldyBBdXRoKHtcbiAgICAuLi5jb21tb25PcHRzLFxuICAgIHJlZ2lvbixcbiAgICBwZXJzaXN0ZW5jZTogY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgIGRlYnVnLFxuICAgIGNhY2hlOlxuICAgICAgY2FjaGUgfHwgbmV3IENsb3VkYmFzZUNhY2hlKHtcbiAgICAgICAgcGVyc2lzdGVuY2U6IGNvbmZpZy5wZXJzaXN0ZW5jZSxcbiAgICAgICAga2V5czogeyB1c2VySW5mb0tleTogYHVzZXJfaW5mb18ke2Vudn1gIH0sXG4gICAgICAgIHBsYXRmb3JtSW5mbzogcGxhdGZvcm0sXG4gICAgICB9KSxcbiAgICBydW50aW1lOiBydW50aW1lIHx8ICd3ZWInLFxuICAgIF9mcm9tQXBwOiBjbG91ZGJhc2UsXG4gICAgb2F1dGhJbnN0YW5jZSxcbiAgICBhdXRoOiBvcHRpb25zLmFwcD8uY29uZmlnPy5hdXRoLFxuICB9KVxuXG4gIC8vIEluaXRpYWxpemUgc2Vzc2lvbiB3aXRoIHVzZXIgaW5mbyBjYWxsYmFja1xuICAvLyBUaGlzIGhhbmRsZXMgT0F1dGggY2FsbGJhY2sgVVJMIGRldGVjdGlvbiBhbmQgY3JlYXRlcyBsb2dpbiBzdGF0ZSBhdG9taWNhbGx5XG4gIG9hdXRoSW5zdGFuY2UuaW5pdGlhbGl6ZVNlc3Npb24oYXN5bmMgKGRhdGEsIGVycm9yKSA9PiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm5cblxuICAgIGlmIChkYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuU0lHTl9JTikge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbW1vbk9wdHMuZXZlbnRCdXMuZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgICAgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTixcbiAgICAgICAgICBpbmZvOiB7IC4uLmRhdGEsIGVycm9yIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudXNlcikge1xuICAgICAgICAvLyDkvb/nlKjlt7Lojrflj5bnmoQgdXNlciDkv6Hmga/liJvlu7ogTG9naW5TdGF0Ze+8jOWkjeeUqCBjcmVhdGVMb2dpblN0YXRlIOmAu+i+kVxuICAgICAgICAvLyDkvYbot7Pov4cgcmVmcmVzaCgpIOmBv+WFjeWGjeasoeivt+axgiBBUEkg5a+86Ie05q276ZSBXG4gICAgICAgIGF1dGhJbnN0YW5jZS5jcmVhdGVMb2dpblN0YXRlKHt9LCB7IHVzZXJJbmZvOiBkYXRhLnVzZXIgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZKSB7XG4gICAgICBjb21tb25PcHRzLmV2ZW50QnVzLmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwge1xuICAgICAgICBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuQklORF9JREVOVElUWSxcbiAgICAgICAgaW5mbzogeyAuLi5kYXRhLCBlcnJvciB9LFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHsgYXV0aEluc3RhbmNlLCBvYXV0aEluc3RhbmNlIH1cbn1cblxuY29uc3QgTkFNRVNQQUNFID0gJ2F1dGgnXG5cbi8qKlxuICog6K6h566X5Lik5Liq5a2X56ym5Liy5LmL6Ze055qE57yW6L6R6Led56a777yITGV2ZW5zaHRlaW4gZGlzdGFuY2XvvIlcbiAqIOeUqOS6juWcqOeUqOaIt+iwg+eUqOS4jeWtmOWcqOeahCBBdXRoIOaWueazleaXtu+8jOaOqOiNkOacgOebuOS8vOeahOaWueazleWQjVxuICovXG5mdW5jdGlvbiBsZXZlbnNodGVpbkRpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbWF0cml4OiBudW1iZXJbXVtdID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgIG1hdHJpeFtpXSA9IFtpXVxuICB9XG4gIGZvciAobGV0IGogPSAwOyBqIDw9IGIubGVuZ3RoOyBqKyspIHtcbiAgICBtYXRyaXhbMF1bal0gPSBqXG4gIH1cbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAxOyBqIDw9IGIubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGNvc3QgPSBhW2kgLSAxXS50b0xvd2VyQ2FzZSgpID09PSBiW2ogLSAxXS50b0xvd2VyQ2FzZSgpID8gMCA6IDFcbiAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBtYXRyaXhbaSAtIDFdW2pdICsgMSxcbiAgICAgICAgbWF0cml4W2ldW2ogLSAxXSArIDEsXG4gICAgICAgIG1hdHJpeFtpIC0gMV1baiAtIDFdICsgY29zdCxcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdHJpeFthLmxlbmd0aF1bYi5sZW5ndGhdXG59XG5cbi8qKlxuICog5Zyo5pa55rOV5YiX6KGo5Lit5p+l5om+5LiO55uu5qCH5ZCN56ew5pyA55u45Ly855qE5pa55rOVXG4gKiBAcmV0dXJucyDmnIDnm7jkvLznmoTmlrnms5XlkI3vvIzlpoLmnpzmsqHmnInotrPlpJ/nm7jkvLznmoTliJnov5Tlm54gbnVsbFxuICovXG5mdW5jdGlvbiBmaW5kU2ltaWxhck1ldGhvZCh0YXJnZXQ6IHN0cmluZywgbWV0aG9kczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgbGV0IGJlc3RNYXRjaDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IGJlc3REaXN0YW5jZSA9IEluZmluaXR5XG5cbiAgZm9yIChjb25zdCBtZXRob2Qgb2YgbWV0aG9kcykge1xuICAgIC8vIOi3s+i/h+engeacieaWueazleWSjOaehOmAoOWHveaVsFxuICAgIGlmIChtZXRob2Quc3RhcnRzV2l0aCgnXycpIHx8IG1ldGhvZCA9PT0gJ2NvbnN0cnVjdG9yJykgY29udGludWVcbiAgICBjb25zdCBkaXN0YW5jZSA9IGxldmVuc2h0ZWluRGlzdGFuY2UodGFyZ2V0LCBtZXRob2QpXG4gICAgaWYgKGRpc3RhbmNlIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICBiZXN0RGlzdGFuY2UgPSBkaXN0YW5jZVxuICAgICAgYmVzdE1hdGNoID0gbWV0aG9kXG4gICAgfVxuICB9XG4gIHJldHVybiBiZXN0TWF0Y2hcbn1cblxuY29uc3QgY29tcG9uZW50OiBJQ2xvdWRiYXNlQ29tcG9uZW50ID0ge1xuICBuYW1lOiBDT01QT05FTlRfTkFNRSxcbiAgbmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gIGVudGl0eShjb25maWc/OiBUSW5pdEF1dGhPcHRpb25zKSB7XG4gICAgY29uc3QgYXV0aCA9IGZ1bmN0aW9uIChjb25maWc/OiBUSW5pdEF1dGhPcHRpb25zKSB7XG4gICAgICBpZiAodGhpcy5hdXRoSW5zdGFuY2UgJiYgIWNvbmZpZykge1xuICAgICAgICAvLyBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnZXZlcnkgY2xvdWRiYXNlIGluc3RhbmNlIHNob3VsZCBoYXMgb25seSBvbmUgYXV0aCBvYmplY3QnKVxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgICAgIH1cblxuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHtcbiAgICAgICAgcmVnaW9uOiAnJyxcbiAgICAgICAgcGVyc2lzdGVuY2U6ICdsb2NhbCcsXG4gICAgICAgIGFwaVBhdGg6IEFVVEhfQVBJX1BSRUZJWCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYWRhcHRlciB9ID0gdGhpcy5wbGF0Zm9ybVxuICAgICAgLy8g5aaC5LiN5piO56Gu5oyH5a6acGVyc2lzdGVuY2XliJnkvJjlhYjlj5blkITlubPlj7BhZGFwdGVy6aaW6YCJ77yM5YW25qyhbG9jYWxTdG9yYWdlXG4gICAgICBjb25zdCBuZXdQZXJzaXN0ZW5jZSA9IGNvbmZpZy5wZXJzaXN0ZW5jZSB8fCBhZGFwdGVyLnByaW1hcnlTdG9yYWdlXG4gICAgICBpZiAobmV3UGVyc2lzdGVuY2UgJiYgbmV3UGVyc2lzdGVuY2UgIT09IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHsgcGVyc2lzdGVuY2U6IG5ld1BlcnNpc3RlbmNlIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXV0aEluc3RhbmNlLCBvYXV0aEluc3RhbmNlIH0gPSBnZW5lcmF0ZUF1dGhJbnN0YW5jZShcbiAgICAgICAge1xuICAgICAgICAgIHd4Q2xvdWQ6IHRoaXMuY29uZmlnLnd4Q2xvdWQsXG4gICAgICAgICAgc3RvcmFnZTogdGhpcy5jb25maWcuc3RvcmFnZSxcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgcGVyc2lzdGVuY2U6IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgICAgICAgIGkxOG46IHRoaXMuY29uZmlnLmkxOG4sXG4gICAgICAgICAgYWNjZXNzS2V5OiB0aGlzLmNvbmZpZy5hY2Nlc3NLZXksXG4gICAgICAgICAgdXNlV3hDbG91ZDogdGhpcy5jb25maWcudXNlV3hDbG91ZCxcbiAgICAgICAgICBzZGtWZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgICAgZGV0ZWN0U2Vzc2lvbkluVXJsOiB0aGlzLmNvbmZpZy5hdXRoPy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgICBjbGllbnRJZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICAgICAgYXBpT3JpZ2luOiB0aGlzLnJlcXVlc3QuZ2V0QmFzZUVuZFBvaW50KHRoaXMuY29uZmlnLmVuZFBvaW50TW9kZSB8fCAnQ0xPVURfQVBJJyksXG4gICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgICAgYXBwOiB0aGlzLFxuICAgICAgICAgIGRlYnVnOiB0aGlzLmNvbmZpZy5kZWJ1ZyxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgICB0aGlzLmF1dGhJbnN0YW5jZSA9IGF1dGhJbnN0YW5jZVxuXG4gICAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoUHJvdG8gPSBhdXRoLmNhbGwodGhpcywgY29uZmlnKVxuICAgIE9iamVjdC5hc3NpZ24oYXV0aCwgYXV0aFByb3RvKVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihhdXRoLCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXV0aFByb3RvKSlcblxuICAgIC8vIOWMheijhSBQcm94ee+8jOW9k+eUqOaIt+iwg+eUqOS4jeWtmOWcqOeahOaWueazleaXtuaPkOS+myBcIkRpZCB5b3UgbWVhbj9cIiDmj5DnpLpcbiAgICBjb25zdCBhdXRoV2l0aEhpbnQgPSB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnXG4gICAgICA/IG5ldyBQcm94eShhdXRoLCB7XG4gICAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKVxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOafpeaJvuacgOebuOS8vOeahOaWueazleWQjVxuICAgICAgICAgIGNvbnN0IGFsbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSlcbiAgICAgICAgICAgIC5jb25jYXQoT2JqZWN0LmtleXModGFyZ2V0KSlcbiAgICAgICAgICAgIC5maWx0ZXIoayA9PiB0eXBlb2YgdGFyZ2V0W2tdID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBmaW5kU2ltaWxhck1ldGhvZChwcm9wLCBhbGxLZXlzKVxuICAgICAgICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtDbG91ZEJhc2UgQXV0aF0gYXV0aC4ke3Byb3B9IGlzIG5vdCBhIGZ1bmN0aW9uLiBEaWQgeW91IG1lYW46IGF1dGguJHtzdWdnZXN0aW9ufSgpID9gKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICA6IGF1dGhcblxuICAgIHRoaXNbTkFNRVNQQUNFXSA9IGF1dGhXaXRoSGludFxuICAgIHJldHVybiBhdXRoV2l0aEhpbnRcbiAgfSxcbn1cblxudHJ5IHtcbiAgLy8g5bCd6K+V6Ieq5Yqo5rOo5YaM6Iez5YWo5bGA5Y+Y6YePY2xvdWRiYXNlXG4gIC8vIOatpOihjOS4uuWPquWcqOa1j+iniOWZqOeOr+Wig+S4i+acieaViFxuICBjbG91ZGJhc2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxufSBjYXRjaCAoZSkge31cblxuZXhwb3J0IHsgVXNlckluZm8sIEF1dGgsIFdlaXhpbkF1dGhQcm92aWRlciwgQ3VzdG9tQXV0aFByb3ZpZGVyLCBBbm9ueW1vdXNBdXRoUHJvdmlkZXIgfVxuLy8g5a+85Ye66ZSZ6K+v5YiG57G75p6a5Li+5ZKMIEF1dGhFcnJvcu+8jOaWueS+v+W8gOWPkeiAhei/m+ihjOmUmeivr+WIhuexu+WkhOeQhlxuZXhwb3J0IHsgQXV0aEVycm9yQ2F0ZWdvcnksIEF1dGhFcnJvciB9IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgnXG4vKipcbiAqIEBhcGkg5omL5Yqo5rOo5YaM6IezY2xvdWRiYXNlIGFwcFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBdXRoKGFwcDogUGljazxJQ2xvdWRiYXNlLCAncmVnaXN0ZXJDb21wb25lbnQnPikge1xuICB0cnkge1xuICAgIGFwcC5yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLndhcm4oZSlcbiAgfVxufVxuIl19
|
|
3016
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLDBDQVl5QjtBQUN6QixxQ0FBMEM7QUFDMUMseUNBVW9CO0FBQ3BCLGlDQUFxRztBQUNyRyx5Q0FNb0I7QUFtdUZLLG1HQXZ1RnZCLDhCQUFrQixPQXV1RnVCO0FBQUUsbUdBdHVGM0MsOEJBQWtCLE9Bc3VGMkM7QUFBRSxzR0FydUYvRCxpQ0FBcUIsT0FxdUYrRDtBQWx1RnRGLGtEQUE0QztBQWtDNUMsSUFBTSxTQUFTLEdBQUcsY0FBTSxPQUFBLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQWhFLENBQWdFLENBQUE7QUFtQ3hGLElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQTtBQWtCN0IsSUFBTSxrQkFBa0IsR0FBRyxVQUFBLFFBQVEsSUFBSSxPQUFBLFVBQUMsTUFBTTtJQUM1QyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQU0sQ0FBQyxtQkFBbUIsd0JBQU8sTUFBTSxLQUFFLFNBQVMsRUFBRSxnQ0FBd0IsQ0FBQyxpQkFBaUIsSUFBRyxDQUFBO0FBQ2pILENBQUMsRUFGc0MsQ0FFdEMsQ0FBQTtBQU9EO0lBdUJFLGNBQVksT0FBcUI7UUFDdkIsSUFBQSxLQUFLLEdBQW9CLE9BQU8sTUFBM0IsRUFBRSxhQUFhLEdBQUssT0FBTyxjQUFaLENBQVk7UUFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFFbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFJWSw2QkFBYyxHQUEzQjs7O2dCQUNFLElBQUksQ0FBQyxHQUFH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aUJBQWlCLE9BQUE7QUFBRSxrR0FBQSxTQUFTLE9BQUE7QUFJckMsU0FBZ0IsWUFBWSxDQUFDLEdBQTBDO0lBQ3JFLElBQUk7UUFDRixHQUFHLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUE7S0FDakM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7QUFDSCxDQUFDO0FBTkQsb0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElDbG91ZGJhc2UsIElDbG91ZGJhc2VDb25maWcsIElDbG91ZGJhc2VQbGF0Zm9ybUluZm8gfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ2FjaGUgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzL2NhY2hlJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlUmVxdWVzdCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvcmVxdWVzdCdcbmltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZUF1dGhDb25maWcsIElVc2VyLCBJTG9naW5TdGF0ZSB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvYXV0aCdcbmltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZUNvbXBvbmVudCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY29tcG9uZW50J1xuaW1wb3J0IHR5cGUgeyBBdXRoT3B0aW9ucywgQ3JlZGVudGlhbHMgfSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuaW1wb3J0IHtcbiAgQ2xvdWRiYXNlT0F1dGgsXG4gIEFVVEhfQVBJX1BSRUZJWCxcbiAgTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLFxuICBFVkVOVFMsXG4gIEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLFxuICBPQVVUSF9UWVBFLFxuICB3ZUFwcEp3dERlY29kZUFsbCxcbiAgQXV0aEVycm9yLFxuICBBdXRoRXJyb3JDYXRlZ29yeSxcbiAgYXV0aE1vZGVscyxcbiAgREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRSxcbn0gZnJvbSAnQGNsb3VkYmFzZS9vYXV0aCdcbmltcG9ydCB7IHVzZUF1dGhBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyJ1xuaW1wb3J0IHtcbiAgcHJpbnRXYXJuLFxuICB0aHJvd0Vycm9yLFxuICBFUlJPUlMsXG4gIENPTU1VTklUWV9TSVRFX1VSTCxcbiAgY2F0Y2hFcnJvcnNEZWNvcmF0b3IsXG4gIENsb3VkYmFzZUV2ZW50RW1pdHRlcixcbiAgQ2xvdWRiYXNlQ2FjaGUsXG4gIGFkYXB0ZXJGb3JXeE1wLFxuICB1c2VEZWZhdWx0QWRhcHRlcixcbn0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBzYXZlVG9Ccm93c2VyU2Vzc2lvbiwgZ2V0QnJvd3NlclNlc3Npb24sIHJlbW92ZUJyb3dzZXJTZXNzaW9uLCBhZGRVcmxTZWFyY2ggfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHtcbiAgQXV0aFYxQ29tcGF0LFxuICBXZWl4aW5BdXRoUHJvdmlkZXIsXG4gIEN1c3RvbUF1dGhQcm92aWRlcixcbiAgQW5vbnltb3VzQXV0aFByb3ZpZGVyLFxuICBhcHBseVVzZXJWMUNvbXBhdCxcbn0gZnJvbSAnLi92MS1jb21wYXQnXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuaW1wb3J0IHtcbiAgQ29tbW9uUmVzLFxuICBEZWxldGVNZVJlcSxcbiAgR2V0Q2xhaW1zUmVzLFxuICBHZXRVc2VySWRlbnRpdGllc1JlcyxcbiAgR2V0VXNlclJlcyxcbiAgTGlua0lkZW50aXR5UmVxLFxuICBMaW5rSWRlbnRpdHlSZXMsXG4gIE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2ssXG4gIFJlYXV0aGVudGljYXRlUmVzLFxuICBSZXNlbmRSZXEsXG4gIFJlc2VuZFJlcyxcbiAgUmVzZXRQYXNzd29yZEZvckVtYWlsUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yT2xkUmVxLFxuICBTZXRTZXNzaW9uUmVxLFxuICBTaWduSW5Bbm9ueW1vdXNseVJlcSxcbiAgU2lnbkluT0F1dGhSZXMsXG4gIFNpZ25JblJlcyxcbiAgU2lnbkluV2l0aElkVG9rZW5SZXEsXG4gIFNpZ25JbldpdGhPQXV0aFJlcSxcbiAgU2lnbkluV2l0aE90cFJlcSxcbiAgU2lnbkluV2l0aE90cFJlcyxcbiAgU2lnbkluV2l0aFBhc3N3b3JkUmVxLFxuICBTaWduVXBSZXMsXG4gIFVubGlua0lkZW50aXR5UmVxLFxuICBVcGRhdGVVc2VyQXR0cmlidXRlcyxcbiAgVXBkYXRlVXNlclJlcSxcbiAgVXBkYXRlVXNlcldpdGhWZXJpZmljYXRpb25SZXMsXG4gIFZlcmlmeU9BdXRoUmVxLFxuICBWZXJpZnlPQXV0aFJlcyxcbiAgVmVyaWZ5T3RwUmVxLFxufSBmcm9tICcuL3R5cGUnXG5cbmNvbnN0IGlzQnJvd3NlciA9ICgpID0+IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcblxuZXhwb3J0IHR5cGUge1xuICBTaWduSW5SZXMsXG4gIEdldFVzZXJSZXMsXG4gIENvbW1vblJlcyxcbiAgU2lnbkluV2l0aE90cFJlcyxcbiAgU2lnbkluT0F1dGhSZXMsXG4gIEdldENsYWltc1JlcyxcbiAgUmVzZXRQYXNzd29yZEZvckVtYWlsUmVzLFxuICBHZXRVc2VySWRlbnRpdGllc1JlcyxcbiAgTGlua0lkZW50aXR5UmVzLFxuICBSZWF1dGhlbnRpY2F0ZVJlcyxcbiAgUmVzZW5kUmVzLFxuICBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcyxcbiAgT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjayxcbiAgU2lnbkluV2l0aFBhc3N3b3JkUmVxLFxuICBTaWduSW5XaXRoSWRUb2tlblJlcSxcbiAgU2lnbkluV2l0aE9BdXRoUmVxLFxuICBWZXJpZnlPQXV0aFJlcSxcbiAgVmVyaWZ5T3RwUmVxLFxuICBMaW5rSWRlbnRpdHlSZXEsXG4gIFVubGlua0lkZW50aXR5UmVxLFxuICBVcGRhdGVVc2VyUmVxLFxuICBTaWduSW5XaXRoT3RwUmVxLFxuICBSZXNldFBhc3N3b3JkRm9yT2xkUmVxLFxuICBSZXNlbmRSZXEsXG4gIFNldFNlc3Npb25SZXEsXG4gIERlbGV0ZU1lUmVxLFxuICBTaWduVXBSZXMsXG59IGZyb20gJy4vdHlwZSdcblxuZGVjbGFyZSBjb25zdCBjbG91ZGJhc2U6IElDbG91ZGJhc2VcbmRlY2xhcmUgY29uc3Qgd3g6IGFueVxuXG5jb25zdCBDT01QT05FTlRfTkFNRSA9ICdhdXRoJ1xuXG5pbnRlcmZhY2UgVXNlckluZm8ge1xuICB1aWQ/OiBzdHJpbmdcbiAgZ2VuZGVyPzogc3RyaW5nXG4gIHBpY3R1cmU/OiBzdHJpbmdcbiAgZW1haWw/OiBzdHJpbmdcbiAgZW1haWxfdmVyaWZpZWQ/OiBib29sZWFuXG4gIHBob25lX251bWJlcj86IHN0cmluZ1xuICB1c2VybmFtZT86IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nXG4gIGJpcnRoZGF0ZT86IHN0cmluZ1xuICB6b25laW5mbz86IHN0cmluZ1xuICBsb2NhbGU/OiBzdHJpbmdcbiAgc3ViPzogc3RyaW5nXG4gIGNyZWF0ZWRfZnJvbT86IHN0cmluZ1xufVxuXG5jb25zdCBvbkNyZWRlbnRpYWxzRXJyb3IgPSBldmVudEJ1cyA9PiAocGFyYW1zKSA9PiB7XG4gIGV2ZW50QnVzLmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIHsgLi4ucGFyYW1zLCBldmVudFR5cGU6IExPR0lOX1NUQVRFX0NIQU5HRURfVFlQRS5DUkVERU5USUFMU19FUlJPUiB9KVxufVxuXG5pbnRlcmZhY2UgSVVzZXJPcHRpb25zIHtcbiAgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuICBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aFxufVxuXG5leHBvcnQgY2xhc3MgVXNlciBpbXBsZW1lbnRzIElVc2VyIHtcbiAgcHVibGljIHVpZD86IHN0cmluZ1xuICBwdWJsaWMgZ2VuZGVyPzogc3RyaW5nXG4gIHB1YmxpYyBwaWN0dXJlPzogc3RyaW5nXG4gIHB1YmxpYyBlbWFpbD86IHN0cmluZ1xuICBwdWJsaWMgZW1haWxWZXJpZmllZD86IGJvb2xlYW5cbiAgcHVibGljIHBob25lTnVtYmVyPzogc3RyaW5nXG4gIHB1YmxpYyB1c2VybmFtZT86IHN0cmluZyAvLyDnlKjmiLflkI3np7DvvIzplb/luqYgNS0yNCDkvY3vvIzmlK/mjIHlrZfnrKbkuK3oi7HmlofjgIHmlbDlrZfjgIHnibnmrorlrZfnrKbvvIjku4XmlK/mjIFfLe+8ie+8jOS4jeaUr+aMgeS4reaWh1xuICBwdWJsaWMgbmFtZT86IHN0cmluZ1xuICBwdWJsaWMgcHJvdmlkZXJzPzoge1xuICAgIGlkPzogc3RyaW5nXG4gICAgcHJvdmlkZXJVc2VySWQ/OiBzdHJpbmdcbiAgICBuYW1lPzogc3RyaW5nXG4gIH1bXVxuICBwdWJsaWMgYmlydGhkYXRlPzogc3RyaW5nXG4gIHB1YmxpYyB6b25laW5mbz86IHN0cmluZ1xuICBwdWJsaWMgbG9jYWxlPzogc3RyaW5nXG4gIHB1YmxpYyBzdWI/OiBzdHJpbmdcbiAgcHVibGljIGNyZWF0ZWRGcm9tPzogc3RyaW5nXG5cbiAgcHJpdmF0ZSBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIHByaXZhdGUgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGggLy8gQ2xvdWRiYXNlT0F1dGgg57G75Z6LXG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSVVzZXJPcHRpb25zKSB7XG4gICAgY29uc3QgeyBjYWNoZSwgb2F1dGhJbnN0YW5jZSB9ID0gb3B0aW9uc1xuICAgIHRoaXMuY2FjaGUgPSBjYWNoZVxuICAgIHRoaXMub2F1dGhJbnN0YW5jZSA9IG9hdXRoSW5zdGFuY2VcblxuICAgIHRoaXMuc2V0VXNlckluZm8oKVxuICB9XG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnlKjmiLfkv6Hmga8t5ZCM5q2lXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2tMb2NhbEluZm8oKSB7XG4gICAgdGhpcy51aWQgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3VpZCcpIGFzIHN0cmluZ1xuICAgIHRoaXMuZ2VuZGVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdnZW5kZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnBpY3R1cmUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3BpY3R1cmUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmVtYWlsID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbCcpIGFzIHN0cmluZ1xuICAgIHRoaXMuZW1haWxWZXJpZmllZCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZW1haWxfdmVyaWZpZWQnKSBhcyBib29sZWFuXG4gICAgdGhpcy5waG9uZU51bWJlciA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncGhvbmVfbnVtYmVyJykgYXMgc3RyaW5nXG4gICAgdGhpcy51c2VybmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygndXNlcm5hbWUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ25hbWUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmJpcnRoZGF0ZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnYmlydGhkYXRlJykgYXMgc3RyaW5nXG4gICAgdGhpcy56b25laW5mbyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnem9uZWluZm8nKSBhcyBzdHJpbmdcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbG9jYWxlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5zdWIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3N1YicpIGFzIHN0cmluZ1xuICAgIHRoaXMuY3JlYXRlZEZyb20gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2NyZWF0ZWRfZnJvbScpIGFzIHN0cmluZ1xuICAgIHRoaXMucHJvdmlkZXJzID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwcm92aWRlcnMnKSBhcyBhbnlcbiAgfVxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55So5oi35L+h5oGvLeW8guatpVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxJbmZvQXN5bmMoKSB7XG4gICAgdGhpcy51aWQgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygndWlkJylcbiAgICB0aGlzLmdlbmRlciA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCdnZW5kZXInKVxuICAgIHRoaXMucGljdHVyZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncGljdHVyZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuZW1haWwgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygnZW1haWwnKVxuICAgIHRoaXMuZW1haWxWZXJpZmllZCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZW1haWxfdmVyaWZpZWQnKSBhcyBib29sZWFuXG4gICAgdGhpcy5waG9uZU51bWJlciA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncGhvbmVfbnVtYmVyJykgYXMgc3RyaW5nXG4gICAgdGhpcy51c2VybmFtZSA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCd1c2VybmFtZScpXG4gICAgdGhpcy5uYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCduYW1lJykgYXMgc3RyaW5nXG4gICAgdGhpcy5iaXJ0aGRhdGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2JpcnRoZGF0ZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuem9uZWluZm8gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3pvbmVpbmZvJykgYXMgc3RyaW5nXG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2xvY2FsZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuc3ViID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdzdWInKSBhcyBzdHJpbmdcbiAgICB0aGlzLmNyZWF0ZWRGcm9tID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdjcmVhdGVkX2Zyb20nKSBhcyBzdHJpbmdcbiAgICB0aGlzLnByb3ZpZGVycyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncHJvdmlkZXJzJykgYXMgYW55XG4gIH1cblxuICAvKipcbiAgICog5pu05paw55So5oi35L+h5oGvXG4gICAqIEBwYXJhbSB1c2VySW5mb1xuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+abtOaWsOeUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnVwZGF0ZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g55So5oi35L+h5oGv5Lit5piv5ZCm5YyF5ZCr6Z2e5rOV5YC8JyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyB1cGRhdGUodXNlckluZm86IGF1dGhNb2RlbHMuVXNlclByb2ZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjb25zdCB7IG5hbWUsIGdlbmRlciwgYXZhdGFyVXJsLCBwcm92aW5jZSwgY291bnRyeSwgY2l0eSB9ID0gdXNlckluZm9cbiAgICBjb25zdCBuZXdVc2VySW5mbyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldFVzZXJQcm9maWxlKHsgLi4udXNlckluZm8gfSlcblxuICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyhuZXdVc2VySW5mbylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtczogYXV0aE1vZGVscy5Nb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVwZGF0ZVVzZXJCYXNpY0luZm8oeyAuLi5wYXJhbXMgfSlcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKVxuICB9XG5cbiAgLyoqXG4gICAqIOabtOaWsOWvhueggVxuICAgKiBAcGFyYW0gbmV3UGFzc3dvcmRcbiAgICogQHBhcmFtIG9sZFBhc3N3b3JkXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw5a+G56CB5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlUGFzc3dvcmQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMyAtIOaWsOWvhueggeS4reaYr+WQpuWMheWQq+mdnuazleWtl+espicsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgdXBkYXRlUGFzc3dvcmQobmV3UGFzc3dvcmQ6IHN0cmluZywgb2xkUGFzc3dvcmQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51cGRhdGVQYXNzd29yZEJ5T2xkKHtcbiAgICAgIG9sZF9wYXNzd29yZDogb2xkUGFzc3dvcmQsXG4gICAgICBuZXdfcGFzc3dvcmQ6IG5ld1Bhc3N3b3JkLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICog5pu05paw55So5oi35ZCNXG4gICAqIEBwYXJhbSB1c2VybmFtZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+abtOaWsOeUqOaIt+WQjeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnVwZGF0ZVVzZXJuYW1lKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobnlKjmiLflkI3lr4bnoIHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIHVwZGF0ZVVzZXJuYW1lKHVzZXJuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHVzZXJuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICd1c2VybmFtZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51cGRhdGUoe1xuICAgICAgdXNlcm5hbWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDliLfmlrDmnKzlnLDnlKjmiLfkv6Hmga/jgILlvZPnlKjmiLflnKjlhbbku5blrqLmiLfnq6/mm7TmlrDnlKjmiLfkv6Hmga/kuYvlkI7vvIzlj6/ku6XosIPnlKjmraTmjqXlj6PlkIzmraXmm7TmlrDkuYvlkI7nmoTkv6Hmga/jgIJcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfliLfmlrDmnKzlnLDnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci5yZWZyZXNoKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoKHBhcmFtcz86IHsgdmVyc2lvbj86IHN0cmluZzsgcXVlcnk/OiBhbnkgfSk6IFByb21pc2U8YXV0aE1vZGVscy5Vc2VySW5mbz4ge1xuICAgIGNvbnN0IG5ld1VzZXJJbmZvID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VXNlckluZm8ocGFyYW1zKVxuICAgIGlmICgobmV3VXNlckluZm8gYXMgYW55KS5jb2RlID09PSAnSU5WQUxJRF9BQ0NFU1NfVE9LRU4nKSB7XG4gICAgICB0aGlzLnNldExvY2FsVXNlckluZm8oe30pXG4gICAgICB0aHJvdyBuZXdVc2VySW5mb1xuICAgIH1cbiAgICB0aGlzLnNldExvY2FsVXNlckluZm8obmV3VXNlckluZm8pXG4gICAgcmV0dXJuIG5ld1VzZXJJbmZvXG4gIH1cblxuICBwdWJsaWMgZ2V0TG9jYWxVc2VySW5mbyhrZXk/OiBzdHJpbmcpOiBzdHJpbmcgfCBib29sZWFuIHwgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgY29uc3QgdXNlckluZm8gPSB0aGlzLmNhY2hlLmdldFN0b3JlKHVzZXJJbmZvS2V5KVxuXG4gICAgaWYgKCFrZXkpIHJldHVybiB1c2VySW5mbyB8fCB7fVxuXG4gICAgcmV0dXJuIHVzZXJJbmZvW2tleV1cbiAgfVxuXG4gIHB1YmxpYyBzZXRMb2NhbFVzZXJJbmZvKHVzZXJJbmZvOiBhbnkpIHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICB0aGlzLmNhY2hlLnNldFN0b3JlKHVzZXJJbmZvS2V5LCB1c2VySW5mbylcbiAgICB0aGlzLnNldFVzZXJJbmZvKClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TG9jYWxVc2VySW5mb0FzeW5jKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuY2FjaGUuZ2V0U3RvcmVBc3luYyh1c2VySW5mb0tleSlcbiAgICByZXR1cm4gdXNlckluZm9ba2V5XVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRVc2VySW5mbygpIHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuY2FjaGUuZ2V0U3RvcmUodXNlckluZm9LZXkpXG4gICAgO1tcbiAgICAgICd1aWQnLFxuICAgICAgJ2VtYWlsJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdnZW5kZXInLFxuICAgICAgJ3BpY3R1cmUnLFxuICAgICAgJ2VtYWlsX3ZlcmlmaWVkJyxcbiAgICAgICdwaG9uZV9udW1iZXInLFxuICAgICAgJ2JpcnRoZGF0ZScsXG4gICAgICAnem9uZWluZm8nLFxuICAgICAgJ2xvY2FsZScsXG4gICAgICAnc3ViJyxcbiAgICAgICdjcmVhdGVkX2Zyb20nLFxuICAgICAgJ3Byb3ZpZGVycycsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgJ2NyZWF0ZWRfYXQnLFxuICAgIF0uZm9yRWFjaCgoaW5mb0tleSkgPT4ge1xuICAgICAgdGhpc1tpbmZvS2V5XSA9IHVzZXJJbmZvW2luZm9LZXldXG4gICAgfSlcbiAgfVxufVxuXG4vLyDlupTnlKggdjEg5YW85a655pa55rOV5YiwIFVzZXIg57G7XG5hcHBseVVzZXJWMUNvbXBhdChVc2VyKVxuXG5pbnRlcmZhY2UgSUxvZ2luU3RhdGVPcHRpb25zIGV4dGVuZHMgSVVzZXJPcHRpb25zIHtcbiAgZW52SWQ6IHN0cmluZ1xufVxuZXhwb3J0IGNsYXNzIExvZ2luU3RhdGUgaW1wbGVtZW50cyBJTG9naW5TdGF0ZSB7XG4gIHB1YmxpYyB1c2VyOiBVc2VyXG4gIHB1YmxpYyBvYXV0aExvZ2luU3RhdGU6IGFueVxuXG4gIHByaXZhdGUgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGhcbiAgcHJpdmF0ZSBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSUxvZ2luU3RhdGVPcHRpb25zKSB7XG4gICAgY29uc3QgeyBlbnZJZCwgY2FjaGUsIG9hdXRoSW5zdGFuY2UgfSA9IG9wdGlvbnNcbiAgICBpZiAoIWVudklkKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ2VudklkIGlzIG5vdCBkZWZpbmVkJylcbiAgICB9XG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy51c2VyID0gbmV3IFVzZXIoe1xuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICBvYXV0aEluc3RhbmNlLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgY2hlY2tMb2NhbFN0YXRlKCkge1xuICAgIHRoaXMub2F1dGhMb2dpblN0YXRlID0gdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmhhc0xvZ2luU3RhdGVTeW5jKClcbiAgICB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm8oKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxTdGF0ZUFzeW5jKCkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5nZXRMb2dpblN0YXRlKClcbiAgICBhd2FpdCB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm9Bc3luYygpXG4gIH1cbn1cblxuaW50ZXJmYWNlIElBdXRoQ29uZmlnIGV4dGVuZHMgSUNsb3VkYmFzZUF1dGhDb25maWcge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIHJlcXVlc3Q/OiBJQ2xvdWRiYXNlUmVxdWVzdFxuICBydW50aW1lPzogc3RyaW5nXG59XG5cbmNsYXNzIEF1dGggZXh0ZW5kcyBBdXRoVjFDb21wYXQge1xuICByZWFkb25seSBjb25maWc6IElBdXRoQ29uZmlnXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG4gIHJlYWRvbmx5IGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IE1hcDxzdHJpbmcsIFNldDxPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrPj4gPSBuZXcgTWFwKClcbiAgcHJpdmF0ZSBoYXNMaXN0ZW5lclNldFVwID0gZmFsc2VcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IElBdXRoQ29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gY29uZmlnLm9hdXRoSW5zdGFuY2VcbiAgICB0aGlzLmNhY2hlID0gY29uZmlnLmNhY2hlXG4gICAgdGhpcy5pbml0KClcbiAgICB0aGlzLnNldEFjY2Vzc0tleSgpXG4gIH1cblxuICAvLyA9PT09PT09PT09IG5ldyBhdXRoIGFwaSBtZXRob2RzIG1lcmdlZCBiZWxvdyA9PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOWMv+WQjeeZu+W9leOAguaXoOmcgOeUqOaIt+azqOWGjOWNs+WPr+S9v+eUqOW6lOeUqOWKn+iDveOAglxuICAgKlxuICAgKiAqKuWJjee9ruadoeS7tioq77ya6ZyA6KaB5Zyo5LqR5byA5Y+R5o6n5Yi25Y+w5byA5ZCv44CM5Yy/5ZCN55m75b2V44CN44CCXG4gICAqXG4gICAqICoq6YeN6KaBKirvvJrljL/lkI3nmbvlvZXlv4XpobvlnKjkvb/nlKggd2F0Y2goKSDnrYnlrp7ml7bmlbDmja7lupPlip/og73kuYvliY3lrozmiJDvvIxcbiAgICog5ZCm5YiZIFdlYlNvY2tldCDov57mjqXkvJrlm6DnvLrlsJHorqTor4Hkv6Hmga/ogIzlpLHotKXjgIJcbiAgICpcbiAgICogQHNlZSBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbmluYW5vbnltb3VzbHlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBhdXRoLnNpZ25JbkFub255bW91c2x5KCk7XG4gICAqIGlmICghZXJyb3IpIHtcbiAgICogICBjb25zb2xlLmxvZygn55So5oi3SUQ6JywgZGF0YS51c2VyLmlkLCAn5piv5ZCm5Yy/5ZCNOicsIGRhdGEudXNlci5pc19hbm9ueW1vdXMpO1xuICAgKiAgIC8vIOeOsOWcqOWPr+S7peS9v+eUqCB3YXRjaCgpIOetieWunuaXtuWKn+iDvVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIOWPr+mAieWPguaVsFxuICAgKiBAcmV0dXJucyDnmbvlvZXnu5PmnpzvvIzmiJDlip/ml7YgZGF0YSDljIXlkKsgdXNlciDlkowgc2Vzc2lvblxuICAgKi9cbiAgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkocGFyYW1zOiBTaWduSW5Bbm9ueW1vdXNseVJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KHBhcmFtcylcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBhdXRoRXJyb3IgPSBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NpZ25JbkFub255bW91c2x5JyB9KVxuICAgICAgLy8g5Yy/5ZCN55m75b2V5aSx6LSl5pe25o+Q5L6b5piO56Gu5oyH5byVXG4gICAgICBpZiAoYXV0aEVycm9yLmNhdGVnb3J5ID09PSBBdXRoRXJyb3JDYXRlZ29yeS5QUk9WSURFUl9OT1RfRU5BQkxFRCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGF1dGhFcnJvci5oZWxwTWVzc2FnZSlcbiAgICAgICAgY29uc29sZS5lcnJvcignW0Nsb3VkQmFzZSBBdXRoXSDmj5DnpLrvvJrljL/lkI3nmbvlvZXpnIDopoHlnKjmjqfliLblj7DlvIDlkK/jgIzljL/lkI3nmbvlvZXjgI3jgIJcXG4nXG4gICAgICAgICAgKyAnICDlpoLmnpzmgqjpnIDopoHkvb/nlKjnlKjmiLflkI3lr4bnoIHnmbvlvZXvvIzor7fmlLnnlKggYXV0aC5zaWduSW5XaXRoUGFzc3dvcmQoeyB1c2VybmFtZSwgcGFzc3dvcmQgfSnjgIJcXG4nXG4gICAgICAgICAgKyAnICDkuI3opoHlnKjljL/lkI3nmbvlvZXlpLHotKXlkI7oh6rliqjlm57pgIDliLDlr4bnoIHnmbvlvZXvvIzov5nkuKTnp43mlrnlvI/nmoTkvb/nlKjlnLrmma/kuI3lkIzjgIInLClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW0Nsb3VkQmFzZSBBdXRoXSBzaWduSW5Bbm9ueW1vdXNseSDlpLHotKUgWyR7YXV0aEVycm9yLmNhdGVnb3J5fV06ICR7YXV0aEVycm9yLm1lc3NhZ2V9YClcbiAgICAgICAgaWYgKGF1dGhFcnJvci5sb2dpbk1ldGhvZEhpbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYXV0aEVycm9yLmxvZ2luTWV0aG9kSGludClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBhdXRoRXJyb3IgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbnVwXG4gICAqIFNpZ24gdXAgYSBuZXcgdXNlciB3aXRoIGVtYWlsIG9yIHBob25lIHVzaW5nIGEgb25lLXRpbWUgcGFzc3dvcmQgKE9UUCkuIElmIHRoZSBhY2NvdW50IG5vdCBleGlzdCwgYSBuZXcgYWNjb3VudCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduVXBSZXM+XG4gICAqL1xuICBhc3luYyBzaWduVXAocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25VcFJlcXVlc3QgJiB7IHBob25lPzogc3RyaW5nIH0pOiBQcm9taXNlPFNpZ25VcFJlcz4ge1xuICAgIGlmIChwYXJhbXMucGhvbmVfbnVtYmVyIHx8IHBhcmFtcy52ZXJpZmljYXRpb25fY29kZSB8fCBwYXJhbXMudmVyaWZpY2F0aW9uX3Rva2VuIHx8IHBhcmFtcy5wcm92aWRlcl90b2tlbikge1xuICAgICAgaWYgKHBhcmFtcy5waG9uZV9udW1iZXIpIHtcbiAgICAgICAgcGFyYW1zLnBob25lX251bWJlciA9IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lX251bWJlcilcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcChwYXJhbXMpXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKCkgYXMgYW55XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHBhcmFtcy5lbWFpbCA/IHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9LClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHsgdG9rZW4sIG1lc3NhZ2VJZCA9IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkIH0pOiBQcm9taXNlPFNpZ25JblJlcz4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8g56ys5LiJ5q2l77ya5b6F55So5oi36L6T5YWl5a6M6aqM6K+B56CB5LmL5ZCO77yM6aqM6K+B55+t5L+h6aqM6K+B56CBXG4gICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblRva2VuUmVzID0gYXdhaXQgdGhpcy52ZXJpZnkoe1xuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9pZDogbWVzc2FnZUlkIHx8IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB0b2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAvLyDnrKzlm5vmraXvvJrms6jlhozlubbnmbvlvZXmiJbnm7TmjqXnmbvlvZVcbiAgICAgICAgICAgICAgLy8g5aaC5p6c55So5oi35bey57uP5a2Y5Zyo77yM55u05o6l55m75b2VXG4gICAgICAgICAgICAgIGlmICh2ZXJpZmljYXRpb25JbmZvLmlzX3VzZXIpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNpZ25Jbih7XG4gICAgICAgICAgICAgICAgICB1c2VybmFtZTogcGFyYW1zLmVtYWlsIHx8IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSxcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW5SZXMudmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c55So5oi35LiN5a2Y5Zyo77yM5rOo5YaM55So5oi3XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGFyYW1zKSlcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YS5lbWFpbFxuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBob25lXG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAoe1xuICAgICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICAgIC4uLihwYXJhbXMuZW1haWwgPyB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfSA6IHsgcGhvbmVfbnVtYmVyOiB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfSksXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuUmVzLnZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB0b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NpZ25VcCcgfSkgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnc2lnblVwJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWdub3V0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF1dGguc2lnbk91dCgpO1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBzaWduT3V0KHBhcmFtcz86IGF1dGhNb2RlbHMuU2lnbm91dFJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLlNpZ25vdXRSZXNwb25zZSAmIHsgZGF0YTogT2JqZWN0OyBlcnJvcjogQXV0aEVycm9yIH0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduT3V0KHBhcmFtcylcbiAgICAgIGF3YWl0IHRoaXMuY2FjaGUucmVtb3ZlU3RvcmVBc3luYyh1c2VySW5mb0tleSlcbiAgICAgIHRoaXMuc2V0QWNjZXNzS2V5KClcblxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnRUeXBlOiBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTl9PVVQgfSlcblxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX09VVCB9KVxuXG4gICAgICAvLyByZXPov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4ucmVzLCBkYXRhOiB7fSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnc2lnbk91dCcgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtb25hdXRoc3RhdGVjaGFuZ2VcbiAgICogUmVjZWl2ZSBhIG5vdGlmaWNhdGlvbiBldmVyeSB0aW1lIGFuIGF1dGggZXZlbnQgaGFwcGVucy5cbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIFByb21pc2U8eyBkYXRhOiB7IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIH0sIGVycm9yOiBFcnJvciB8IG51bGwgfT5cbiAgICovXG4gIG9uQXV0aFN0YXRlQ2hhbmdlKGNhbGxiYWNrOiBPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVyU2V0VXApIHtcbiAgICAgIHRoaXMuc2V0dXBMaXN0ZW5lcnMoKVxuICAgICAgdGhpcy5oYXNMaXN0ZW5lclNldFVwID0gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IGlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNilcblxuICAgIGlmICghdGhpcy5saXN0ZW5lcnMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGlkLCBuZXcgU2V0KCkpXG4gICAgfVxuXG4gICAgdGhpcy5saXN0ZW5lcnMuZ2V0KGlkKSEuYWRkKGNhbGxiYWNrKVxuXG4gICAgLy8g6L+U5ZueIFN1YnNjcmlwdGlvbiDlr7nosaFcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICBpZCxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgdW5zdWJzY3JpYmU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5saXN0ZW5lcnMuZ2V0KGlkKVxuICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgICAgY2FsbGJhY2tzLmRlbGV0ZShjYWxsYmFjaylcbiAgICAgICAgICBpZiAoY2FsbGJhY2tzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLmRlbGV0ZShpZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHsgc3Vic2NyaXB0aW9uIH0sXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRocGFzc3dvcmRcbiAgICogTG9nIGluIGFuIGV4aXN0aW5nIHVzZXIgd2l0aCBhbiBlbWFpbCBhbmQgcGFzc3dvcmQgb3IgcGhvbmUgYW5kIHBhc3N3b3JkIG9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhQYXNzd29yZChwYXJhbXM6IFNpZ25JbldpdGhQYXNzd29yZFJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnVzZXJuYW1lL2VtYWlsL3Bob25l5LiJ6YCJ5LiA77yMcGFzc3dvcmTlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVBdExlYXN0T25lKFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIFtbJ3VzZXJuYW1lJ10sIFsnZW1haWwnXSwgWydwaG9uZSddXSxcbiAgICAgICAgJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIHVzZXJuYW1lLCBlbWFpbCwgb3IgcGhvbmUnLFxuICAgICAgKVxuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcGFzc3dvcmQ6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQYXNzd29yZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMuc2lnbkluKHtcbiAgICAgICAgdXNlcm5hbWU6IHBhcmFtcy51c2VybmFtZSB8fCBwYXJhbXMuZW1haWwgfHwgdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpLFxuICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3N3b3JkLFxuICAgICAgICAuLi4ocGFyYW1zLmlzX2VuY3J5cHQgPyB7IGlzRW5jcnlwdDogdHJ1ZSwgdmVyc2lvbjogJ3YyJyB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBhdXRoRXJyb3IgPSBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NpZ25JbldpdGhQYXNzd29yZCcgfSlcbiAgICAgIC8vIOagueaNrumUmeivr+WIhuexu+i+k+WHuuWvueW6lOeahOWPr+aTjeS9nOaAp+aMh+W8lVxuICAgICAgaWYgKGF1dGhFcnJvci5jYXRlZ29yeSA9PT0gQXV0aEVycm9yQ2F0ZWdvcnkuUFJPVklERVJfTk9UX0VOQUJMRUQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihhdXRoRXJyb3IuaGVscE1lc3NhZ2UpXG4gICAgICB9IGVsc2UgaWYgKGF1dGhFcnJvci5jYXRlZ29yeSA9PT0gQXV0aEVycm9yQ2F0ZWdvcnkuSU5WQUxJRF9DUkVERU5USUFMUykge1xuICAgICAgICBjb25zb2xlLndhcm4oYXV0aEVycm9yLmhlbHBNZXNzYWdlKVxuICAgICAgfSBlbHNlIGlmIChhdXRoRXJyb3IuY2F0ZWdvcnkgPT09IEF1dGhFcnJvckNhdGVnb3J5LlVTRVJfTk9UX0ZPVU5EKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihhdXRoRXJyb3IuaGVscE1lc3NhZ2UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtDbG91ZEJhc2UgQXV0aF0gc2lnbkluV2l0aFBhc3N3b3JkIOWksei0pSBbJHthdXRoRXJyb3IuY2F0ZWdvcnl9XTogJHthdXRoRXJyb3IubWVzc2FnZX1gKVxuICAgICAgfVxuICAgICAgaWYgKGF1dGhFcnJvci5sb2dpbk1ldGhvZEhpbnQpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGF1dGhFcnJvci5sb2dpbk1ldGhvZEhpbnQpXG4gICAgICB9XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IGF1dGhFcnJvciB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRoaWR0b2tlblxuICAgKiDnrKzkuInmlrnlubPlj7DnmbvlvZXjgILlpoLmnpznlKjmiLfkuI3lrZjlnKjvvIzkvJrmoLnmja7kupHlvIDlj5HlubPlj7At55m75b2V5pa55byP5Lit5a+55bqU6Lqr5Lu95rqQ55qE55m75b2V5qih5byP6YWN572u77yM5Yik5pat5piv5ZCm6Ieq5Yqo5rOo5YaMXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoSWRUb2tlbihwYXJhbXM6IFNpZ25JbldpdGhJZFRva2VuUmVxKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yadG9rZW7lv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHRva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnVG9rZW4gaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLnNpZ25JbldpdGhQcm92aWRlcih7XG4gICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwYXJhbXMudG9rZW4sXG4gICAgICB9KVxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdzaWduSW5XaXRoSWRUb2tlbicgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbmlud2l0aG90cFxuICAgKiBMb2cgaW4gYSB1c2VyIHVzaW5nIGEgb25lLXRpbWUgcGFzc3dvcmQgKE9UUCkuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5XaXRoT3RwUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aE90cChwYXJhbXM6IFNpZ25JbldpdGhPdHBSZXEpOiBQcm9taXNlPFNpZ25JbldpdGhPdHBSZXM+IHtcbiAgICBpZiAoIXBhcmFtcy5vcHRpb25zPy5lbWFpbFJlZGlyZWN0VG8gJiYgKHBhcmFtcy5vcHRpb25zPy5zaG91bGRDcmVhdGVVc2VyID09PSB1bmRlZmluZWQgfHwgISFwYXJhbXMub3B0aW9ucz8uc2hvdWxkQ3JlYXRlVXNlcikpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25VcCh7XG4gICAgICAgIGVtYWlsOiBwYXJhbXMuZW1haWwsXG4gICAgICAgIHBob25lOiBwYXJhbXMucGhvbmUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHtcbiAgICAgICAgZW1haWxfcmVkaXJlY3RfdG86IHBhcmFtcy5vcHRpb25zPy5lbWFpbFJlZGlyZWN0VG8sXG4gICAgICAgIC4uLihwYXJhbXMuZW1haWwgPyB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfSA6IHsgcGhvbmVfbnVtYmVyOiB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfSksXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgICBzZXNzaW9uOiBudWxsLFxuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHsgdG9rZW4sIG1lc3NhZ2VJZCA9IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkIH0pOiBQcm9taXNlPFNpZ25JblJlcz4gPT4gdGhpcy52ZXJpZnlPdHAoe1xuICAgICAgICAgICAgZW1haWw6IHBhcmFtcy5lbWFpbCxcbiAgICAgICAgICAgIHBob25lOiBwYXJhbXMucGhvbmUsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdzaWduSW5XaXRoT3RwJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOagoemqjOesrOS4ieaWueW5s+WPsOaOiOadg+eZu+W9leWbnuiwg1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5T0F1dGgocGFyYW1zPzogVmVyaWZ5T0F1dGhSZXEpOiBQcm9taXNlPFZlcmlmeU9BdXRoUmVzPiB7XG4gICAgY29uc3QgZGF0YTogYW55ID0ge31cbiAgICB0cnkge1xuICAgICAgLy8g5Zue6LCD6IezIHByb3ZpZGVyX3JlZGlyZWN0X3VyaSDlnLDlnYDvvIh1cmwgcXVlcnnkuK3mkLrluKYg5o6I5p2DY29kZe+8jHN0YXRl562J5Y+C5pWw77yJ77yM5q2k5pe25qOA5p+lIHN0YXRlIOaYr+WQpuespuWQiOmihOacn++8iOWmgiDoh6rlt7Horr7nva7nmoQgd3hfb3BlbilcbiAgICAgIGNvbnN0IGNvZGUgPSBwYXJhbXM/LmNvZGUgfHwgdXRpbHMuZ2V0UXVlcnkoJ2NvZGUnKVxuICAgICAgY29uc3Qgc3RhdGUgPSBwYXJhbXM/LnN0YXRlIHx8IHV0aWxzLmdldFF1ZXJ5KCdzdGF0ZScpXG5cbiAgICAgIC8vIOWPguaVsOagoemqjO+8mmNvZGXlkoxzdGF0ZeW/heWhq1xuICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICdDb2RlIGlzIHJlcXVpcmVkJyB9KSB9XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ1N0YXRlIGlzIHJlcXVpcmVkJyB9KSB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IGdldEJyb3dzZXJTZXNzaW9uKHN0YXRlKVxuICAgICAgZGF0YS50eXBlID0gY2FjaGVEYXRhPy50eXBlXG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gcGFyYW1zPy5wcm92aWRlciB8fCBjYWNoZURhdGE/LnByb3ZpZGVyIHx8IHV0aWxzLmdldFF1ZXJ5KCdwcm92aWRlcicpXG5cbiAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0pIH1cbiAgICAgIH1cblxuICAgICAgLy8gc3RhdGXnrKblkIjpooTmnJ/vvIzliJnojrflj5bor6XkuInmlrnlubPlj7B0b2tlblxuICAgICAgY29uc3QgeyBwcm92aWRlcl90b2tlbjogdG9rZW4gfSA9IGF3YWl0IHRoaXMuZ3JhbnRQcm92aWRlclRva2VuKHtcbiAgICAgICAgcHJvdmlkZXJfaWQ6IHByb3ZpZGVyLFxuICAgICAgICBwcm92aWRlcl9yZWRpcmVjdF91cmk6IGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lLCAvLyDmjIflrprkuInmlrnlubPlj7Dot7Plm57nmoQgdXJsIOWcsOWdgFxuICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLCAvLyDnrKzkuInmlrnlubPlj7Dot7Povazlm57pobXpnaLml7bvvIx1cmwgcGFyYW0g5Lit5pC65bim55qEIGNvZGUg5Y+C5pWwXG4gICAgICB9KVxuXG4gICAgICBsZXQgcmVzOiBWZXJpZnlPQXV0aFJlc1xuXG4gICAgICBpZiAoY2FjaGVEYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuQklORF9JREVOVElUWSkge1xuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS50b0JpbmRJZGVudGl0eSh7IHByb3ZpZGVyX3Rva2VuOiB0b2tlbiwgcHJvdmlkZXIsIGZpcmVFdmVudDogdHJ1ZSB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g6YCa6L+HIHByb3ZpZGVyX3Rva2VuIOS7heeZu+W9leaIlueZu+W9leW5tuazqOWGjO+8iOS4juS6keW8gOWPkeW5s+WPsC3nmbvlvZXmlrnlvI8t6Lqr5Lu95rqQ55m75b2V5qih5byP6YWN572u5pyJ5YWz77yJXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMuc2lnbkluV2l0aElkVG9rZW4oe1xuICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KVxuICAgICAgICByZXMuZGF0YSA9IHsgLi4uZGF0YSwgLi4ucmVzLmRhdGEgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhbFNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24/LnNlYXJjaClcbiAgICAgIGxvY2FsU2VhcmNoLmRlbGV0ZSgnY29kZScpXG4gICAgICBsb2NhbFNlYXJjaC5kZWxldGUoJ3N0YXRlJylcbiAgICAgIHJlcy5kYXRhLnJlZGlyZWN0VXJsID0gYWRkVXJsU2VhcmNoKFxuICAgICAgICBjYWNoZURhdGE/LnNlYXJjaCA9PT0gdW5kZWZpbmVkID8gYD8ke2xvY2FsU2VhcmNoLnRvU3RyaW5nKCl9YCA6IGNhY2hlRGF0YT8uc2VhcmNoLFxuICAgICAgICBjYWNoZURhdGE/Lmhhc2ggfHwgbG9jYXRpb24uaGFzaCxcbiAgICAgIClcbiAgICAgIHJlbW92ZUJyb3dzZXJTZXNzaW9uKHN0YXRlKVxuXG4gICAgICByZXR1cm4gcmVzXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3ZlcmlmeU9BdXRoJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRob2F1dGhcbiAgICog55Sf5oiQ56ys5LiJ5pa55bmz5Y+w5o6I5p2DIFVyaSDvvIjlpoLlvq7kv6Hkuoznu7TnoIHmiavnoIHmjojmnYPnvZHpobXvvIlcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25Jbk9BdXRoUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aE9BdXRoKHBhcmFtczogU2lnbkluV2l0aE9BdXRoUmVxKTogUHJvbWlzZTxTaWduSW5PQXV0aFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJpwcm92aWRlcuW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcHJvdmlkZXI6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQcm92aWRlciBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGhyZWYgPSBwYXJhbXMub3B0aW9ucz8ucmVkaXJlY3RUbyB8fCBsb2NhdGlvbi5ocmVmXG5cbiAgICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyBVUkwoaHJlZilcblxuICAgICAgY29uc3QgcHJvdmlkZXJfcmVkaXJlY3RfdXJpID0gdXJsT2JqZWN0Lm9yaWdpbiArIHVybE9iamVjdC5wYXRobmFtZVxuXG4gICAgICBjb25zdCBzdGF0ZSA9IHBhcmFtcy5vcHRpb25zPy5zdGF0ZSB8fCBgcHJkLSR7cGFyYW1zLnByb3ZpZGVyfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpXG4gICAgICAgIC5zbGljZSgyKX1gXG5cbiAgICAgIGNvbnN0IHsgdXJpIH0gPSBhd2FpdCB0aGlzLmdlblByb3ZpZGVyUmVkaXJlY3RVcmkoe1xuICAgICAgICBwcm92aWRlcl9pZDogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBwcm92aWRlcl9yZWRpcmVjdF91cmksXG4gICAgICAgIHN0YXRlLFxuICAgICAgfSlcblxuICAgICAgLy8g5a+5IFVSTCDov5vooYzop6PnoIFcbiAgICAgIGNvbnN0IGRlY29kZWRVcmkgPSBkZWNvZGVVUklDb21wb25lbnQodXJpKVxuXG4gICAgICAvLyDlkIjlubbpop3lpJbnmoTmn6Xor6Llj4LmlbBcbiAgICAgIGxldCBmaW5hbFVyaSA9IGRlY29kZWRVcmlcblxuICAgICAgaWYgKHBhcmFtcy5vcHRpb25zPy5xdWVyeVBhcmFtcykge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGRlY29kZWRVcmkpXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHBhcmFtcy5vcHRpb25zLnF1ZXJ5UGFyYW1zKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChrZXksIHZhbHVlKVxuICAgICAgICB9KVxuICAgICAgICBmaW5hbFVyaSA9IHVybC50b1N0cmluZygpXG4gICAgICB9XG5cbiAgICAgIHNhdmVUb0Jyb3dzZXJTZXNzaW9uKHN0YXRlLCB7XG4gICAgICAgIHByb3ZpZGVyOiBwYXJhbXMucHJvdmlkZXIsXG4gICAgICAgIHNlYXJjaDogdXJsT2JqZWN0LnNlYXJjaCxcbiAgICAgICAgaGFzaDogdXJsT2JqZWN0Lmhhc2gsXG4gICAgICAgIHR5cGU6IHBhcmFtcy5vcHRpb25zPy50eXBlIHx8IE9BVVRIX1RZUEUuU0lHTl9JTixcbiAgICAgIH0pXG5cbiAgICAgIGlmIChpc0Jyb3dzZXIoKSAmJiAhcGFyYW1zLm9wdGlvbnM/LnNraXBCcm93c2VyUmVkaXJlY3QpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihmaW5hbFVyaSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1cmw6IGZpbmFsVXJpLCBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NpZ25JbldpdGhPQXV0aCcgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXRjbGFpbXNcbiAgYXN5bmMgZ2V0Q2xhaW1zKCk6IFByb21pc2U8R2V0Q2xhaW1zUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4gfSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKVxuICAgICAgY29uc3QgcGFyc2VkVG9rZW4gPSB3ZUFwcEp3dERlY29kZUFsbChhY2Nlc3NUb2tlbilcbiAgICAgIHJldHVybiB7IGRhdGE6IHBhcnNlZFRva2VuLCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdnZXRDbGFpbXMnIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXJlc2V0cGFzc3dvcmRmb3JlbWFpbFxuICAgKiDpgJrov4cgZW1haWwg5oiW5omL5py65Y+36YeN572u5a+G56CBXG4gICAqIEBwYXJhbSBlbWFpbE9yUGhvbmUg6YKu566x5oiW5omL5py65Y+3XG4gICAqIEByZXR1cm5zIFByb21pc2U8UmVzZXRQYXNzd29yZEZvckVtYWlsUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVzZXRQYXNzd29yZEZvckVtYWlsKFxuICAgIGVtYWlsT3JQaG9uZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7IHJlZGlyZWN0VG8/OiBzdHJpbmcgfSxcbiAgKTogUHJvbWlzZTxSZXNldFBhc3N3b3JkRm9yRW1haWxSZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yaZW1haWxPclBob25l5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKFxuICAgICAgICB7IGVtYWlsT3JQaG9uZSB9LFxuICAgICAgICB7XG4gICAgICAgICAgZW1haWxPclBob25lOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnRW1haWwgb3IgcGhvbmUgaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHsgcmVkaXJlY3RUbyB9ID0gb3B0aW9ucyB8fCB7fVxuXG4gICAgICAvLyDliKTmlq3mmK/pgq7nrrHov5jmmK/miYvmnLrlj7dcbiAgICAgIGNvbnN0IGlzRW1haWwgPSBlbWFpbE9yUGhvbmUuaW5jbHVkZXMoJ0AnKVxuICAgICAgbGV0IHZlcmlmaWNhdGlvblBhcmFtczogeyBlbWFpbD86IHN0cmluZzsgcGhvbmVfbnVtYmVyPzogc3RyaW5nIH1cblxuICAgICAgaWYgKGlzRW1haWwpIHtcbiAgICAgICAgdmVyaWZpY2F0aW9uUGFyYW1zID0geyBlbWFpbDogZW1haWxPclBob25lIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOato+inhOWMluaJi+acuuWPt1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRQaG9uZSA9IHRoaXMuZm9ybWF0UGhvbmUoZW1haWxPclBob25lKVxuICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IHBob25lX251bWJlcjogZm9ybWF0dGVkUGhvbmUgfVxuICAgICAgfVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHZlcmlmaWNhdGlvblBhcmFtcylcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHVwZGF0ZVVzZXI6IGFzeW5jIChhdHRyaWJ1dGVzOiBVcGRhdGVVc2VyQXR0cmlidXRlcyk6IFByb21pc2U8U2lnbkluUmVzPiA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgICAgbm9uY2U6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdOb25jZSBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQYXNzd29yZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyDnrKzkuInmraXvvJrlvoXnlKjmiLfovpPlhaXlrozpqozor4HnoIHkuYvlkI7vvIzpqozor4Hpqozor4HnoIFcbiAgICAgICAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uVG9rZW5SZXMgPSBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogYXR0cmlidXRlcy5ub25jZSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZXNldFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICBlbWFpbDogaXNFbWFpbCA/IGVtYWlsT3JQaG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwaG9uZV9udW1iZXI6ICFpc0VtYWlsID8gZW1haWxPclBob25lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG5ld19wYXNzd29yZDogYXR0cmlidXRlcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuUmVzLnZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlBBU1NXT1JEX1JFQ09WRVJZLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2lnbkluV2l0aFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICBlbWFpbDogaXNFbWFpbCA/IGVtYWlsT3JQaG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwaG9uZTogIWlzRW1haWwgPyBlbWFpbE9yUGhvbmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGF0dHJpYnV0ZXMucGFzc3dvcmQsXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0VG8gJiYgaXNCcm93c2VyKCkpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHJlZGlyZWN0VG8pXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAncmVzZXRQYXNzd29yZEZvckVtYWlsJyB9KSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdyZXNldFBhc3N3b3JkRm9yRW1haWwnIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6YCa6L+H5pen5a+G56CB6YeN572u5a+G56CBXG4gICAqIEBwYXJhbSBuZXdfcGFzc3dvcmRcbiAgICogQHBhcmFtIG9sZF9wYXNzd29yZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgcmVzZXRQYXNzd29yZEZvck9sZChwYXJhbXM6IFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlUGFzc3dvcmRCeU9sZCh7XG4gICAgICAgIG9sZF9wYXNzd29yZDogcGFyYW1zLm9sZF9wYXNzd29yZCxcbiAgICAgICAgbmV3X3Bhc3N3b3JkOiBwYXJhbXMubmV3X3Bhc3N3b3JkLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdyZXNldFBhc3N3b3JkRm9yT2xkJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC12ZXJpZnlvdHBcbiAgICogTG9nIGluIGEgdXNlciBnaXZlbiBhIFVzZXIgc3VwcGxpZWQgT1RQIGFuZCB2ZXJpZmljYXRpb25JZCByZWNlaXZlZCB0aHJvdWdoIG1vYmlsZSBvciBlbWFpbC5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHZlcmlmeU90cChwYXJhbXM6IFZlcmlmeU90cFJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcGFyYW1zXG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJp0b2tlbuWSjHZlcmlmaWNhdGlvbkluZm/lv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHRva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnVG9rZW4gaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgIG1lc3NhZ2VJZDogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ21lc3NhZ2VJZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChbJ3Bob25lX2NoYW5nZScsICdlbWFpbF9jaGFuZ2UnXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiBwYXJhbXMubWVzc2FnZUlkLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBwYXJhbXMudG9rZW4sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgICAgdmVyaWZpY2F0aW9uSW5mbzogeyB2ZXJpZmljYXRpb25faWQ6IHBhcmFtcy5tZXNzYWdlSWQsIGlzX3VzZXI6IHRydWUgfSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25Db2RlOiBwYXJhbXMudG9rZW4sXG4gICAgICAgICAgdXNlcm5hbWU6IHBhcmFtcy5lbWFpbCB8fCB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfHwgJycsXG4gICAgICAgICAgbG9naW5UeXBlOiBwYXJhbXMuZW1haWwgPyAnZW1haWwnIDogJ3Bob25lJyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICd2ZXJpZnlPdHAnIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWdldFNlc3Npb25cbiAgICogUmV0dXJucyB0aGUgc2Vzc2lvbiwgcmVmcmVzaGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbigpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldENyZWRlbnRpYWxzKClcblxuICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5zY29wZSA9PT0gJ2FjY2Vzc0tleScpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBudWxsIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHVzZXIgfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoZmFsc2UpXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogeyAuLi5jcmVkZW50aWFscywgdXNlciB9LCB1c2VyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ2dldFNlc3Npb24nIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXJlZnJlc2hzZXNzaW9uXG4gICAqIOaXoOiuuui/h+acn+eKtuaAgeWmguS9le+8jOmDvei/lOWbnuS4gOS4quaWsOeahOS8muivnVxuICAgKiBAcGFyYW0gcmVmcmVzaF90b2tlblxuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHJlZnJlc2hTZXNzaW9uKHJlZnJlc2hfdG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW4gfHwgY3JlZGVudGlhbHMucmVmcmVzaF90b2tlblxuICAgICAgY29uc3QgbmV3VG9rZW5zID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5yZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpXG4gICAgICBjb25zdCB7IGRhdGE6IHsgdXNlciB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcihmYWxzZSlcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyLCBzZXNzaW9uOiB7IC4uLm5ld1Rva2VucywgdXNlciB9IH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3JlZnJlc2hTZXNzaW9uJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXR1c2VyXG4gICAqIOWmguaenOWtmOWcqOeOsOacieS8muivne+8jOWImeiOt+WPluW9k+WJjeeUqOaIt+ivpue7huS/oeaBr1xuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJSZXM+XG4gICAqL1xuICBhc3luYyBnZXRVc2VyKGlzUmVmcmVzaCA9IHRydWUpOiBQcm9taXNlPEdldFVzZXJSZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlciA9IHRoaXMuY29udmVydFRvVXNlcihhd2FpdCB0aGlzLmdldEN1cnJlbnRVc2VyKGlzUmVmcmVzaCkpXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIgfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnZ2V0VXNlcicgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDliLfmlrDnlKjmiLfkv6Hmga9cbiAgICogQHJldHVybnMgUHJvbWlzZTxDb21tb25SZXM+XG4gICAqL1xuICBhc3luYyByZWZyZXNoVXNlcigpOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmN1cnJlbnRVc2VyLnJlZnJlc2goKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdyZWZyZXNoVXNlcicgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdXBkYXRldXNlclxuICAgKiDmm7TmlrDnlKjmiLfkv6Hmga9cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJSZXMgfCBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcz5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVVzZXIocGFyYW1zOiBVcGRhdGVVc2VyUmVxKTogUHJvbWlzZTxHZXRVc2VyUmVzIHwgVXBkYXRlVXNlcldpdGhWZXJpZmljYXRpb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77ya6Iez5bCR5pyJ5LiA5Liq5pu05paw5a2X5q616KKr5o+Q5L6bXG4gICAgICBjb25zdCBoYXNWYWx1ZSA9IE9iamVjdC5rZXlzKHBhcmFtcykuc29tZShrZXkgPT4gcGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCAmJiBwYXJhbXNba2V5XSAhPT0gbnVsbCAmJiBwYXJhbXNba2V5XSAhPT0gJycsKVxuICAgICAgaWYgKCFoYXNWYWx1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ0F0IGxlYXN0IG9uZSBmaWVsZCBtdXN0IGJlIHByb3ZpZGVkIGZvciB1cGRhdGUnIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZW1haWwsIHBob25lLCAuLi5yZXN0UGFyYW1zIH0gPSBwYXJhbXNcblxuICAgICAgLy8g5qOA5p+l5piv5ZCm6ZyA6KaB5pu05pawIGVtYWlsIOaIliBwaG9uZVxuICAgICAgY29uc3QgbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA9IGVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IG5lZWRzUGhvbmVWZXJpZmljYXRpb24gPSBwaG9uZSAhPT0gdW5kZWZpbmVkXG5cbiAgICAgIGxldCBleHRyYVJlcyA9IHt9XG5cbiAgICAgIGlmIChuZWVkc0VtYWlsVmVyaWZpY2F0aW9uIHx8IG5lZWRzUGhvbmVWZXJpZmljYXRpb24pIHtcbiAgICAgICAgLy8g6ZyA6KaB5Y+R6YCB6aqM6K+B56CBXG4gICAgICAgIGxldCB2ZXJpZmljYXRpb25QYXJhbXM6IHsgZW1haWw/OiBzdHJpbmc7IHBob25lX251bWJlcj86IHN0cmluZyB9XG4gICAgICAgIGxldCB2ZXJpZmljYXRpb25UeXBlOiAnZW1haWxfY2hhbmdlJyB8ICdwaG9uZV9jaGFuZ2UnXG5cbiAgICAgICAgaWYgKG5lZWRzRW1haWxWZXJpZmljYXRpb24pIHtcbiAgICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfVxuICAgICAgICAgIHZlcmlmaWNhdGlvblR5cGUgPSAnZW1haWxfY2hhbmdlJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIOato+inhOWMluaJi+acuuWPt1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpXG4gICAgICAgICAgdmVyaWZpY2F0aW9uUGFyYW1zID0geyBwaG9uZV9udW1iZXI6IGZvcm1hdHRlZFBob25lIH1cbiAgICAgICAgICB2ZXJpZmljYXRpb25UeXBlID0gJ3Bob25lX2NoYW5nZSdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWPkemAgemqjOivgeeggVxuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24odmVyaWZpY2F0aW9uUGFyYW1zKVxuXG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3RQYXJhbXMpLmxlbmd0aCA+IDAgJiYgKGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyhyZXN0UGFyYW1zKSlcblxuICAgICAgICBleHRyYVJlcyA9IHtcbiAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHZlcmlmeVBhcmFtczogeyBlbWFpbD86IHN0cmluZzsgcGhvbmU/OiBzdHJpbmc7IHRva2VuOiBzdHJpbmcgfSk6IFByb21pc2U8R2V0VXNlclJlcz4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKHZlcmlmeVBhcmFtcy5lbWFpbCAmJiBwYXJhbXMuZW1haWwgPT09IHZlcmlmeVBhcmFtcy5lbWFpbCkge1xuICAgICAgICAgICAgICAgIC8vIOmqjOivgeeggemqjOivgVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdlbWFpbF9jaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IHBhcmFtcy5lbWFpbCxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9KVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcmlmeVBhcmFtcy5waG9uZSAmJiBwYXJhbXMucGhvbmUgPT09IHZlcmlmeVBhcmFtcy5waG9uZSkge1xuICAgICAgICAgICAgICAgIC8vIOmqjOivgeeggemqjOivgVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdwaG9uZV9jaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgcGhvbmU6IHBhcmFtcy5waG9uZSxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHsgcGhvbmU6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHZlcmlmaWNhdGlvblR5cGUsXG4gICAgICAgICAgICAgICAgICBlbWFpbDogbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA/IHBhcmFtcy5lbWFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHBob25lOiAhbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA/IHBhcmFtcy5waG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8g6aqM6K+B5oiQ5Yqf5ZCO5pu05paw55So5oi35L+h5oGvXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtcylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHVzZXIgfSxcbiAgICAgICAgICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcihmYWxzZSlcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuVVNFUl9VUERBVEVEIH0pXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyIH0sIGVycm9yOiBudWxsIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICd1cGRhdGVVc2VyJyB9KSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5LiN6ZyA6KaB6aqM6K+B77yM55u05o6l5pu05pawXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXMpXG4gICAgICB9XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHsgdXNlciB9LFxuICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcihmYWxzZSlcbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlVTRVJfVVBEQVRFRCB9KVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIsIC4uLmV4dHJhUmVzIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3VwZGF0ZVVzZXInIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWdldHVzZXJpZGVudGl0aWVzXG4gICAqIOiOt+WPluaJgOaciei6q+S7vea6kFxuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJJZGVudGl0aWVzUmVzPlxuICAgKi9cbiAgYXN5bmMgZ2V0VXNlcklkZW50aXRpZXMoKTogUHJvbWlzZTxHZXRVc2VySWRlbnRpdGllc1Jlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlcnMoKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgaWRlbnRpdGllczogcHJvdmlkZXJzPy5kYXRhPy5maWx0ZXIodiA9PiAhIXYuYmluZCkgYXMgdW5rbm93biBhcyBHZXRVc2VySWRlbnRpdGllc1Jlc1snZGF0YSddWydpZGVudGl0aWVzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnZ2V0VXNlcklkZW50aXRpZXMnIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWxpbmtpZGVudGl0eVxuICAgKiDnu5Hlrprouqvku73mupDliLDlvZPliY3nlKjmiLdcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPExpbmtJZGVudGl0eVJlcz5cbiAgICovXG4gIGFzeW5jIGxpbmtJZGVudGl0eShwYXJhbXM6IExpbmtJZGVudGl0eVJlcSk6IFByb21pc2U8TGlua0lkZW50aXR5UmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnByb3ZpZGVy5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBwcm92aWRlcjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Byb3ZpZGVyIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zaWduSW5XaXRoT0F1dGgoe1xuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgdHlwZTogT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ2xpbmtJZGVudGl0eScgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdW5saW5raWRlbnRpdHlcbiAgICog6Kej57uR6Lqr5Lu95rqQXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxDb21tb25SZXM+XG4gICAqL1xuICBhc3luYyB1bmxpbmtJZGVudGl0eShwYXJhbXM6IFVubGlua0lkZW50aXR5UmVxKTogUHJvbWlzZTxDb21tb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yacHJvdmlkZXLlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHByb3ZpZGVyOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51bmJpbmRQcm92aWRlcih7IHByb3ZpZGVyX2lkOiBwYXJhbXMucHJvdmlkZXIgfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3VubGlua0lkZW50aXR5JyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1yZWF1dGhlbnRpY2F0aW9uXG4gICAqIOmHjeaWsOiupOivgVxuICAgKiBAcmV0dXJucyBQcm9taXNlPFJlYXV0aGVudGljYXRlUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVhdXRoZW50aWNhdGUoKTogUHJvbWlzZTxSZWF1dGhlbnRpY2F0ZVJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHsgdXNlciB9LFxuICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcihmYWxzZSlcblxuICAgICAgdGhpcy52YWxpZGF0ZUF0TGVhc3RPbmUodXNlciwgW1snZW1haWwnLCAncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuICAgICAgY29uc3QgdXNlckluZm8gPSB1c2VyLmVtYWlsID8geyBlbWFpbDogdXNlci5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUodXNlci5waG9uZSkgfVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHVzZXJJbmZvKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLy8g56ys5LqM5q2l77ya562J5b6F55So5oi36L6T5YWl6aqM6K+B56CB77yI6YCa6L+HIFByb21pc2Ug5YyF6KOF55So5oi36L6T5YWl5LqL5Lu277yJXG4gICAgICAgICAgdXBkYXRlVXNlcjogYXN5bmMgKGF0dHJpYnV0ZXM6IFVwZGF0ZVVzZXJBdHRyaWJ1dGVzKTogUHJvbWlzZTxTaWduSW5SZXM+ID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMoYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICBub25jZTogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ05vbmNlIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgLy8g56ys5LiJ5q2l77ya5b6F55So5oi36L6T5YWl5a6M6aqM6K+B56CB5LmL5ZCO77yM6aqM6K+B6aqM6K+B56CBXG4gICAgICAgICAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uVG9rZW5SZXMgPSBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IGF0dHJpYnV0ZXMubm9uY2UsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIC8vIOesrOWbm+atpe+8muiOt+WPliBzdWRvX3Rva2VuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3Vkb1JlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8oe1xuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuOiB2ZXJpZmljYXRpb25Ub2tlblJlcy52ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICAgIG5ld19wYXNzd29yZDogYXR0cmlidXRlcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgIHN1ZG9fdG9rZW46IHN1ZG9SZXMuc3Vkb190b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25Db2RlOiBhdHRyaWJ1dGVzLm5vbmNlLFxuICAgICAgICAgICAgICAgICAgLi4udXNlckluZm8sXG4gICAgICAgICAgICAgICAgICBsb2dpblR5cGU6IHVzZXJJbmZvLmVtYWlsID8gJ2VtYWlsJyA6ICdwaG9uZScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAncmVhdXRoZW50aWNhdGUnIH0pIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3JlYXV0aGVudGljYXRlJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1yZXNlbmRcbiAgICog6YeN5paw5Y+R6YCB6aqM6K+B56CBXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxSZXNlbmRSZXM+XG4gICAqL1xuICBhc3luYyByZXNlbmQocGFyYW1zOiBSZXNlbmRSZXEpOiBQcm9taXNlPFJlc2VuZFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXJhbXMudHlwZSA9PT0gJ3NpZ251cCcgPyAnQU5ZJyA6ICdVU0VSJ1xuICAgICAgY29uc3QgZGF0YTogeyBlbWFpbD86IHN0cmluZzsgcGhvbmVfbnVtYmVyPzogc3RyaW5nOyB0YXJnZXQ6ICdVU0VSJyB8ICdBTlknIH0gPSB7IHRhcmdldCB9XG4gICAgICBpZiAoJ2VtYWlsJyBpbiBwYXJhbXMpIHtcbiAgICAgICAgZGF0YS5lbWFpbCA9IHBhcmFtcy5lbWFpbFxuICAgICAgfVxuXG4gICAgICBpZiAoJ3Bob25lJyBpbiBwYXJhbXMpIHtcbiAgICAgICAgZGF0YS5waG9uZV9udW1iZXIgPSB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSlcbiAgICAgIH1cblxuICAgICAgLy8g6YeN5paw5Y+R6YCB6aqM6K+B56CBXG4gICAgICBjb25zdCB7IHZlcmlmaWNhdGlvbl9pZDogdmVyaWZpY2F0aW9uSWQgfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFZlcmlmaWNhdGlvbihkYXRhKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7IG1lc3NhZ2VJZDogdmVyaWZpY2F0aW9uSWQgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3Jlc2VuZCcgfSksXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zZXRzZXNzaW9uXG4gICAqIOS9v+eUqGFjY2Vzc190b2tlbuWSjHJlZnJlc2hfdG9rZW7mnaXorr7nva7kvJror51cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNldFNlc3Npb24ocGFyYW1zOiBTZXRTZXNzaW9uUmVxKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnQWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICByZWZyZXNoX3Rva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUmVmcmVzaCB0b2tlbiBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQucmVmcmVzaFRva2VuKHBhcmFtcywgeyB0aHJvd0Vycm9yOiB0cnVlIH0pXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX0lOIH0pXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ3NldFNlc3Npb24nIH0pIH1cbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtZXhjaGFuZ2Vjb2RlZm9yc2Vzc2lvblxuICBhc3luYyBleGNoYW5nZUNvZGVGb3JTZXNzaW9uKCkge1xuICAgIC8vXG4gIH1cblxuICAvKipcbiAgICog5Yig6Zmk5b2T5YmN55So5oi3XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVVzZXIocGFyYW1zOiBEZWxldGVNZVJlcSk6IFByb21pc2U8Q29tbW9uUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHBhc3N3b3JkOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUGFzc3dvcmQgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCB7IHN1ZG9fdG9rZW4gfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8ocGFyYW1zKVxuXG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZSh7IHN1ZG9fdG9rZW4gfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yLCB7IG1ldGhvZDogJ2RlbGV0ZVVzZXInIH0pIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6Lez6L2s57O757uf6buY6K6k55m75b2V6aG1XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuVG9EZWZhdWx0TG9naW5QYWdlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIGFzeW5jIHRvRGVmYXVsdExvZ2luUGFnZShwYXJhbXM6IGF1dGhNb2RlbHMuVG9EZWZhdWx0TG9naW5QYWdlID0ge30pOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdWZXJzaW9uID0gcGFyYW1zLmNvbmZpZ192ZXJzaW9uIHx8ICdlbnYnXG4gICAgICBjb25zdCBxdWVyeSA9IE9iamVjdC5rZXlzKHBhcmFtcy5xdWVyeSB8fCB7fSlcbiAgICAgICAgLm1hcChrZXkgPT4gYCR7a2V5fT0ke3BhcmFtcy5xdWVyeVtrZXldfWApXG4gICAgICAgIC5qb2luKCcmJylcblxuICAgICAgaWYgKGFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgICB3eC5uYXZpZ2F0ZVRvKHsgdXJsOiBgL3BhY2thZ2VzLyR3ZF9zeXN0ZW0vcGFnZXMvbG9naW4vaW5kZXgke3F1ZXJ5ID8gYD8ke3F1ZXJ5fWAgOiAnJ31gIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWRpcmVjdFVyaSA9IHBhcmFtcy5yZWRpcmVjdF91cmkgfHwgd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTChyZWRpcmVjdFVyaSlcbiAgICAgICAgY29uc3QgbG9naW5QYWdlID0gYCR7dXJsT2JqLm9yaWdpbn0vX19hdXRoLz9hcHBfaWQ9JHtwYXJhbXMuYXBwX2lkIHx8ICcnfSZlbnZfaWQ9JHt0aGlzLmNvbmZpZy5lbnZ9JmNsaWVudF9pZD0ke1xuICAgICAgICAgIHRoaXMuY29uZmlnLmNsaWVudElkIHx8IHRoaXMuY29uZmlnLmVudlxuICAgICAgICB9JmNvbmZpZ192ZXJzaW9uPSR7Y29uZmlnVmVyc2lvbn0mcmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX0ke3F1ZXJ5ID8gYCYke3F1ZXJ5fWAgOiAnJ31gXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbG9naW5QYWdlXG4gICAgICB9XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAndG9EZWZhdWx0TG9naW5QYWdlJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiHquWumuS5ieeZu+W9lVxuICAgKiBAcGFyYW0gZ2V0VGlja0ZuICgpID0+IFByb21pc2U8c3RyaW5nPiwg6I635Y+W6Ieq5a6a5LmJ55m75b2VIHRpY2tldCDnmoTlh73mlbBcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhDdXN0b21UaWNrZXQoZ2V0VGlja0ZuPzogYXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm4pOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIGlmIChnZXRUaWNrRm4pIHtcbiAgICAgIHRoaXMuc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KClcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IsIHsgbWV0aG9kOiAnc2lnbkluV2l0aEN1c3RvbVRpY2tldCcgfSkgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo9vcGVuSWTpnZnpu5jnmbvlvZVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhPcGVuSWQoeyB1c2VXeENsb3VkID0gdHJ1ZSB9ID0ge30pOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAnb3Blbl9pZCcsXG4gICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKFxuICAgICAgICAgIHsgcHJvdmlkZXJfdG9rZW46IHJlc3VsdC5wcm92aWRlcl90b2tlbiB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKGNyZWRlbnRpYWxzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBjcmVkZW50aWFsc1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscyBhcyBDcmVkZW50aWFscylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgbWFpbkZ1bmMocmVzLmNvZGUpXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhaWw6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IHJlcz8uZXJybm9cbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgLy8gbG9naW5TdGF0Zei/lOWbnuaYr+S4uuS6huWFvOWuuXYy54mI5pysXG4gICAgICByZXR1cm4geyAuLi4obG9naW5TdGF0ZSBhcyBhbnkpLCBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdzaWduSW5XaXRoT3BlbklkJyB9KSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+aJi+acuuWPt+aOiOadg+eZu+W9lVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aFBob25lQXV0aCh7IHBob25lQ29kZSA9ICcnLCB1c2VXeENsb3VkID0gZmFsc2UgfSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICd3eCBhcGkgdW5kZWZpbmVkJyB9KSB9XG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG4gICAgY29uc3QgcHJvdmlkZXJJbmZvID0ge1xuICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7IHByb3ZpZGVyX2NvZGVfdHlwZTogJ3Bob25lJywgY29kZTogcGhvbmVDb2RlLCBhcHBpZDogd3hJbmZvLmFwcElkIH0sXG4gICAgICBwcm92aWRlcl9pZDogd3hJbmZvLmFwcElkLFxuICAgIH1cblxuICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgd3gubG9naW4oKVxuICAgIDsocHJvdmlkZXJJbmZvIGFzIGFueSkucHJvdmlkZXJfY29kZSA9IGNvZGVcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm92aWRlclRva2VuID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHByb3ZpZGVySW5mbywgdXNlV3hDbG91ZClcbiAgICAgIGlmIChwcm92aWRlclRva2VuLmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgcHJvdmlkZXJUb2tlblxuICAgICAgfVxuXG4gICAgICBjb25zdCBzaWduSW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbi5wcm92aWRlcl90b2tlbixcbiAgICAgIH0sIHVzZVd4Q2xvdWQpXG5cbiAgICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgc2lnbkluUmVzXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciwgeyBtZXRob2Q6ICdzaWduSW5XaXRoUGhvbmVBdXRoJyB9KSB9XG4gICAgfVxuXG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG5cbiAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAvLyBsb2dpblN0YXRl6L+U5Zue5piv5Li65LqG5YW85a65djLniYjmnKxcbiAgICByZXR1cm4geyAuLi4obG9naW5TdGF0ZSBhcyBhbnkpLCBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gIH1cblxuICAvKipcbiAgICog57uR5a6a5omL5py65Y+3XG4gICAqIEBwYXJhbSBwaG9uZU51bWJlclxuICAgKiBAcGFyYW0gcGhvbmVDb2RlXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a5omL5py65Y+35aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kUGhvbmVOdW1iZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huefreS/oemqjOivgeeggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgYmluZFBob25lTnVtYmVyKHBhcmFtczogYXV0aE1vZGVscy5CaW5kUGhvbmVSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmVkaXRDb250YWN0KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDop6Pnu5HkuInmlrnnu5HlrppcbiAgICogQHBhcmFtIGxvZ2luVHlwZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+ino+mZpOS4ieaWuee7keWumuWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkudW5iaW5kUHJvdmlkZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjei0puaIt+aYr+WQpuW3sue7j+S4juatpOeZu+W9leaWueW8j+ino+e7kScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgdW5iaW5kUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLlVuYmluZFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51bmJpbmRQcm92aWRlcihwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog5pu05paw6YKu566x5Zyw5Z2AXG4gICAqIEBwYXJhbSBlbWFpbFxuICAgKiBAcGFyYW0gc3Vkb190b2tlblxuICAgKiBAcGFyYW0gdmVyaWZpY2F0aW9uX3Rva2VuXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a6YKu566x5Zyw5Z2A5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kRW1haWwoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6humCrueuseWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYmluZEVtYWlsKHBhcmFtczogYXV0aE1vZGVscy5CaW5kRW1haWxSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmVkaXRDb250YWN0KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiB2ZXJpZnlcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlZlcmlmeVJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLlZlcmlmeVJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIFVzZXJcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfpqozor4HnoIHpqozor4HlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLnZlcmlmeSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG5omL5py66aqM6K+B56CBL+mCrueuseeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5KHBhcmFtczogYXV0aE1vZGVscy5WZXJpZnlSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlZlcmlmeVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnZlcmlmeShwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W6aqM6K+B56CBXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZT59XG4gICAqIEBtZW1iZXJvZiBVc2VyXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W6aqM6K+B56CB5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRWZXJpZmljYXRpb24oKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huaJi+acuumqjOivgeeggS/pgq7nrrHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldFZlcmlmaWNhdGlvbihcbiAgICBwYXJhbXM6IGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCxcbiAgICBvcHRpb25zPzogeyB3aXRoQ2FwdGNoYTogYm9vbGVhbiB9LFxuICApOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICBpZiAocGFyYW1zLnBob25lX251bWJlcikge1xuICAgICAgcGFyYW1zLnBob25lX251bWJlciA9IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lX251bWJlcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFZlcmlmaWNhdGlvbihwYXJhbXMsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN55m75b2V55qE55So5oi35L+h5oGvLeWQjOatpVxuICAgKi9cbiAgZ2V0IGN1cnJlbnRVc2VyKCkge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0Q3VycmVudFVzZXIgaW5zdGVhZCcsXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsb2dpblN0YXRlID0gdGhpcy5oYXNMb2dpblN0YXRlKClcblxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICByZXR1cm4gbG9naW5TdGF0ZS51c2VyIHx8IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nmbvlvZXnmoTnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRDdXJyZW50VXNlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVudFVzZXIoaXNSZWZyZXNoID0gdHJ1ZSk6IFByb21pc2U8KGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+KSB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKGlzUmVmcmVzaCkge1xuICAgICAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICAgICAgaWYgKGxvZ2luU3RhdGUpIHtcbiAgICAgICAgICAvLyDmr4/mrKHpg73lj5Hor7fmsYLojrflj5bmnIDmlrDnlKjmiLfkv6Hmga/vvIzkuI3otbDnvJPlrZhcbiAgICAgICAgICBhd2FpdCBsb2dpblN0YXRlLnVzZXIucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy9cbiAgICB9XG5cbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBpZiAobG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgdXNlckluZm8gPSBsb2dpblN0YXRlLnVzZXIuZ2V0TG9jYWxVc2VySW5mbygpIGFzIGF1dGhNb2RlbHMuVXNlckluZm9cbiAgICAgIGF3YWl0IGxvZ2luU3RhdGUudXNlci5jaGVja0xvY2FsSW5mb0FzeW5jKClcbiAgICAgIHJldHVybiB7IC4uLmxvZ2luU3RhdGUudXNlciwgLi4udXNlckluZm8gfSBhcyB1bmtub3duIGFzIGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICog5Yy/5ZCN55m75b2VXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+Wwj+eoi+W6j+WMv+WQjeeZu+W9leWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWMv+WQjeeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5Bbm9ueW1vdXNseUluV3goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5SW5XeCh7XG4gICAgdXNlV3hDbG91ZCxcbiAgfToge1xuICAgIHVzZVd4Q2xvdWQ/OiBib29sZWFuXG4gIH0gPSB7fSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAnb3Blbl9pZCcsXG4gICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluQW5vbnltb3VzbHkoXG4gICAgICAgICAgeyBwcm92aWRlcl90b2tlbjogcmVzdWx0LnByb3ZpZGVyX3Rva2VuIH0sXG4gICAgICAgICAgdXNlV3hDbG91ZCxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmICgoY3JlZGVudGlhbHMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IGNyZWRlbnRpYWxzXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgd3gubG9naW4oe1xuICAgICAgICBzdWNjZXNzOiBhc3luYyAocmVzOiB7IGNvZGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IG1haW5GdW5jKHJlcy5jb2RlKVxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihyZXM/LmVyck1zZylcbiAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IHJlcz8uZXJybm9cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHVuZGVmaW5lZCwgeyBhc3luY1JlZnJlc2hVc2VyOiB0cnVlIH0pXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP57uR5a6aT3BlbklEXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+Wwj+eoi+W6j+e7keWumk9wZW5JROWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j29wZW5JZOmdmem7mOeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5iaW5kT3BlbklkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kT3BlbklkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbih7XG4gICAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSxcbiAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ29wZW5faWQnLFxuICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRXaXRoUHJvdmlkZXIoeyBwcm92aWRlcl90b2tlbjogcmVzdWx0LnByb3ZpZGVyX3Rva2VuIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBtYWluRnVuYyhyZXMuY29kZSlcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo91bmlvbklk6Z2Z6buY55m75b2V5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoVW5pb25JZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFVuaW9uSWQoKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVySWQgPSB3eEluZm8/LmFwcElkXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IHJlcy5jb2RlLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX2lkOiBwcm92aWRlcklkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAgICAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAndW5pb25faWQnLFxuICAgICAgICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBjb25zdCB7IHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuIH0gPSByZXN1bHRcblxuICAgICAgICAgICAgICBpZiAoIXByb3ZpZGVyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9pZDogcHJvdmlkZXJJZCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBpZiAoKHNpZ25JblJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHNpZ25JblJlcylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP55+t5L+h6aqM6K+B56CB55m76ZmGXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+efreS/oemqjOivgeeggeeZu+mZhicsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j+efreS/oemqjOivgeeggeeZu+mZhicsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoU21zKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoU21zKHtcbiAgICB2ZXJpZmljYXRpb25JbmZvID0geyB2ZXJpZmljYXRpb25faWQ6ICcnLCBpc191c2VyOiBmYWxzZSB9LFxuICAgIHZlcmlmaWNhdGlvbkNvZGUgPSAnJyxcbiAgICBwaG9uZU51bSA9ICcnLFxuICAgIGJpbmRJbmZvID0gdW5kZWZpbmVkLFxuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgIHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICAgIGJpbmRJbmZvLFxuICAgICAgICB1c2VybmFtZTogcGhvbmVOdW0sXG4gICAgICAgIGxvZ2luVHlwZTogJ3NtcycsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDpgq7nrrHpqozor4HnoIHnmbvpmYZcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6YKu566x6aqM6K+B56CB55m76ZmGJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG6YKu566x55m76ZmGJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhFbWFpbCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEVtYWlsKHtcbiAgICB2ZXJpZmljYXRpb25JbmZvID0geyB2ZXJpZmljYXRpb25faWQ6ICcnLCBpc191c2VyOiBmYWxzZSB9LFxuICAgIHZlcmlmaWNhdGlvbkNvZGUgPSAnJyxcbiAgICBiaW5kSW5mbyA9IHVuZGVmaW5lZCxcbiAgICBlbWFpbCA9ICcnLFxuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgIHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICAgIGJpbmRJbmZvLFxuICAgICAgICB1c2VybmFtZTogZW1haWwsXG4gICAgICAgIGxvZ2luVHlwZTogJ2VtYWlsJyxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiuvue9ruiOt+WPluiHquWumuS5ieeZu+W9lSB0aWNrZXQg5Ye95pWwXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm59IGdldFRpY2tGblxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIHNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbjogYXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm4pOiB2b2lkIHtcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm4pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICAvLyBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAvLyAgIHRpdGxlOiAn6Ieq5a6a5LmJ55m75b2V5aSx6LSlJyxcbiAgLy8gICBtZXNzYWdlczogW1xuICAvLyAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gIC8vICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG6Ieq5a6a5LmJ55m75b2VJyxcbiAgLy8gICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgJyAgMyAtIHRpY2tldCDmmK/lkKblvZLlsZ7kuo7lvZPliY3njq/looMnLFxuICAvLyAgICAgJyAgNCAtIOWIm+W7uiB0aWNrZXQg55qE6Ieq5a6a5LmJ55m75b2V56eB6ZKl5piv5ZCm6L+H5pyfJyxcbiAgLy8gICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAvLyAgIF0sXG4gIC8vIH0pXG4gIC8vIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAvLyAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKVxuICAvLyAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluKHBhcmFtczogYXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHBhcmFtcylcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKlxuICAvLyAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2lnblVwUmVxdWVzdH0gcGFyYW1zXG4gIC8vICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAvLyAgKiBAbWVtYmVyb2YgQXV0aFxuICAvLyAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+azqOWGjOWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huaMh+WumueZu+W9leaWueW8jycsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduVXAoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25VcChwYXJhbXM6IGF1dGhNb2RlbHMuU2lnblVwUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XG4gIC8vICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnblVwKHBhcmFtcylcbiAgLy8gICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiDorr7nva7lr4bnoIFcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlNldFBhc3N3b3JkUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5TZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0UGFzc3dvcmQocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOajgOa1i+eUqOaIt+WQjeaYr+WQpuW3sue7j+WNoOeUqFxuICAgKiBAcGFyYW0gdXNlcm5hbWVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bnlKjmiLfmmK/lkKbooqvljaDnlKjlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmlzVXNlcm5hbWVSZWdpc3RlcmVkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBpc1VzZXJuYW1lUmVnaXN0ZXJlZCh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHR5cGVvZiB1c2VybmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAndXNlcm5hbWUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBleGlzdCB9ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuY2hlY2tJZlVzZXJFeGlzdCh7IHVzZXJuYW1lIH0pXG4gICAgcmV0dXJuIGV4aXN0XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGhhc0xvZ2luU3RhdGUoKTogTG9naW5TdGF0ZSB8IG51bGwge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0TG9naW5TdGF0ZSBpbnN0ZWFkJyxcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9hdXRoTG9naW5TdGF0ZSA9IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5oYXNMb2dpblN0YXRlU3luYygpXG4gICAgaWYgKG9hdXRoTG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gbG9naW5TdGF0ZVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeZu+W9leaAgS3lvILmraVcbiAgICog5q2kQVBJ5Li65YW85a655byC5q2lc3RvcmFnZeeahOW5s+WPsFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPluacrOWcsOeZu+W9leaAgeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0TG9naW5TdGF0ZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0TG9naW5TdGF0ZSgpIHtcbiAgICBsZXQgb2F1dGhMb2dpblN0YXRlID0gbnVsbFxuXG4gICAgdHJ5IHtcbiAgICAgIG9hdXRoTG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChvYXV0aExvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIOS9v+eUqCBnZXRDdXJyZW50VXNlciDku6Pmm7/vvIzlm6DkuLrkuI5ub2RlLXNka+aWueazleWQjeWGsueqgVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRVc2VySW5mbygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckluZm8oKTogUHJvbWlzZTwoYXV0aE1vZGVscy5Vc2VySW5mbyAmIFBhcnRpYWw8VXNlcj4pIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRVc2VyKClcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5blvq7mkK3mj5Lku7bnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDmmK/lkKblt7LnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuZ2V0V2VkYVVzZXJJbmZvKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRXZWRhVXNlckluZm8oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0V2VkYVVzZXJJbmZvKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtczogYXV0aE1vZGVscy5Nb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCkge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICBhd2FpdCAobG9naW5TdGF0ZS51c2VyIGFzIFVzZXIpLnVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRBdXRoSGVhZGVyIOWFvOWuueWkhOeQhlxuICAgKiDov5Tlm57nqbrlr7nosaFcbiAgICovXG4gIHB1YmxpYyBnZXRBdXRoSGVhZGVyKCk6IHt9IHtcbiAgICBjb25zb2xlLmVycm9yKCdBdXRoLmdldEF1dGhIZWFkZXIgQVBJIOW3suW6n+W8gycpXG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICAvKipcbiAgICog5Li65bey5pyJ6LSm5oi357uR56ys5LiJ5pa56LSm5oi3XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumuesrOS4ieaWueeZu+W9leaWueW8j+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZFdpdGhQcm92aWRlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5q2k6LSm5oi35piv5ZCm5bey57uP57uR5a6a5q2k56ys5LiJ5pa5JyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kV2l0aFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmn6Xor6LnlKjmiLdcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0fSBhcHBlbmRlZF9wYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlVc2VyKHF1ZXJ5T2JqOiBhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5xdWVyeVVzZXJQcm9maWxlKHF1ZXJ5T2JqKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgIGNvbnN0IG9hdXRoQWNjZXNzVG9rZW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICByZXR1cm4ge1xuICAgICAgYWNjZXNzVG9rZW46IG9hdXRoQWNjZXNzVG9rZW5SZXMsXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ3JhbnRQcm92aWRlclRva2VuKHBhcmFtczogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXM6IGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucGF0Y2hQcm92aWRlclRva2VuKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhXZWNoYXQocGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhXZWNoYXQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdyYW50VG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLkdyYW50VG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRUb2tlbihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShwYXJhbXM6IGF1dGhNb2RlbHMuR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5SZXNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZXNldFBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXZpY2VBdXRob3JpemUocGFyYW1zOiBhdXRoTW9kZWxzLkRldmljZUF1dGhvcml6ZVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuRGV2aWNlQXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZGV2aWNlQXV0aG9yaXplKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWRvKHBhcmFtczogYXV0aE1vZGVscy5TdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5TdWRvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc3VkbyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlTWUocGFyYW1zOiBhdXRoTW9kZWxzLldpdGhTdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8YXV0aE1vZGVscy5Qcm92aWRlcnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlcnMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkubG9naW5TY29wZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5Hcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5sb2dpbkdyb3VwcygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25Mb2dpblN0YXRlQ2hhbmdlZChjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8ub24oRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIC8vIGdldExvZ2luU3RhdGXkvJrph43lpI3op6blj5FnZXRDcmVkZW50aWFsc++8jOWvvOiHtOatu+W+queOr++8jOaJgOS7pWdldENyZWRlbnRpYWxz5Ye66ZSZ5LiN5YaN5Ye65Y+RZ2V0TG9naW5TdGF0ZVxuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IHBhcmFtcz8uZGF0YT8uZXZlbnRUeXBlICE9PSBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuQ1JFREVOVElBTFNfRVJST1IgPyBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKSA6IHt9XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIHsgLi4ucGFyYW1zLCAuLi5sb2dpblN0YXRlIH0pXG4gICAgfSlcbiAgICAvLyDnq4vliLvmiafooYzkuIDmrKHlm57osINcbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGxvZ2luU3RhdGUpXG4gIH1cblxuICAvKipcbiAgICog5by65Yi25Yi35pawdG9rZW5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bouqvku73kv6Hmga9cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldENyZWRlbnRpYWxzKClcbiAgfVxuICAvKipcbiAgICog5YaZ5YWl6Lqr5Lu95L+h5oGvXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bouqvku73mupDnsbvlnosnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFByb3ZpZGVyU3ViVHlwZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJTdWJUeXBlKCk6IFByb21pc2U8YXV0aE1vZGVscy5Qcm92aWRlclN1YlR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0UHJvdmlkZXJTdWJUeXBlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXB0Y2hhRGF0YShwYXJhbXM6IHsgc3RhdGU6IHN0cmluZzsgcmVkaXJlY3RfdXJpPzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuY3JlYXRlQ2FwdGNoYURhdGEocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtczogeyB0b2tlbjogc3RyaW5nOyBrZXk6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRNaW5pUHJvZ3JhbVFyQ29kZShwYXJhbXM6IGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldE1pbmlQcm9ncmFtQ29kZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zOiBhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1cyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpbihwYXJhbXM6IGF1dGhNb2RlbHMuTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VyQmVoYXZpb3JMb2cocGFyYW1zOiBhdXRoTW9kZWxzLkdldFVzZXJCZWhhdmlvckxvZyk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRVc2VyQmVoYXZpb3JMb2dSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VXNlckJlaGF2aW9yTG9nKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBzbXMvZW1haWwg6aqM6K+B56CB55m75b2VL+azqOWGjO+8jOmAu+i+keS4gOiHtOaUtuaVm1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgdmVyaWZpY2F0aW9uSW5mbyA9IHsgdmVyaWZpY2F0aW9uX2lkOiAnJywgaXNfdXNlcjogZmFsc2UgfSxcbiAgICB2ZXJpZmljYXRpb25Db2RlID0gJycsXG4gICAgdXNlcm5hbWU6IHJhd1VzZXJuYW1lID0gJycsXG4gICAgYmluZEluZm8gPSB1bmRlZmluZWQsXG4gICAgbG9naW5UeXBlID0gJycsXG4gIH06IHtcbiAgICB2ZXJpZmljYXRpb25JbmZvPzogYXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZVxuICAgIHZlcmlmaWNhdGlvbkNvZGU/OiBzdHJpbmdcbiAgICB1c2VybmFtZT86IHN0cmluZ1xuICAgIGJpbmRJbmZvPzogYW55XG4gICAgbG9naW5UeXBlPzogc3RyaW5nXG4gIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICB0cnkge1xuICAgICAgLy8gMS4g6aqM6K+B6aqM6K+B56CBXG4gICAgICBjb25zdCB2ZXJpZnlSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnkoe1xuICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICgodmVyaWZ5UmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgdmVyaWZ5UmVzXG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAgIGNvbnN0IHsgdmVyaWZpY2F0aW9uX3Rva2VuIH0gPSB2ZXJpZnlSZXNcblxuICAgICAgLy8g5omL5py655m75b2V5Y+C5pWwXG4gICAgICBsZXQgdXNlcm5hbWUgPSB0aGlzLmZvcm1hdFBob25lKHJhd1VzZXJuYW1lKVxuICAgICAgbGV0IHNpZ25VcFBhcmFtOiBhbnkgPSB7IHBob25lX251bWJlcjogdXNlcm5hbWUgfVxuXG4gICAgICAvLyDpgq7nrrHnmbvlvZXlj4LmlbBcbiAgICAgIGlmIChsb2dpblR5cGUgPT09ICdlbWFpbCcpIHtcbiAgICAgICAgdXNlcm5hbWUgPSByYXdVc2VybmFtZVxuICAgICAgICBzaWduVXBQYXJhbSA9IHsgZW1haWw6IHVzZXJuYW1lIH1cbiAgICAgIH1cblxuICAgICAgLy8gMi4g5qC55o2u5piv5ZCm5bey57uP5piv55So5oi377yM5YiG5Yir6LWw55m75b2V5oiW5rOo5YaM6YC76L6RXG4gICAgICBpZiAodmVyaWZpY2F0aW9uSW5mby5pc191c2VyKSB7XG4gICAgICAgIC8vIOengeacieWMlueOr+Wig+aIluiAheiHquWumuS5ieW6lOeUqOi1sHYx54mI5pys55qE6ICB6YC76L6RXG4gICAgICAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25Jbih7XG4gICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBzaWduSW5SZXNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaW5kSW5mbykge1xuICAgICAgICAgIGNvbnN0IGJpbmRSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgICAgIHByb3ZpZGVyX3Rva2VuOiAoYmluZEluZm8gYXMgYW55KT8ucHJvdmlkZXJUb2tlbixcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKChiaW5kUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICAgIHRocm93IGJpbmRSZXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOiHquWumuS5ieW6lOeUqOi1sHNpZ25VcOmAu+i+kVxuICAgICAgICBjb25zdCBzaWduVXBSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAoe1xuICAgICAgICAgIC4uLnNpZ25VcFBhcmFtLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICBwcm92aWRlcl90b2tlbjogKGJpbmRJbmZvIGFzIGFueSk/LnByb3ZpZGVySWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKChzaWduVXBSZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IHNpZ25VcFJlc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUxvZ2luU3RhdGUoXG4gICAgcGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9LFxuICAgIG9wdGlvbnM/OiB7IGFzeW5jUmVmcmVzaFVzZXI/OiBib29sZWFuOyB1c2VySW5mbz86IGFueSB9LFxuICApOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBjb25zdCBsb2dpblN0YXRlID0gbmV3IExvZ2luU3RhdGUoe1xuICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlLFxuICAgIH0pXG5cbiAgICBhd2FpdCBsb2dpblN0YXRlLmNoZWNrTG9jYWxTdGF0ZUFzeW5jKClcblxuICAgIGlmIChvcHRpb25zPy51c2VySW5mbykge1xuICAgICAgbG9naW5TdGF0ZS51c2VyLnNldExvY2FsVXNlckluZm8ob3B0aW9ucy51c2VySW5mbylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnM/LmFzeW5jUmVmcmVzaFVzZXIpIHtcbiAgICAgICAgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCB7IGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05fSU4gfSlcblxuICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTiB9KVxuICAgIHJldHVybiBsb2dpblN0YXRlXG4gIH1cblxuICBhc3luYyBzZXRBY2Nlc3NLZXkoKSB7XG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gJydcbiAgICBsZXQgc2NvcGUgPSAnJ1xuICAgIGlmICh0aGlzLmNvbmZpZy5hY2Nlc3NLZXkpIHtcbiAgICAgIGFjY2Vzc1Rva2VuID0gdGhpcy5jb25maWcuYWNjZXNzS2V5XG4gICAgICBzY29wZSA9ICdhY2Nlc3NLZXknXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRJZCAmJiB0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRLZXkpIHtcbiAgICAgIGFjY2Vzc1Rva2VuID0gJydcbiAgICAgIHNjb3BlID0gREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRVxuICAgIH1cblxuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnNldEFjY2Vzc0tleUNyZWRlbnRpYWxzKHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgdG9rZW5fdHlwZTogJ0JlYXJlcicsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZSgrbmV3IERhdGUoKSArICtuZXcgRGF0ZSgpKSxcbiAgICAgICAgZXhwaXJlc19pbjogK25ldyBEYXRlKCkgKyArbmV3IERhdGUoKSxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignYWNjZXNzS2V5IGVycm9yOiAnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybWF0UGhvbmUocGhvbmU6IHN0cmluZykge1xuICAgIGlmICghL1xccysvLnRlc3QocGhvbmUpICYmIC9eXFwrXFxkezEsM31cXGQrLy50ZXN0KHBob25lKSkge1xuICAgICAgcmV0dXJuIHBob25lLnJlcGxhY2UoL14oXFwrXFxkezEsMn0pKFxcZCspJC8sICckMSAkMicpXG4gICAgfVxuICAgIHJldHVybiAvXlxcK1xcZHsxLDN9XFxzKy8udGVzdChwaG9uZSkgPyBwaG9uZSA6IGArODYgJHtwaG9uZX1gXG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUxpc3RlbmVycyhldmVudCwgc2Vzc2lvbiwgaW5mbyk6IE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2sge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGNhbGxiYWNrcykgPT4ge1xuICAgICAgY2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbGJhY2soZXZlbnQsIHNlc3Npb24sIGluZm8pXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYXV0aCBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2s6JywgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jb25maWcuZXZlbnRCdXM/Lm9uKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gcGFyYW1zPy5kYXRhPy5ldmVudFxuICAgICAgY29uc3QgaW5mbyA9IHBhcmFtcz8uZGF0YT8uaW5mb1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhOiB7IHNlc3Npb24gfSxcbiAgICAgIH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICB0aGlzLm5vdGlmeUxpc3RlbmVycyhldmVudCwgc2Vzc2lvbiwgaW5mbylcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9Vc2VyKHVzZXJJbmZvOiBhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPikge1xuICAgIGlmICghdXNlckluZm8pIHJldHVybiBudWxsXG5cbiAgICAvLyDkvJjlhYjkvb/nlKggdXNlckluZm8g5Lit55qE5pWw5o2u77yIVjMgQVBJ77yJXG4gICAgY29uc3QgZW1haWwgPSB1c2VySW5mbz8uZW1haWwgfHwgJydcbiAgICBjb25zdCBwaG9uZSA9IHVzZXJJbmZvPy5waG9uZV9udW1iZXIgfHwgJydcbiAgICBjb25zdCB1c2VySWQgPSB1c2VySW5mbz8uc3ViIHx8IHVzZXJJbmZvPy51aWQgfHwgJydcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdXNlcklkLFxuICAgICAgYXVkOiAnYXV0aGVudGljYXRlZCcsXG4gICAgICByb2xlOiB1c2VySW5mby5ncm91cHM/Lm1hcD8uKGdyb3VwID0+ICh0eXBlb2YgZ3JvdXAgPT09ICdzdHJpbmcnID8gZ3JvdXAgOiBncm91cC5pZCkpLFxuICAgICAgZW1haWw6IGVtYWlsIHx8ICcnLFxuICAgICAgZW1haWxfY29uZmlybWVkX2F0OiB1c2VySW5mbz8uZW1haWxfdmVyaWZpZWQgPyB1c2VySW5mby5jcmVhdGVkX2F0IDogdXNlckluZm8uY3JlYXRlZF9hdCxcbiAgICAgIHBob25lLFxuICAgICAgcGhvbmVfY29uZmlybWVkX2F0OiBwaG9uZSA/IHVzZXJJbmZvLmNyZWF0ZWRfYXQgOiB1bmRlZmluZWQsXG4gICAgICBjb25maXJtZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICBsYXN0X3NpZ25faW5fYXQ6ICh1c2VySW5mbyBhcyBhbnkpLmxhc3Rfc2lnbl9pbl9hdCxcbiAgICAgIGFwcF9tZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlcjogdXNlckluZm8ubG9naW5UeXBlPy50b0xvd2VyQ2FzZSgpIHx8ICdjbG91ZGJhc2UnLFxuICAgICAgICBwcm92aWRlcnM6IFt1c2VySW5mby5sb2dpblR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJ2Nsb3VkYmFzZSddLFxuICAgICAgfSxcbiAgICAgIHVzZXJfbWV0YWRhdGE6IHtcbiAgICAgICAgLy8gVjMgQVBJIOeUqOaIt+S/oeaBr1xuICAgICAgICBuYW1lOiB1c2VySW5mbz8ubmFtZSxcbiAgICAgICAgcGljdHVyZTogdXNlckluZm8/LnBpY3R1cmUsXG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mbz8udXNlcm5hbWUsIC8vIOeUqOaIt+WQjeensO+8jOmVv+W6piA1LTI0IOS9je+8jOaUr+aMgeWtl+espuS4reiLseaWh+OAgeaVsOWtl+OAgeeJueauiuWtl+espu+8iOS7heaUr+aMgV8t77yJ77yM5LiN5pSv5oyB5Lit5paHXG4gICAgICAgIGdlbmRlcjogdXNlckluZm8/LmdlbmRlcixcbiAgICAgICAgbG9jYWxlOiB1c2VySW5mbz8ubG9jYWxlLFxuICAgICAgICAvLyBWMiBBUEkg5YW85a6577yI5L2/55SoIGFueSDpgb/lhY3nsbvlnovplJnor6/vvIlcbiAgICAgICAgdWlkOiB1c2VySW5mby51aWQsXG4gICAgICAgIG5pY2tOYW1lOiB1c2VySW5mby5uaWNrTmFtZSB8fCB1c2VySW5mbz8ubmFtZSxcbiAgICAgICAgYXZhdGFyVXJsOiB1c2VySW5mby5hdmF0YXJVcmwgfHwgdXNlckluZm8ucGljdHVyZSxcbiAgICAgICAgbG9jYXRpb246IHVzZXJJbmZvLmxvY2F0aW9uLFxuICAgICAgICBoYXNQYXNzd29yZDogdXNlckluZm8uaGFzUGFzc3dvcmQsXG4gICAgICB9LFxuICAgICAgaWRlbnRpdGllczpcbiAgICAgICAgdXNlckluZm8/LnByb3ZpZGVycz8ubWFwKHAgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCB8fCAnJyxcbiAgICAgICAgICBpZGVudGl0eV9pZDogcC5pZCB8fCAnJyxcbiAgICAgICAgICB1c2VyX2lkOiB1c2VySWQsXG4gICAgICAgICAgaWRlbnRpdHlfZGF0YToge1xuICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHAuaWQsXG4gICAgICAgICAgICBwcm92aWRlcl91c2VyX2lkOiBwLnByb3ZpZGVyX3VzZXJfaWQsXG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm92aWRlcjogcC5pZCB8fCAnY2xvdWRiYXNlJyxcbiAgICAgICAgICBjcmVhdGVkX2F0OiB1c2VySW5mby5jcmVhdGVkX2F0LFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IHVzZXJJbmZvLnVwZGF0ZWRfYXQsXG4gICAgICAgICAgbGFzdF9zaWduX2luX2F0OiAodXNlckluZm8gYXMgYW55KS5sYXN0X3NpZ25faW5fYXQsXG4gICAgICAgIH0pKSB8fCBbXSxcbiAgICAgIGNyZWF0ZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICB1cGRhdGVkX2F0OiB1c2VySW5mby51cGRhdGVkX2F0LFxuICAgICAgaXNfYW5vbnltb3VzOiB1c2VySW5mby5uYW1lID09PSAnYW5vbnltb3VzJyxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Y+C5pWw5qCh6aqM6L6F5Yqp5pa55rOVXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFyYW1zKHBhcmFtczogYW55LCBydWxlczogeyBba2V5OiBzdHJpbmddOiB7IHJlcXVpcmVkPzogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0gfSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2tleSwgcnVsZV0gb2YgT2JqZWN0LmVudHJpZXMocnVsZXMpKSB7XG4gICAgICBpZiAocnVsZS5yZXF1aXJlZCAmJiAocGFyYW1zPy5ba2V5XSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtcz8uW2tleV0gPT09IG51bGwgfHwgcGFyYW1zPy5ba2V5XSA9PT0gJycpKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiBydWxlLm1lc3NhZ2UgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5qCh6aqM5b+F5aGr5Y+C5pWw57uE77yI6Iez5bCR5pyJ5LiA5Liq5Y+C5pWw5b+F6aG75pyJ5YC877yJXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXM6IGFueSwgZmllbGRHcm91cHM6IHN0cmluZ1tdW10sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gZmllbGRHcm91cHMuc29tZShncm91cCA9PiBncm91cC5zb21lKGZpZWxkID0+IHBhcmFtcz8uW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcz8uW2ZpZWxkXSAhPT0gbnVsbCAmJiBwYXJhbXM/LltmaWVsZF0gIT09ICcnKSwpXG5cbiAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZSB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHsgZXJyb3I6IEVycm9yIHwgbnVsbCB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuSU5JVElBTF9TRVNTSU9OIH0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElnbm9yZSBlcnJvcnMgd2hlbiBjaGVja2luZyBmb3IgZXhpc3RpbmcgY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9XG4gIH1cbn1cblxudHlwZSBUSW5pdEF1dGhPcHRpb25zID0gUGljazxcbklDbG91ZGJhc2VBdXRoQ29uZmlnLFxuJ3JlZ2lvbicgfCAncGVyc2lzdGVuY2UnIHwgJ2kxOG4nIHwgJ2FjY2Vzc0tleScgfCAndXNlV3hDbG91ZCcgfCAnYXV0aCdcbj4gJlxuUGFydGlhbDxBdXRoT3B0aW9ucz4gJiB7XG4gIGRldGVjdFNlc3Npb25JblVybD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXV0aEluc3RhbmNlKFxuICBjb25maWc6IFRJbml0QXV0aE9wdGlvbnMgJiB7IHNka1ZlcnNpb24/OiBzdHJpbmcgfSxcbiAgb3B0aW9ucz86IHtcbiAgICBjbGllbnRJZDogSUNsb3VkYmFzZUNvbmZpZ1snY2xpZW50SWQnXVxuICAgIGVudjogSUNsb3VkYmFzZUNvbmZpZ1snZW52J11cbiAgICBhcGlPcmlnaW46IHN0cmluZ1xuICAgIGNhY2hlPzogSUNsb3VkYmFzZUNhY2hlXG4gICAgcGxhdGZvcm0/OiBJQ2xvdWRiYXNlWydwbGF0Zm9ybSddXG4gICAgYXBwPzogSUNsb3VkYmFzZVxuICAgIGRlYnVnPzogSUNsb3VkYmFzZUF1dGhDb25maWdbJ2RlYnVnJ11cbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw/OiBJQ2xvdWRiYXNlQXV0aENvbmZpZ1snZGV0ZWN0U2Vzc2lvbkluVXJsJ11cbiAgfSxcbikge1xuICBjb25zdCB7IHJlZ2lvbiA9ICdhcC1zaGFuZ2hhaScsIGkxOG4sIGFjY2Vzc0tleSwgdXNlV3hDbG91ZCB9ID0gY29uZmlnXG4gIGNvbnN0IHBsYXRmb3JtID0gb3B0aW9ucz8ucGxhdGZvcm0gfHwgKHVzZURlZmF1bHRBZGFwdGVyLmJpbmQob3B0aW9ucykoKSBhcyBJQ2xvdWRiYXNlUGxhdGZvcm1JbmZvKVxuICBjb25zdCB7IHJ1bnRpbWUsIGFkYXB0ZXIgfSA9IHBsYXRmb3JtXG5cbiAgY29uc3QgeyBlbnYsIGNsaWVudElkLCBkZWJ1ZywgY2FjaGUsIGFwcDogY2xvdWRiYXNlIH0gPSBvcHRpb25zIHx8IHt9XG4gIGxldCB7IGFwaU9yaWdpbiB9ID0gb3B0aW9ucyB8fCB7fVxuICBpZiAoIWFwaU9yaWdpbikge1xuICAgIGFwaU9yaWdpbiA9IGBodHRwczovLyR7ZW52fS4ke3JlZ2lvbn0udGNiLWFwaS50ZW5jZW50Y2xvdWRhcGkuY29tYFxuICB9XG5cbiAgY29uc3QgY29tbW9uT3B0cyA9IHtcbiAgICBlbnYsXG4gICAgY2xpZW50SWQsXG4gICAgaTE4bixcbiAgICBhY2Nlc3NLZXksXG4gICAgdXNlV3hDbG91ZCxcbiAgICBldmVudEJ1czogbmV3IENsb3VkYmFzZUV2ZW50RW1pdHRlcigpLFxuICB9XG5cbiAgY29uc3Qgb2F1dGhJbnN0YW5jZSA9IG5ldyBDbG91ZGJhc2VPQXV0aCh1c2VBdXRoQWRhcHRlcih7XG4gICAgLi4uY29tbW9uT3B0cyxcbiAgICBhcGlPcmlnaW4sXG4gICAgYXBpUGF0aDogY29uZmlnPy5hcGlQYXRoIHx8IEFVVEhfQVBJX1BSRUZJWCxcbiAgICAvLyBAdG9kbyDku6XkuIvmnIDlpb3otbBhZGFwdG9y5aSE55CG77yM55uu5YmNb2F1dGjmqKHlnZfmsqHmjIlhZGFwdG9y5o6l5Y+j6K6+6K6hXG4gICAgc3RvcmFnZTogY29uZmlnPy5zdG9yYWdlLFxuICAgIGJhc2VSZXF1ZXN0OiBjb25maWc/LmJhc2VSZXF1ZXN0LFxuICAgIHJlcXVlc3Q6IGNvbmZpZz8ucmVxdWVzdCxcbiAgICBhbm9ueW1vdXNTaWduSW5GdW5jOiBjb25maWc/LmFub255bW91c1NpZ25JbkZ1bmMsXG4gICAgY2FwdGNoYU9wdGlvbnM6IGNvbmZpZz8uY2FwdGNoYU9wdGlvbnMsXG4gICAgd3hDbG91ZDogY29uZmlnPy53eENsb3VkLFxuICAgIGFkYXB0ZXIsXG4gICAgb25DcmVkZW50aWFsc0Vycm9yOiBvbkNyZWRlbnRpYWxzRXJyb3IoY29tbW9uT3B0cy5ldmVudEJ1cyksXG4gICAgaGVhZGVyczogeyAnWC1TREstVmVyc2lvbic6IGBAY2xvdWRiYXNlL2pzLXNkay8ke2NvbmZpZy5zZGtWZXJzaW9ufWAsIC4uLihjb25maWcuaGVhZGVycyB8fCB7fSkgfSxcbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw6IGNvbmZpZy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgZGVidWcsXG4gICAgYXV0aDogb3B0aW9ucy5hcHA/LmNvbmZpZz8uYXV0aCxcbiAgfSksKVxuXG4gIGNvbnN0IGF1dGhJbnN0YW5jZSA9IG5ldyBBdXRoKHtcbiAgICAuLi5jb21tb25PcHRzLFxuICAgIHJlZ2lvbixcbiAgICBwZXJzaXN0ZW5jZTogY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgIGRlYnVnLFxuICAgIGNhY2hlOlxuICAgICAgY2FjaGUgfHwgbmV3IENsb3VkYmFzZUNhY2hlKHtcbiAgICAgICAgcGVyc2lzdGVuY2U6IGNvbmZpZy5wZXJzaXN0ZW5jZSxcbiAgICAgICAga2V5czogeyB1c2VySW5mb0tleTogYHVzZXJfaW5mb18ke2Vudn1gIH0sXG4gICAgICAgIHBsYXRmb3JtSW5mbzogcGxhdGZvcm0sXG4gICAgICB9KSxcbiAgICBydW50aW1lOiBydW50aW1lIHx8ICd3ZWInLFxuICAgIF9mcm9tQXBwOiBjbG91ZGJhc2UsXG4gICAgb2F1dGhJbnN0YW5jZSxcbiAgICBhdXRoOiBvcHRpb25zLmFwcD8uY29uZmlnPy5hdXRoLFxuICB9KVxuXG4gIC8vIEluaXRpYWxpemUgc2Vzc2lvbiB3aXRoIHVzZXIgaW5mbyBjYWxsYmFja1xuICAvLyBUaGlzIGhhbmRsZXMgT0F1dGggY2FsbGJhY2sgVVJMIGRldGVjdGlvbiBhbmQgY3JlYXRlcyBsb2dpbiBzdGF0ZSBhdG9taWNhbGx5XG4gIG9hdXRoSW5zdGFuY2UuaW5pdGlhbGl6ZVNlc3Npb24oYXN5bmMgKGRhdGEsIGVycm9yKSA9PiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm5cblxuICAgIGlmIChkYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuU0lHTl9JTikge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbW1vbk9wdHMuZXZlbnRCdXMuZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgICAgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTixcbiAgICAgICAgICBpbmZvOiB7IC4uLmRhdGEsIGVycm9yIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudXNlcikge1xuICAgICAgICAvLyDkvb/nlKjlt7Lojrflj5bnmoQgdXNlciDkv6Hmga/liJvlu7ogTG9naW5TdGF0Ze+8jOWkjeeUqCBjcmVhdGVMb2dpblN0YXRlIOmAu+i+kVxuICAgICAgICAvLyDkvYbot7Pov4cgcmVmcmVzaCgpIOmBv+WFjeWGjeasoeivt+axgiBBUEkg5a+86Ie05q276ZSBXG4gICAgICAgIGF1dGhJbnN0YW5jZS5jcmVhdGVMb2dpblN0YXRlKHt9LCB7IHVzZXJJbmZvOiBkYXRhLnVzZXIgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZKSB7XG4gICAgICBjb21tb25PcHRzLmV2ZW50QnVzLmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwge1xuICAgICAgICBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuQklORF9JREVOVElUWSxcbiAgICAgICAgaW5mbzogeyAuLi5kYXRhLCBlcnJvciB9LFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHsgYXV0aEluc3RhbmNlLCBvYXV0aEluc3RhbmNlIH1cbn1cblxuY29uc3QgTkFNRVNQQUNFID0gJ2F1dGgnXG5cbi8qKlxuICog6K6h566X5Lik5Liq5a2X56ym5Liy5LmL6Ze055qE57yW6L6R6Led56a777yITGV2ZW5zaHRlaW4gZGlzdGFuY2XvvIlcbiAqIOeUqOS6juWcqOeUqOaIt+iwg+eUqOS4jeWtmOWcqOeahCBBdXRoIOaWueazleaXtu+8jOaOqOiNkOacgOebuOS8vOeahOaWueazleWQjVxuICovXG5mdW5jdGlvbiBsZXZlbnNodGVpbkRpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbWF0cml4OiBudW1iZXJbXVtdID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgIG1hdHJpeFtpXSA9IFtpXVxuICB9XG4gIGZvciAobGV0IGogPSAwOyBqIDw9IGIubGVuZ3RoOyBqKyspIHtcbiAgICBtYXRyaXhbMF1bal0gPSBqXG4gIH1cbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAxOyBqIDw9IGIubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGNvc3QgPSBhW2kgLSAxXS50b0xvd2VyQ2FzZSgpID09PSBiW2ogLSAxXS50b0xvd2VyQ2FzZSgpID8gMCA6IDFcbiAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBtYXRyaXhbaSAtIDFdW2pdICsgMSxcbiAgICAgICAgbWF0cml4W2ldW2ogLSAxXSArIDEsXG4gICAgICAgIG1hdHJpeFtpIC0gMV1baiAtIDFdICsgY29zdCxcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdHJpeFthLmxlbmd0aF1bYi5sZW5ndGhdXG59XG5cbi8qKlxuICog5Zyo5pa55rOV5YiX6KGo5Lit5p+l5om+5LiO55uu5qCH5ZCN56ew5pyA55u45Ly855qE5pa55rOVXG4gKiBAcmV0dXJucyDmnIDnm7jkvLznmoTmlrnms5XlkI3vvIzlpoLmnpzmsqHmnInotrPlpJ/nm7jkvLznmoTliJnov5Tlm54gbnVsbFxuICovXG5mdW5jdGlvbiBmaW5kU2ltaWxhck1ldGhvZCh0YXJnZXQ6IHN0cmluZywgbWV0aG9kczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgbGV0IGJlc3RNYXRjaDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IGJlc3REaXN0YW5jZSA9IEluZmluaXR5XG5cbiAgZm9yIChjb25zdCBtZXRob2Qgb2YgbWV0aG9kcykge1xuICAgIC8vIOi3s+i/h+engeacieaWueazleWSjOaehOmAoOWHveaVsFxuICAgIGlmIChtZXRob2Quc3RhcnRzV2l0aCgnXycpIHx8IG1ldGhvZCA9PT0gJ2NvbnN0cnVjdG9yJykgY29udGludWVcbiAgICBjb25zdCBkaXN0YW5jZSA9IGxldmVuc2h0ZWluRGlzdGFuY2UodGFyZ2V0LCBtZXRob2QpXG4gICAgaWYgKGRpc3RhbmNlIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICBiZXN0RGlzdGFuY2UgPSBkaXN0YW5jZVxuICAgICAgYmVzdE1hdGNoID0gbWV0aG9kXG4gICAgfVxuICB9XG4gIHJldHVybiBiZXN0TWF0Y2hcbn1cblxuY29uc3QgY29tcG9uZW50OiBJQ2xvdWRiYXNlQ29tcG9uZW50ID0ge1xuICBuYW1lOiBDT01QT05FTlRfTkFNRSxcbiAgbmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gIGVudGl0eShjb25maWc/OiBUSW5pdEF1dGhPcHRpb25zKSB7XG4gICAgY29uc3QgYXV0aCA9IGZ1bmN0aW9uIChjb25maWc/OiBUSW5pdEF1dGhPcHRpb25zKSB7XG4gICAgICBpZiAodGhpcy5hdXRoSW5zdGFuY2UgJiYgIWNvbmZpZykge1xuICAgICAgICAvLyBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnZXZlcnkgY2xvdWRiYXNlIGluc3RhbmNlIHNob3VsZCBoYXMgb25seSBvbmUgYXV0aCBvYmplY3QnKVxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgICAgIH1cblxuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHtcbiAgICAgICAgcmVnaW9uOiAnJyxcbiAgICAgICAgcGVyc2lzdGVuY2U6ICdsb2NhbCcsXG4gICAgICAgIGFwaVBhdGg6IEFVVEhfQVBJX1BSRUZJWCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYWRhcHRlciB9ID0gdGhpcy5wbGF0Zm9ybVxuICAgICAgLy8g5aaC5LiN5piO56Gu5oyH5a6acGVyc2lzdGVuY2XliJnkvJjlhYjlj5blkITlubPlj7BhZGFwdGVy6aaW6YCJ77yM5YW25qyhbG9jYWxTdG9yYWdlXG4gICAgICBjb25zdCBuZXdQZXJzaXN0ZW5jZSA9IGNvbmZpZy5wZXJzaXN0ZW5jZSB8fCBhZGFwdGVyLnByaW1hcnlTdG9yYWdlXG4gICAgICBpZiAobmV3UGVyc2lzdGVuY2UgJiYgbmV3UGVyc2lzdGVuY2UgIT09IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHsgcGVyc2lzdGVuY2U6IG5ld1BlcnNpc3RlbmNlIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXV0aEluc3RhbmNlLCBvYXV0aEluc3RhbmNlIH0gPSBnZW5lcmF0ZUF1dGhJbnN0YW5jZShcbiAgICAgICAge1xuICAgICAgICAgIHd4Q2xvdWQ6IHRoaXMuY29uZmlnLnd4Q2xvdWQsXG4gICAgICAgICAgc3RvcmFnZTogdGhpcy5jb25maWcuc3RvcmFnZSxcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgcGVyc2lzdGVuY2U6IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgICAgICAgIGkxOG46IHRoaXMuY29uZmlnLmkxOG4sXG4gICAgICAgICAgYWNjZXNzS2V5OiB0aGlzLmNvbmZpZy5hY2Nlc3NLZXksXG4gICAgICAgICAgdXNlV3hDbG91ZDogdGhpcy5jb25maWcudXNlV3hDbG91ZCxcbiAgICAgICAgICBzZGtWZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgICAgZGV0ZWN0U2Vzc2lvbkluVXJsOiB0aGlzLmNvbmZpZy5hdXRoPy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgICBjbGllbnRJZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICAgICAgYXBpT3JpZ2luOiB0aGlzLnJlcXVlc3QuZ2V0QmFzZUVuZFBvaW50KHRoaXMuY29uZmlnLmVuZFBvaW50TW9kZSB8fCAnQ0xPVURfQVBJJyksXG4gICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgICAgYXBwOiB0aGlzLFxuICAgICAgICAgIGRlYnVnOiB0aGlzLmNvbmZpZy5kZWJ1ZyxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgICB0aGlzLmF1dGhJbnN0YW5jZSA9IGF1dGhJbnN0YW5jZVxuXG4gICAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoUHJvdG8gPSBhdXRoLmNhbGwodGhpcywgY29uZmlnKVxuICAgIE9iamVjdC5hc3NpZ24oYXV0aCwgYXV0aFByb3RvKVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihhdXRoLCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXV0aFByb3RvKSlcblxuICAgIC8vIOWMheijhSBQcm94ee+8jOW9k+eUqOaIt+iwg+eUqOS4jeWtmOWcqOeahOaWueazleaXtuaPkOS+myBcIkRpZCB5b3UgbWVhbj9cIiDmj5DnpLpcbiAgICBjb25zdCBhdXRoV2l0aEhpbnQgPSB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnXG4gICAgICA/IG5ldyBQcm94eShhdXRoLCB7XG4gICAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKVxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOafpeaJvuacgOebuOS8vOeahOaWueazleWQjVxuICAgICAgICAgIGNvbnN0IGFsbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSlcbiAgICAgICAgICAgIC5jb25jYXQoT2JqZWN0LmtleXModGFyZ2V0KSlcbiAgICAgICAgICAgIC5maWx0ZXIoayA9PiB0eXBlb2YgdGFyZ2V0W2tdID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBmaW5kU2ltaWxhck1ldGhvZChwcm9wLCBhbGxLZXlzKVxuICAgICAgICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtDbG91ZEJhc2UgQXV0aF0gYXV0aC4ke3Byb3B9IGlzIG5vdCBhIGZ1bmN0aW9uLiBEaWQgeW91IG1lYW46IGF1dGguJHtzdWdnZXN0aW9ufSgpID9gKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICA6IGF1dGhcblxuICAgIHRoaXNbTkFNRVNQQUNFXSA9IGF1dGhXaXRoSGludFxuICAgIHJldHVybiBhdXRoV2l0aEhpbnRcbiAgfSxcbn1cblxudHJ5IHtcbiAgLy8g5bCd6K+V6Ieq5Yqo5rOo5YaM6Iez5YWo5bGA5Y+Y6YePY2xvdWRiYXNlXG4gIC8vIOatpOihjOS4uuWPquWcqOa1j+iniOWZqOeOr+Wig+S4i+acieaViFxuICBjbG91ZGJhc2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxufSBjYXRjaCAoZSkge31cblxuZXhwb3J0IHsgVXNlckluZm8sIEF1dGgsIFdlaXhpbkF1dGhQcm92aWRlciwgQ3VzdG9tQXV0aFByb3ZpZGVyLCBBbm9ueW1vdXNBdXRoUHJvdmlkZXIgfVxuLy8g5a+85Ye66ZSZ6K+v5YiG57G75p6a5Li+5ZKMIEF1dGhFcnJvcu+8jOaWueS+v+W8gOWPkeiAhei/m+ihjOmUmeivr+WIhuexu+WkhOeQhlxuZXhwb3J0IHsgQXV0aEVycm9yQ2F0ZWdvcnksIEF1dGhFcnJvciB9IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgnXG4vKipcbiAqIEBhcGkg5omL5Yqo5rOo5YaM6IezY2xvdWRiYXNlIGFwcFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBdXRoKGFwcDogUGljazxJQ2xvdWRiYXNlLCAncmVnaXN0ZXJDb21wb25lbnQnPikge1xuICB0cnkge1xuICAgIGFwcC5yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLndhcm4oZSlcbiAgfVxufVxuIl19
|