oxygen-cli 1.20.0 → 1.21.0-beta.2
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/CHANGELOG.md +8 -0
- package/build/core/OxygenCore.js +3 -2
- package/build/errors/helper.js +6 -2
- package/build/lib/util.js +22 -9
- package/build/ox_modules/module-db.js +2 -2
- package/build/ox_modules/module-email.js +42 -49
- package/build/ox_modules/module-eyes.js +4 -21
- package/build/ox_modules/module-http.js +59 -49
- package/build/ox_modules/module-mailinator.js +25 -32
- package/build/ox_modules/module-mob/commands/selectWindow.js +4 -7
- package/build/ox_modules/module-mob/commands/sendKeys.js +2 -2
- package/build/ox_modules/module-mob.js +65 -52
- package/build/ox_modules/module-pdf.js +12 -32
- package/build/ox_modules/module-proxy.js +9 -9
- package/build/ox_modules/module-serial.js +14 -12
- package/build/ox_modules/module-soap.js +88 -78
- package/build/ox_modules/module-twilio.js +27 -27
- package/build/ox_modules/module-utils.js +29 -5
- package/build/ox_modules/module-web/commands/selectWindow.js +4 -7
- package/build/ox_modules/module-web/commands/waitForNotExist.js +2 -3
- package/build/ox_modules/module-web.js +88 -64
- package/build/ox_modules/utils.js +13 -2
- package/build/runners/WorkerProcess.js +22 -20
- package/package.json +2 -1
package/build/errors/helper.js
CHANGED
|
@@ -61,7 +61,9 @@ const ERROR_CODES = {
|
|
|
61
61
|
ASSERT_PASSED: 'ASSERT_PASSED',
|
|
62
62
|
MODULE_NOT_FOUND: 'MODULE_NOT_FOUND',
|
|
63
63
|
FILE_BROWSE_ERROR: 'FILE_BROWSE_ERROR',
|
|
64
|
-
CSV_ERROR: 'CSV_ERROR'
|
|
64
|
+
CSV_ERROR: 'CSV_ERROR',
|
|
65
|
+
CRYPTO_ERROR: 'CRYPTO_ERROR',
|
|
66
|
+
DNS_ERROR: 'DNS_ERROR'
|
|
65
67
|
};
|
|
66
68
|
const CHAI_ERROR_CODES = {
|
|
67
69
|
AssertionError: ERROR_CODES.ASSERT_ERROR
|
|
@@ -156,6 +158,8 @@ module.exports = {
|
|
|
156
158
|
return new _OxygenError.default(ERROR_CODES.SELENIUM_SESSION_TIMEOUT, err.message);
|
|
157
159
|
} else if (err && err.message.includes('socket hang up')) {
|
|
158
160
|
return new _OxygenError.default(ERROR_CODES.SELENIUM_SESSION_TIMEOUT, err.message);
|
|
161
|
+
} else if (err && err.message.includes('Timed out receiving message from rendere')) {
|
|
162
|
+
return new _OxygenError.default(ERROR_CODES.SELENIUM_SESSION_TIMEOUT, err.message);
|
|
159
163
|
}
|
|
160
164
|
|
|
161
165
|
var oxErrorCode = CHAI_ERROR_CODES[errType];
|
|
@@ -278,4 +282,4 @@ function extractOriginalError(msg) {
|
|
|
278
282
|
|
|
279
283
|
return msg;
|
|
280
284
|
}
|
|
281
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvaGVscGVyLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiRVJST1JfQ09ERVMiLCJTQ1JJUFRfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiQVNTRVJUX0VSUk9SIiwiUERGX0VSUk9SIiwiVkVSSUZZX0VSUk9SIiwiRUxFTUVOVF9OT1RfRk9VTkQiLCJGUkFNRV9OT1RfRk9VTkQiLCJVTktOT1dOX0NPTU1BTkRfRVJST1IiLCJTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRSIsIkVMRU1FTlRfTk9UX1ZJU0lCTEUiLCJFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUiLCJMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMiLCJFTEVNRU5UX1NUSUxMX0VYSVNUUyIsIkJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUiIsIlRJTUVPVVQiLCJXSU5ET1dfTk9UX0ZPVU5EIiwiVU5FWFBFQ1RFRF9BTEVSVF9PUEVOIiwiTk9fQUxFUlRfT1BFTl9FUlJPUiIsIk1BSUxJTkFUT1JfRVJST1IiLCJBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1IiLCJTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiIsIkNIUk9NRURSSVZFUl9FUlJPUiIsIldFQkRSSVZFUl9FUlJPUiIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJEQl9RVUVSWV9FUlJPUiIsIlNPQVBfRVJST1IiLCJOT1RfSU1QTEVNRU5URURfRVJST1IiLCJTRVJJQUxfUE9SVF9FUlJPUiIsIkhUVFBfRVJST1IiLCJFTUFJTF9FUlJPUiIsIk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IiLCJERVZJQ0VfTk9UX0ZPVU5EIiwiUEFSQU1FVEVSU19FUlJPUiIsIklOVkFMSURfQ0FQQUJJTElUSUVTIiwiQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SIiwiQVBQSVVNX0NPTk5FQ1RJT05fRVJST1IiLCJBUFBJVU1fU0VTU0lPTl9FUlJPUiIsIlNFTEVOSVVNX1NFU1NJT05fRVJST1IiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SIiwiVVJMX09QRU5fRVJST1IiLCJPUFRJT05fTk9UX0ZPVU5EIiwiQVRUUklCVVRFX05PVF9GT1VORCIsIkVMRU1FTlRfU1RBVEVfRVJST1IiLCJNT0JJTEVfQ09OVEVYVF9FUlJPUiIsIkFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUiIsIlRXSUxJT19FUlJPUiIsIkhPT0tfRVJST1IiLCJOT1RfU1VQUE9SVEVEIiwiQVNTRVJUX1BBU1NFRCIsIk1PRFVMRV9OT1RfRk9VTkQiLCJGSUxFX0JST1dTRV9FUlJPUiIsIkNTVl9FUlJPUiIsIkNIQUlfRVJST1JfQ09ERVMiLCJBc3NlcnRpb25FcnJvciIsIlNDUklQVF9FUlJPUl9DT0RFUyIsIlR5cGVFcnJvciIsIlN5bnRheEVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJtb2R1bGUiLCJleHBvcnRzIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsImVyciIsIk94RXJyb3IiLCJnZXRPeHlnZW5FcnJvciIsInR5cGUiLCJtZXNzYWdlIiwiZGF0YSIsImxvY2F0aW9uIiwic3RhY2t0cmFjZSIsImdldERiRXJyb3JNZXNzYWdlIiwib2RiY0Vycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIm1hcCIsIml0ZW0iLCJjbWQiLCJhcmdzIiwiZXJyVHlwZSIsIm5hbWUiLCJpbmNsdWRlcyIsIm1hdGNoZXMiLCJtYXRjaCIsInN0YXJ0c1dpdGgiLCJleHRyYWN0T3JpZ2luYWxFcnJvciIsIk9SSUdJTkFMX0VSUk9SX01FU1NBR0UiLCJpbnNwZWN0IiwiY29kZSIsIm94RXJyb3JDb2RlIiwiQVNTRVJUIiwiaW5kZXhPZiIsIlZFUklGWSIsImNvbnNvbGUiLCJsb2ciLCJlcnJNZXNzYWdlIiwiZ2V0U2VsZW5pdW1Jbml0RXJyb3IiLCJpZVpvb21FcnJvck1zZyIsInRvU3RyaW5nIiwiY2hyb21lRHJpdmVyTXNnIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwiZ2V0QXNzZXJ0RXJyb3IiLCJleHBlY3RlZCIsImFjdHVhbCIsInJlcGxhY2UiLCJlcnJvckNvZGUiLCJVTktOT1dOX0VSUk9SX01FU1NBR0UiLCJtc2ciLCJlcnJvckluZGV4MSIsImVycm9ySW5kZXgyIiwic3Vic3RyaW5nIiwidW5rbm93bkVycm9ySW5kZXgiXSwibWFwcGluZ3MiOiI7Ozs7QUFhQTs7OztBQUNBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRUEsTUFBTUMsV0FBVyxHQUFHO0FBQ2hCQyxFQUFBQSxZQUFZLEVBQUUsY0FERTtBQUVoQkMsRUFBQUEsYUFBYSxFQUFFLGVBRkM7QUFHaEJDLEVBQUFBLFlBQVksRUFBRSxjQUhFO0FBSWhCQyxFQUFBQSxTQUFTLEVBQUUsV0FKSztBQUtoQkMsRUFBQUEsWUFBWSxFQUFFLGNBTEU7QUFNaEJDLEVBQUFBLGlCQUFpQixFQUFFLG1CQU5IO0FBT2hCQyxFQUFBQSxlQUFlLEVBQUUsaUJBUEQ7QUFRaEJDLEVBQUFBLHFCQUFxQixFQUFFLHVCQVJQO0FBU2hCQyxFQUFBQSx1QkFBdUIsRUFBRSx5QkFUVDtBQVVoQkMsRUFBQUEsbUJBQW1CLEVBQUUscUJBVkw7QUFXaEJDLEVBQUFBLHdCQUF3QixFQUFFLDBCQVhWO0FBWWhCQyxFQUFBQSxpQ0FBaUMsRUFBRSxtQ0FabkI7QUFhaEJDLEVBQUFBLG9CQUFvQixFQUFFLHNCQWJOO0FBY2hCQyxFQUFBQSx3QkFBd0IsRUFBRSwwQkFkVjtBQWVoQkMsRUFBQUEsT0FBTyxFQUFFLFNBZk87QUFnQmhCQyxFQUFBQSxnQkFBZ0IsRUFBRSxrQkFoQkY7QUFpQmhCQyxFQUFBQSxxQkFBcUIsRUFBRSx1QkFqQlA7QUFrQmhCQyxFQUFBQSxtQkFBbUIsRUFBRSxxQkFsQkw7QUFtQmhCQyxFQUFBQSxnQkFBZ0IsRUFBRSxrQkFuQkY7QUFvQmhCQyxFQUFBQSx3QkFBd0IsRUFBRSwwQkFwQlY7QUFxQmhCQyxFQUFBQSwwQkFBMEIsRUFBRSw0QkFyQlo7QUFzQmhCQyxFQUFBQSxrQkFBa0IsRUFBRSxv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QXNCLEdBQUcsa0JBQS9CO0FBQ0EsTUFBTW9CLHFCQUFxQixHQUFHLGlCQUE5Qjs7QUFFQSxTQUFTckIsb0JBQVQsQ0FBOEJzQixHQUE5QixFQUFtQztBQUMvQixNQUFJLENBQUNBLEdBQUwsRUFBVTtBQUNOLFdBQU8sRUFBUDtBQUNIOztBQUVELE1BQUlDLFdBQVcsR0FBR0QsR0FBRyxDQUFDaEIsT0FBSixDQUFZTCxzQkFBWixDQUFsQjs7QUFDQSxNQUFJc0IsV0FBVyxLQUFLLENBQUMsQ0FBckIsRUFBd0I7QUFDcEIsV0FBT0QsR0FBUDtBQUNIOztBQUdELE1BQUlFLFdBQVcsR0FBR0YsR0FBRyxDQUFDaEIsT0FBSixDQUFZTCxzQkFBWixFQUFvQ3NCLFdBQVcsR0FBR3RCLHNCQUFzQixDQUFDWixNQUF6RSxDQUFsQjtBQUVBaUMsRUFBQUEsR0FBRyxHQUFHQSxHQUFHLENBQUNHLFNBQUosQ0FBYyxDQUFDRCxXQUFXLEdBQUcsQ0FBQyxDQUFmLEdBQW1CQSxXQUFuQixHQUFpQ0QsV0FBbEMsSUFBa0R0QixzQkFBc0IsQ0FBQ1osTUFBdkYsQ0FBTjtBQUdBLE1BQUlxQyxpQkFBaUIsR0FBR0osR0FBRyxDQUFDaEIsT0FBSixDQUFZZSxxQkFBWixDQUF4Qjs7QUFDQSxNQUFJSyxpQkFBaUIsR0FBRyxDQUFDLENBQXpCLEVBQTRCO0FBQ3hCLFdBQU9KLEdBQUcsQ0FBQ0csU0FBSixDQUFjQyxpQkFBaUIsR0FBR0wscUJBQXFCLENBQUNoQyxNQUF4RCxDQUFQO0FBQ0g7O0FBRUQsU0FBT2lDLEdBQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBtb2R1bGUgZm9yIGhhbmRsaW5nIGFuZCBjb252ZXJ0aW5nIHZhcmlvdXMgZXJyb3IgdHlwZXNcclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuL094eWdlbkVycm9yJztcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuXHJcbmNvbnN0IEVSUk9SX0NPREVTID0ge1xyXG4gICAgU0NSSVBUX0VSUk9SOiAnU0NSSVBUX0VSUk9SJyxcclxuICAgIFVOS05PV05fRVJST1I6ICdVTktOT1dOX0VSUk9SJyxcclxuICAgIEFTU0VSVF9FUlJPUjogJ0FTU0VSVF9FUlJPUicsXHJcbiAgICBQREZfRVJST1I6ICdQREZfRVJST1InLFxyXG4gICAgVkVSSUZZX0VSUk9SOiAnVkVSSUZZX0VSUk9SJyxcclxuICAgIEVMRU1FTlRfTk9UX0ZPVU5EOiAnRUxFTUVOVF9OT1RfRk9VTkQnLFxyXG4gICAgRlJBTUVfTk9UX0ZPVU5EOiAnRlJBTUVfTk9UX0ZPVU5EJyxcclxuICAgIFVOS05PV05fQ09NTUFORF9FUlJPUjogJ1VOS05PV05fQ09NTUFORF9FUlJPUicsXHJcbiAgICBTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRTogJ1NUQUxFX0VMRU1FTlRfUkVGRVJFTkNFJyxcclxuICAgIEVMRU1FTlRfTk9UX1ZJU0lCTEU6ICdFTEVNRU5UX05PVF9WSVNJQkxFJyxcclxuICAgIEVMRU1FTlRfTk9UX0lOVEVSQUNUQUJMRTogJ0VMRU1FTlRfTk9UX0lOVEVSQUNUQUJMRScsXHJcbiAgICBMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFM6ICdMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMnLFxyXG4gICAgRUxFTUVOVF9TVElMTF9FWElTVFM6ICdFTEVNRU5UX1NUSUxMX0VYSVNUUycsXHJcbiAgICBCUk9XU0VSX0pTX0VYRUNVVEVfRVJST1I6ICdCUk9XU0VSX0pTX0VYRUNVVEVfRVJST1InLFxyXG4gICAgVElNRU9VVDogJ1RJTUVPVVQnLFxyXG4gICAgV0lORE9XX05PVF9GT1VORDogJ1dJTkRPV19OT1RfRk9VTkQnLFxyXG4gICAgVU5FWFBFQ1RFRF9BTEVSVF9PUEVOOiAnVU5FWFBFQ1RFRF9BTEVSVF9PUEVOJyxcclxuICAgIE5PX0FMRVJUX09QRU5fRVJST1I6ICdOT19BTEVSVF9PUEVOX0VSUk9SJyxcclxuICAgIE1BSUxJTkFUT1JfRVJST1I6ICdNQUlMSU5BVE9SX0VSUk9SJyxcclxuICAgIEFQUElVTV9VTlJFQUNIQUJMRV9FUlJPUjogJ0FQUElVTV9VTlJFQUNIQUJMRV9FUlJPUicsXHJcbiAgICBTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUjogJ1NFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SJyxcclxuICAgIENIUk9NRURSSVZFUl9FUlJPUjogJ0NIUk9NRURSSVZFUl9FUlJPUicsXHJcbiAgICBXRUJEUklWRVJfRVJST1I6ICdXRUJEUklWRVJfRVJST1InLFxyXG4gICAgREJfQ09OTkVDVElPTl9FUlJPUjogJ0RCX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgREJfUVVFUllfRVJST1I6ICdEQl9RVUVSWV9FUlJPUicsXHJcbiAgICBTT0FQX0VSUk9SOiAnU09BUF9FUlJPUicsXHJcbiAgICBOT1RfSU1QTEVNRU5URURfRVJST1I6ICdOT1RfSU1QTEVNRU5URURfRVJST1InLFxyXG4gICAgU0VSSUFMX1BPUlRfRVJST1I6ICdTRVJJQUxfUE9SVF9FUlJPUicsXHJcbiAgICBIVFRQX0VSUk9SOiAnSFRUUF9FUlJPUicsXHJcbiAgICBFTUFJTF9FUlJPUjogJ0VNQUlMX0VSUk9SJyxcclxuICAgIE1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1I6ICdNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SJyxcclxuICAgIERFVklDRV9OT1RfRk9VTkQ6ICdERVZJQ0VfTk9UX0ZPVU5EJyxcclxuICAgIFBBUkFNRVRFUlNfRVJST1I6ICdQQVJBTUVURVJTX0VSUk9SJyxcclxuICAgIElOVkFMSURfQ0FQQUJJTElUSUVTOiAnSU5WQUxJRF9DQVBBQklMSVRJRVMnLFxyXG4gICAgQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SOiAnQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SJyxcclxuICAgIEFQUElVTV9DT05ORUNUSU9OX0VSUk9SOiAnQVBQSVVNX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgQVBQSVVNX1NFU1NJT05fRVJST1I6ICdBUFBJVU1fU0VTU0lPTl9FUlJPUicsXHJcbiAgICBTRUxFTklVTV9TRVNTSU9OX0VSUk9SOiAnU0VMRU5JVU1fU0VTU0lPTl9FUlJPUicsXHJcbiAgICBTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQ6ICdTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQnLFxyXG4gICAgU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUjogJ1NFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgVVJMX09QRU5fRVJST1I6ICdVUkxfT1BFTl9FUlJPUicsXHJcbiAgICBPUFRJT05fTk9UX0ZPVU5EOiAnT1BUSU9OX05PVF9GT1VORCcsXHJcbiAgICBBVFRSSUJVVEVfTk9UX0ZPVU5EOiAnQVRUUklCVVRFX05PVF9GT1VORCcsXHJcbiAgICBFTEVNRU5UX1NUQVRFX0VSUk9SOiAnRUxFTUVOVF9TVEFURV9FUlJPUicsXHJcbiAgICBNT0JJTEVfQ09OVEVYVF9FUlJPUjogJ01PQklMRV9DT05URVhUX0VSUk9SJyxcclxuICAgIEFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUjogJ0FQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUicsXHJcbiAgICBUV0lMSU9fRVJST1I6ICdUV0lMSU9fRVJST1InLFxyXG4gICAgSE9PS19FUlJPUjogJ0hPT0tfRVJST1InLFxyXG4gICAgTk9UX1NVUFBPUlRFRDogJ05PVF9TVVBQT1JURUQnLFxyXG4gICAgQVNTRVJUX1BBU1NFRDogJ0FTU0VSVF9QQVNTRUQnLFxyXG4gICAgTU9EVUxFX05PVF9GT1VORDogJ01PRFVMRV9OT1RfRk9VTkQnLFxyXG4gICAgRklMRV9CUk9XU0VfRVJST1I6ICdGSUxFX0JST1dTRV9FUlJPUicsXHJcbiAgICBDU1ZfRVJST1I6ICdDU1ZfRVJST1InXHJcbn07XHJcblxyXG4vLyBDaGFpIHRvIE94eWdlbiBlcnJvciBjb2RlcyBtYXBwaW5nXHJcbmNvbnN0IENIQUlfRVJST1JfQ09ERVMgPSB7XHJcbiAgICBBc3NlcnRpb25FcnJvcjogRVJST1JfQ09ERVMuQVNTRVJUX0VSUk9SXHJcbn07XHJcblxyXG4vLyBHZW5lcmFsIEphdmFTY3JpcHQgZXJyb3IgY29kZXMgbWFwcGluZ1xyXG5jb25zdCBTQ1JJUFRfRVJST1JfQ09ERVMgPSB7XHJcbiAgICBUeXBlRXJyb3I6IEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUixcclxuICAgIFN5bnRheEVycm9yOiBFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsXHJcbiAgICBSZWZlcmVuY2VFcnJvcjogRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBnZXRGYWlsdXJlRnJvbUVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoIWVycikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgT3hFcnJvcikpIHtcclxuICAgICAgICAgICAgZXJyID0gdGhpcy5nZXRPeHlnZW5FcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiBlcnIudHlwZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGRhdGE6IGVyci5kYXRhLFxyXG4gICAgICAgICAgICBsb2NhdGlvbjogZXJyLmxvY2F0aW9uLFxyXG4gICAgICAgICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBnZXREYkVycm9yTWVzc2FnZTogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGVyciAmJiBlcnIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICBtZXNzYWdlICs9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBlcnIgJiZcclxuICAgICAgICAgICAgZXJyLm9kYmNFcnJvcnMgJiZcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShlcnIub2RiY0Vycm9ycykgJiZcclxuICAgICAgICAgICAgZXJyLm9kYmNFcnJvcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBpdGVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICc6ICcgK2l0ZW0ubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH0sXHJcbiAgICBnZXRPeHlnZW5FcnJvcjogZnVuY3Rpb24oZXJyLCBtb2R1bGUsIGNtZCwgYXJncykge1xyXG4gICAgICAgIC8vIHJldHVybiB0aGUgZXJyb3IgYXMgaXMgaWYgaXQgaGFzIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWRcclxuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgT3hFcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVyclR5cGUgPSBlcnIudHlwZSB8fCBlcnIubmFtZSB8fCB0eXBlb2YgZXJyO1xyXG4gICAgICAgIC8vIGhhbmRsZSBcIkNhbid0IGNhbGwgPGNvbW1hbmQ+IG9uIGVsZW1lbnQgd2l0aCBzZWxlY3RvciA8c2VsZWN0b3I+IGJlY2F1c2UgZWxlbWVudCB3YXNuJ3QgZm91bmRcIlxyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnYmVjYXVzZSBlbGVtZW50IHdhc25cXCd0IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX0ZPVU5ELCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaGFuZGxlIFwiaW52YWxpZCBhcmd1bWVudDogVW5zdXBwb3J0ZWQgbG9jYXRvciBzdHJhdGVneTogLWFuZHJvaWQgdWlhdXRvbWF0b3JcIiBmb3IgbW9iaWxlLlxyXG4gICAgICAgIC8vIHVzdWFsbHkgZHVlIHRvIG5vdCB1c2luZyB0aGUgY29ycmVjdCBjb250ZXh0XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1Vuc3VwcG9ydGVkIGxvY2F0b3Igc3RyYXRlZ3knKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC9pbnZhbGlkIGFyZ3VtZW50OiAoLiopL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuTU9CSUxFX0NPTlRFWFRfRVJST1IsIChtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkgK1xyXG4gICAgICAgICAgICAgICAgJy4gTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgbW9iaWxlIGNvbnRleHQuIFNlZSBtb2Iuc2V0TmF0aXZlQ29udGV4dCBhbmQgbW9iLnNldFdlYlZpZXdDb250ZXh0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgXCJpbnZhbGlkIHNlbGVjdG9yOiBVbmFibGUgdG8gbG9jYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgeHBhdGggZXhwcmVzc2lvblwiXHJcbiAgICAgICAgLy8gdXN1YWxseSBkdWUgdG8gaW52YWxpZCB4cGF0aFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gbG9jYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgeHBhdGggZXhwcmVzc2lvbicpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhUaGUgc3RyaW5nICcuKicgaXMgbm90IGEgdmFsaWQgWFBhdGggZXhwcmVzc2lvbi4pL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMiA/IG1hdGNoZXNbMV0gOiBlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIGNzcyBsb2NhdG9yIG9uIENocm9tZS9JRS4gZS5nLiBjc3M9I1xcOnAwXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0FuIGludmFsaWQgb3IgaWxsZWdhbCBzZWxlY3RvciB3YXMgc3BlY2lmaWVkJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgJ0FuIGludmFsaWQgb3IgaWxsZWdhbCBzZWxlY3RvciB3YXMgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgY3NzIGxvY2F0b3Igb24gRmlyZWZveC4gZS5nLiBjc3M9I1xcOnAwXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnR2l2ZW4gY3NzIHNlbGVjdG9yIGV4cHJlc3Npb24nKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oR2l2ZW4gY3NzIHNlbGVjdG9yIGV4cHJlc3Npb24gXCIuKlwiIGlzIGludmFsaWQpLiovaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uJykgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ05vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZScpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgdmFyaW91cyB0eXBlcyBvZiAnT3JpZ2luYWwgZXJyb3InXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbnZhbGlkIFVSTCBpbiBvcGVuIGNvbW1hbmRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBVUkwnKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oIEludmFsaWQgVVJMOiAuKiQpLiovaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHVzdWFsbHkgb24gbW9iaWxlIENocm9tZSB3aGVuIGVsZW1lbnQgaXMgb3ZlcmxhcHBlZCBieSBhbm90aGVyIGVsZW1lbnRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkJykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvZWxlbWVudCBjbGljayBpbnRlcmNlcHRlZDogKC4qKS9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkVMRU1FTlRfTk9UX1ZJU0lCTEUsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHVzdWFsbHkgYmVjYXVzZSBTZWxlbml1bSBoYXMga2lsbGVkIHRoZSBzZXNzaW9uIGR1ZSB0byBleGNlZWRpbmcgJy10aW1lb3V0JyB0aW1lb3V0XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnTm8gYWN0aXZlIHNlc3Npb24gd2l0aCBJRCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX0VSUk9SLCAnRXhlY3V0aW9uIHRpbWUgZXhjZWVkZWQgdGhlIHRpbWVvdXQgc2V0IGJ5IFNlbGVuaXVtJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdoZW4gZHJpdmVyIChJRURyaXZlclNlcnZlciwgQ2hyb21lRHJpdmVyLCBldGMpIGNyYXNoZXNcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSA9PT0gJ2phdmEubmV0LkNvbm5lY3RFeGNlcHRpb246IENvbm5lY3Rpb24gcmVmdXNlZDogY29ubmVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLldFQkRSSVZFUl9FUlJPUiwgJ1RoZSB1bmRlcmx5aW5nIFdlYkRyaXZlciBzZWVtcyB0byBoYXZlIGNyYXNoZWQ6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YWxlIGVsZW1lbnQgcmVmZXJlbmNlXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm5hbWUgJiYgZXJyLm5hbWUuaW5jbHVkZXMoJ3N0YWxlIGVsZW1lbnQgcmVmZXJlbmNlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNUQUxFX0VMRU1FTlRfUkVGRVJFTkNFLCBlcnIubmFtZSArICcgJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgJiYgZXJyLmNvZGUgPT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuTU9EVUxFX05PVF9GT1VORCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgd2hlbiBkb2luZyBhbiBvcGVyYXRpb24gb24gYW4gZWxlbWVudCAoZS5nLiBjbGljaykgYnV0IHRoZSB3aW5kb3cgd2FzIGFscmVhZHkgY2xvc2VkXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vIHN1Y2ggd2luZG93JykgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3RhcmdldCB3aW5kb3cgYWxyZWFkeSBjbG9zZWQnKSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnd2ViIHZpZXcgbm90IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLldJTkRPV19OT1RfRk9VTkQsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZXhhbXBsZTogVGhlIGVsZW1lbnQgd2l0aCBzZWxlY3RvciAqKiogeW91IHRyeWluZyB0byBwYXNzIGludG8gdGhlIGV4ZWN1dGUgbWV0aG9kIHdhc24ndCBmb3VuZFxyXG4gICAgICAgIC8vIHdoZW4gZWxlbWVudCB3YXMgZGVsZXRlZCBmcm9tIERPTVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCd5b3UgdHJ5aW5nIHRvIHBhc3MgaW50byB0aGUgZXhlY3V0ZSBtZXRob2Qgd2FzblxcJ3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfRk9VTkQsICBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdoZW4gZG9pbmcgYW4gb3BlcmF0aW9uIG9uIGFuIGVsZW1lbnQgcmVmZXJlbmNlIChlLmcuIGNsaWNrKSBidXQgdGhlIHBhZ2Ugd2FzIGFscmVhZHkgY2hhbmdlZFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdlbGVtZW50IG5vdCBpbnRlcmFjdGFibGUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgc2VsZWN0b3I6IGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb246IFVuYWJsZSB0byBjb21waWxlIHNlbGVjdG9yIC4uLlxyXG4gICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBlcnIubmFtZSAmJlxyXG4gICAgICAgICAgICBlcnIubmFtZSA9PT0gJ2ludmFsaWQgc2VsZWN0b3InXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVxdWVzdEVycm9yOiBUaW1lb3V0IGF3YWl0aW5nICdyZXF1ZXN0JyBmb3IgMzEwMDAwbXMsIG5hbWU6ICdUaW1lb3V0RXJyb3InXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1RpbWVvdXQgYXdhaXRpbmcgXFwncmVxdWVzdFxcJycpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQgLCAgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlcnIgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3NvY2tldCBoYW5nIHVwJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgQ2hhaSBlcnJvciBjb2RlXHJcbiAgICAgICAgdmFyIG94RXJyb3JDb2RlID0gQ0hBSV9FUlJPUl9DT0RFU1tlcnJUeXBlXTtcclxuICAgICAgICBpZiAob3hFcnJvckNvZGUpIHtcclxuICAgICAgICAgICAgLy8gdGhyb3cgbm9uLWZhdGFsIGVycm9yIGlmIGl0J3MgYSBcInZlcmlmeVwiIG1vZHVsZSBvciBtZXRob2QgXHJcbiAgICAgICAgICAgIGlmIChveEVycm9yQ29kZSA9PT0gRVJST1JfQ09ERVMuQVNTRVJUICYmXHJcblx0XHRcdFx0KG1vZHVsZSA9PT0gJ3ZlcmlmeScgfHwgY21kLmluZGV4T2YoJ3ZlcmlmeScpID09PSAwKSkgeyAvLyB2ZXJpZnkuKiwgKi52ZXJpZnkqXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVkVSSUZZLCBlcnIubWVzc2FnZSwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihveEVycm9yQ29kZSwgZXJyLm1lc3NhZ2UsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBKYXZhU2NyaXB0IGVycm9yIGNvZGVcclxuICAgICAgICBveEVycm9yQ29kZSA9IFNDUklQVF9FUlJPUl9DT0RFU1tlcnJUeXBlXTtcclxuICAgICAgICBpZiAob3hFcnJvckNvZGUpIHtcclxuICAgICAgICAgICAgLy8gdGhyb3cgbm9uLWZhdGFsIGVycm9yIGlmIGl0J3MgYSBcInZlcmlmeVwiIG1vZHVsZSBvciBtZXRob2QgXHJcbiAgICAgICAgICAgIGlmIChveEVycm9yQ29kZSA9PT0gRVJST1JfQ09ERVMuQVNTRVJUICYmXHJcblx0XHRcdFx0KG1vZHVsZSA9PT0gJ3ZlcmlmeScgfHwgY21kLmluZGV4T2YoJ3ZlcmlmeScpID09PSAwKSkgeyAvLyB2ZXJpZnkuKiwgKi52ZXJpZnkqXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVkVSSUZZLCBlcnIubWVzc2FnZSwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihveEVycm9yQ29kZSwgZXJyLm1lc3NhZ2UgfHwgbnVsbCwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT0gRXJyb3IgRGV0YWlscyA9PT0nKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVHlwZTogJyArIGVyci50eXBlICsgJyBOYW1lOiAnICsgZXJyLm5hbWUgKyAnIENvZGU6ICcgKyBlcnIuY29kZSArICcgTXNnOiAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHV0aWwuaW5zcGVjdChlcnIpKTtcclxuXHJcbiAgICAgICAgY29uc3QgZXJyTWVzc2FnZSA9IGVyci5tZXNzYWdlID8gYCR7ZXJyVHlwZX06ICR7ZXJyLm1lc3NhZ2V9YCA6IGAke2VyclR5cGV9YDtcclxuICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXJyTWVzc2FnZSwgdXRpbC5pbnNwZWN0KGVyciksIHRydWUsIGVycik7XHJcbiAgICB9LFxyXG4gICAgZ2V0U2VsZW5pdW1Jbml0RXJyb3I6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICB2YXIgaWVab29tRXJyb3JNc2cgPSBlcnIubWVzc2FnZS5tYXRjaCgvKFVuZXhwZWN0ZWQgZXJyb3IgbGF1bmNoaW5nIEludGVybmV0IEV4cGxvcmVyXFwuIEJyb3dzZXIgem9vbSBsZXZlbCB3YXMgc2V0IHRvIFxcZCslXFwuIEl0IHNob3VsZCBiZSBzZXQgdG8gXFxkKyUpL2dtKTtcclxuICAgICAgICAgICAgaWYgKGllWm9vbUVycm9yTXNnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SLCBpZVpvb21FcnJvck1zZy50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gY3JlYXRlIG5ldyBzZXJ2aWNlOiBDaHJvbWVEcml2ZXJTZXJ2aWNlJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGVyci5tZXNzYWdlLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6JykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiwgZXJyLm1lc3NhZ2UsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBjaHJvbWVEcml2ZXJNc2cgPSBlcnIubWVzc2FnZS5tYXRjaCgvKFRoaXMgdmVyc2lvbiBvZiBDaHJvbWVEcml2ZXIgb25seSBzdXBwb3J0cyBDaHJvbWUgdmVyc2lvbiBbMC05XSopL2dtKTtcclxuICAgICAgICAgICAgaWYgKGNocm9tZURyaXZlck1zZykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgY2hyb21lRHJpdmVyTXNnLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCAnQ2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFRlVTRUQnIHx8IGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgfHwgZXJyLmNvZGUgPT09ICdFTk9URk9VTkQnIHx8IGVyci5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLlxcbnNvY2tldCBoYW5nIHVwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fVU5SRUFDSEFCTEVfRVJST1IsIFwiQ291bGRuJ3QgY29ubmVjdCB0byBTZWxlbml1bSBzZXJ2ZXJcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSA9PT0gJ0FsbCBtaW51dGVzIGZvciB0aGlzIG9yZ2FuaXphdGlvbiBoYXMgYmVlbiBleGF1c3RlZCcgfHxcclxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT09ICc0MDEgVW5hdXRob3JpemVkJyB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1IsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gY3JlYXRlIG5ldyBzZXJ2aWNlOicpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SLCBlcnIubWVzc2FnZSArICdcXG5cXG5UaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBtaXNzaW5nIENocm9tZURyaXZlci9JRURyaXZlclNlcnZlci9HZWNrb0RyaXZlciBiaW5hcnkuXFxuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnPT09IEVycm9yIERldGFpbHMgPT09Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1R5cGU6ICcgKyBlcnIudHlwZSArICcgTmFtZTogJyArIGVyci5uYW1lICsgJyBDb2RlOiAnICsgZXJyLmNvZGUgKyAnIE1zZzogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh1dGlsLmluc3BlY3QoZXJyKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5VTktOT1dOX0VSUk9SLCBlcnIudHlwZSArICc6ICcgKyBlcnIubWVzc2FnZSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgfSxcclxuICAgIGdldEFwcGl1bUluaXRFcnJvcjogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdjYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgJ0Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRUZVU0VEJyB8fCBlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnIHx8IGVyci5jb2RlID09PSAnRU5PVEZPVU5EJyB8fCBlcnIubWVzc2FnZSA9PT0gJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi5cXG5zb2NrZXQgaGFuZyB1cCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9VTlJFQUNIQUJMRV9FUlJPUiwgXCJDb3VsZG4ndCBjb25uZWN0IHRvIEFwcGl1bSBzZXJ2ZXJcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnQ291bGQgbm90IGZpbmQgYSBjb25uZWN0ZWQgQW5kcm9pZCBkZXZpY2UnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuREVWSUNFX05PVF9GT1VORCwgJ0NvdWxkIG5vdCBmaW5kIGEgY29ubmVjdGVkIEFuZHJvaWQgZGV2aWNlJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uJykpIHsgICAgICAgICAgLy8gYXBwaXVtIDw9IDEuMTRcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdObyBDaHJvbWVkcml2ZXIgZm91bmQgdGhhdCBjYW4gYXV0b21hdGUnKSkgeyAgICAvLyBhcHBpdW0gPj0gMS4xNVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBmaW5kIGFuIGFjdGl2ZSBkZXZpY2Ugb3IgZW11bGF0b3Igd2l0aCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5ERVZJQ0VfTk9UX0ZPVU5ELCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2lzIG5vdCBpbnN0YWxsZWQgb24gZGV2aWNlJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlID09PSAnQWxsIG1pbnV0ZXMgZm9yIHRoaXMgb3JnYW5pemF0aW9uIGhhcyBiZWVuIGV4YXVzdGVkJyB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJzQwMSBVbmF1dGhvcml6ZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BUFBJVU1fQ09OTkVDVElPTl9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgKFxyXG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0EgbmV3IHNlc3Npb24gY291bGQgbm90IGJlIGNyZWF0ZWQuJykgfHxcclxuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uJykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BUFBJVU1fU0VTU0lPTl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpLCBudWxsLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT0gRXJyb3IgRGV0YWlscyA9PT0nKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVHlwZTogJyArIGVyci50eXBlICsgJyBOYW1lOiAnICsgZXJyLm5hbWUgKyAnIENvZGU6ICcgKyBlcnIuY29kZSArICcgTXNnOiAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHV0aWwuaW5zcGVjdChlcnIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgfSxcclxuICAgIGdldEFzc2VydEVycm9yOiBmdW5jdGlvbihleHBlY3RlZCwgYWN0dWFsKSB7XHJcbiAgICAgICAgYWN0dWFsID0gYWN0dWFsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5BU1NFUlRfRVJST1IsIGBFeHBlY3RlZDogXCIke2V4cGVjdGVkfVwiLiBHb3Q6IFwiJHthY3R1YWx9XCJgKTtcclxuICAgIH0sXHJcbiAgICBlcnJvckNvZGU6IEVSUk9SX0NPREVTXHJcbn07XHJcblxyXG5jb25zdCBPUklHSU5BTF9FUlJPUl9NRVNTQUdFID0gJ09yaWdpbmFsIGVycm9yOiAnO1xyXG5jb25zdCBVTktOT1dOX0VSUk9SX01FU1NBR0UgPSAndW5rbm93biBlcnJvcjogJztcclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RPcmlnaW5hbEVycm9yKG1zZykge1xyXG4gICAgaWYgKCFtc2cpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGVycm9ySW5kZXgxID0gbXNnLmluZGV4T2YoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSk7XHJcbiAgICBpZiAoZXJyb3JJbmRleDEgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIG1zZztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGVyZSBjb3VsZCBhbm90aGUgbmVzdGVkIFwib3JpZ2luYWwgZXJyb3JcIlxyXG4gICAgdmFyIGVycm9ySW5kZXgyID0gbXNnLmluZGV4T2YoT1JJR0lOQUxfRVJST1JfTUVTU0FHRSwgZXJyb3JJbmRleDEgKyBPUklHSU5BTF9FUlJPUl9NRVNTQUdFLmxlbmd0aCk7XHJcblxyXG4gICAgbXNnID0gbXNnLnN1YnN0cmluZygoZXJyb3JJbmRleDIgPiAtMSA/IGVycm9ySW5kZXgyIDogZXJyb3JJbmRleDEpICArIE9SSUdJTkFMX0VSUk9SX01FU1NBR0UubGVuZ3RoKTtcclxuXHJcbiAgICAvLyBzdHJpcCAndW5rbm93biBlcnJvcjonXHJcbiAgICB2YXIgdW5rbm93bkVycm9ySW5kZXggPSBtc2cuaW5kZXhPZihVTktOT1dOX0VSUk9SX01FU1NBR0UpO1xyXG4gICAgaWYgKHVua25vd25FcnJvckluZGV4ID4gLTEpIHtcclxuICAgICAgICByZXR1cm4gbXNnLnN1YnN0cmluZyh1bmtub3duRXJyb3JJbmRleCArIFVOS05PV05fRVJST1JfTUVTU0FHRS5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtc2c7XHJcbn1cclxuIl19
|
|
285
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvaGVscGVyLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiRVJST1JfQ09ERVMiLCJTQ1JJUFRfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiQVNTRVJUX0VSUk9SIiwiUERGX0VSUk9SIiwiVkVSSUZZX0VSUk9SIiwiRUxFTUVOVF9OT1RfRk9VTkQiLCJGUkFNRV9OT1RfRk9VTkQiLCJVTktOT1dOX0NPTU1BTkRfRVJST1IiLCJTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRSIsIkVMRU1FTlRfTk9UX1ZJU0lCTEUiLCJFTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUiLCJMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMiLCJFTEVNRU5UX1NUSUxMX0VYSVNUUyIsIkJST1dTRVJfSlNfRVhFQ1VURV9FUlJPUiIsIlRJTUVPVVQiLCJXSU5ET1dfTk9UX0ZPVU5EIiwiVU5FWFBFQ1RFRF9BTEVSVF9PUEVOIiwiTk9fQUxFUlRfT1BFTl9FUlJPUiIsIk1BSUxJTkFUT1JfRVJST1IiLCJBUFBJVU1fVU5SRUFDSEFCTEVfRVJST1IiLCJTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiIsIkNIUk9NRURSSVZFUl9FUlJPUiIsIldFQkRSSVZFUl9FUlJPUiIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJEQl9RVUVSWV9FUlJPUiIsIlNPQVBfRVJST1IiLCJOT1RfSU1QTEVNRU5URURfRVJST1IiLCJTRVJJQUxfUE9SVF9FUlJPUiIsIkhUVFBfRVJST1IiLCJFTUFJTF9FUlJPUiIsIk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IiLCJERVZJQ0VfTk9UX0ZPVU5EIiwiUEFSQU1FVEVSU19FUlJPUiIsIklOVkFMSURfQ0FQQUJJTElUSUVTIiwiQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SIiwiQVBQSVVNX0NPTk5FQ1RJT05fRVJST1IiLCJBUFBJVU1fU0VTU0lPTl9FUlJPUiIsIlNFTEVOSVVNX1NFU1NJT05fRVJST1IiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJTRUxFTklVTV9DT05ORUNUSU9OX0VSUk9SIiwiVVJMX09QRU5fRVJST1IiLCJPUFRJT05fTk9UX0ZPVU5EIiwiQVRUUklCVVRFX05PVF9GT1VORCIsIkVMRU1FTlRfU1RBVEVfRVJST1IiLCJNT0JJTEVfQ09OVEVYVF9FUlJPUiIsIkFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUiIsIlRXSUxJT19FUlJPUiIsIkhPT0tfRVJST1IiLCJOT1RfU1VQUE9SVEVEIiwiQVNTRVJUX1BBU1NFRCIsIk1PRFVMRV9OT1RfRk9VTkQiLCJGSUxFX0JST1dTRV9FUlJPUiIsIkNTVl9FUlJPUiIsIkNSWVBUT19FUlJPUiIsIkROU19FUlJPUiIsIkNIQUlfRVJST1JfQ09ERVMiLCJBc3NlcnRpb25FcnJvciIsIlNDUklQVF9FUlJPUl9DT0RFUyIsIlR5cGVFcnJvciIsIlN5bnRheEVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJtb2R1bGUiLCJleHBvcnRzIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsImVyciIsIk94RXJyb3IiLCJnZXRPeHlnZW5FcnJvciIsInR5cGUiLCJtZXNzYWdlIiwiZGF0YSIsImxvY2F0aW9uIiwic3RhY2t0cmFjZSIsImdldERiRXJyb3JNZXNzYWdlIiwib2RiY0Vycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIm1hcCIsIml0ZW0iLCJjbWQiLCJhcmdzIiwiZXJyVHlwZSIsIm5hbWUiLCJpbmNsdWRlcyIsIm1hdGNoZXMiLCJtYXRjaCIsInN0YXJ0c1dpdGgiLCJleHRyYWN0T3JpZ2luYWxFcnJvciIsIk9SSUdJTkFMX0VSUk9SX01FU1NBR0UiLCJpbnNwZWN0IiwiY29kZSIsIm94RXJyb3JDb2RlIiwiQVNTRVJUIiwiaW5kZXhPZiIsIlZFUklGWSIsImNvbnNvbGUiLCJsb2ciLCJlcnJNZXNzYWdlIiwiZ2V0U2VsZW5pdW1Jbml0RXJyb3IiLCJpZVpvb21FcnJvck1zZyIsInRvU3RyaW5nIiwiY2hyb21lRHJpdmVyTXNnIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwiZ2V0QXNzZXJ0RXJyb3IiLCJleHBlY3RlZCIsImFjdHVhbCIsInJlcGxhY2UiLCJlcnJvckNvZGUiLCJVTktOT1dOX0VSUk9SX01FU1NBR0UiLCJtc2ciLCJlcnJvckluZGV4MSIsImVycm9ySW5kZXgyIiwic3Vic3RyaW5nIiwidW5rbm93bkVycm9ySW5kZXgiXSwibWFwcGluZ3MiOiI7Ozs7QUFhQTs7OztBQUNBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRUEsTUFBTUMsV0FBVyxHQUFHO0FBQ2hCQyxFQUFBQSxZQUFZLEVBQUUsY0FERTtBQUVoQkMsRUFBQUEsYUFBYSxFQUFFLGVBRkM7QUFHaEJDLEVBQUFBLFlBQVksRUFBRSxjQUhFO0FBSWhCQyxFQUFBQSxTQUFTLEVBQUUsV0FKSztBQUtoQkMsRUFBQUEsWUFBWSxFQUFFLGNBTEU7QUFNaEJDLEVBQUFBLGlCQUFpQixFQUFFLG1CQU5IO0FBT2hCQyxFQUFBQSxlQUFlLEVBQUUsaUJBUEQ7QUFRaEJDLEVBQUFBLHFCQUFxQixFQUFFLHVCQVJQO0FBU2hCQyxFQUFBQSx1QkFBdUIsRUFBRSx5QkFUVDtBQVVoQkMsRUFBQUEsbUJBQW1CLEVBQUUscUJBVkw7QUFXaEJDLEVBQUFBLHdCQUF3QixFQUFFLDBCQVhWO0FBWWhCQyxFQUFBQSxpQ0FBaUMsRUFBRSxtQ0FabkI7QUFhaEJDLEVBQUFBLG9CQUFvQixFQUFFLHNCQWJOO0FBY2hCQyxFQUFBQSx3QkFBd0IsRUFBRSwwQkFkVjtBQWVoQkMsRUFBQUEsT0FBTyxFQUFFLFNBZk87QUFnQmhCQyxFQUFBQSxnQkFBZ0IsRUFBRSxrQkFoQkY7QUFpQmhCQyxFQUFBQSxxQkFBcUIsRUFBRSx1QkFqQlA7QUFrQmhCQyxFQUFBQSxtQkFBbUIsRUFBRSxxQkFsQkw7QUFtQmhCQyxFQUFBQSxnQkFBZ0IsRUFBRSxrQkFuQkY7QUFvQmhCQyxFQUFBQSx3QkFBd0IsRUFBRSwwQkFwQlY7QUFxQmhCQyxFQUFBQSwwQkFBMEIsRUFBRSw0QkFyQlo7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QUFQO0FBQ0g7O0FBRUQsU0FBT2lDLEdBQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBtb2R1bGUgZm9yIGhhbmRsaW5nIGFuZCBjb252ZXJ0aW5nIHZhcmlvdXMgZXJyb3IgdHlwZXNcclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuL094eWdlbkVycm9yJztcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuXHJcbmNvbnN0IEVSUk9SX0NPREVTID0ge1xyXG4gICAgU0NSSVBUX0VSUk9SOiAnU0NSSVBUX0VSUk9SJyxcclxuICAgIFVOS05PV05fRVJST1I6ICdVTktOT1dOX0VSUk9SJyxcclxuICAgIEFTU0VSVF9FUlJPUjogJ0FTU0VSVF9FUlJPUicsXHJcbiAgICBQREZfRVJST1I6ICdQREZfRVJST1InLFxyXG4gICAgVkVSSUZZX0VSUk9SOiAnVkVSSUZZX0VSUk9SJyxcclxuICAgIEVMRU1FTlRfTk9UX0ZPVU5EOiAnRUxFTUVOVF9OT1RfRk9VTkQnLFxyXG4gICAgRlJBTUVfTk9UX0ZPVU5EOiAnRlJBTUVfTk9UX0ZPVU5EJyxcclxuICAgIFVOS05PV05fQ09NTUFORF9FUlJPUjogJ1VOS05PV05fQ09NTUFORF9FUlJPUicsXHJcbiAgICBTVEFMRV9FTEVNRU5UX1JFRkVSRU5DRTogJ1NUQUxFX0VMRU1FTlRfUkVGRVJFTkNFJyxcclxuICAgIEVMRU1FTlRfTk9UX1ZJU0lCTEU6ICdFTEVNRU5UX05PVF9WSVNJQkxFJyxcclxuICAgIEVMRU1FTlRfTk9UX0lOVEVSQUNUQUJMRTogJ0VMRU1FTlRfTk9UX0lOVEVSQUNUQUJMRScsXHJcbiAgICBMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFM6ICdMT0NBVE9SX01BVENIRVNfTVVMVElQTEVfRUxFTUVOVFMnLFxyXG4gICAgRUxFTUVOVF9TVElMTF9FWElTVFM6ICdFTEVNRU5UX1NUSUxMX0VYSVNUUycsXHJcbiAgICBCUk9XU0VSX0pTX0VYRUNVVEVfRVJST1I6ICdCUk9XU0VSX0pTX0VYRUNVVEVfRVJST1InLFxyXG4gICAgVElNRU9VVDogJ1RJTUVPVVQnLFxyXG4gICAgV0lORE9XX05PVF9GT1VORDogJ1dJTkRPV19OT1RfRk9VTkQnLFxyXG4gICAgVU5FWFBFQ1RFRF9BTEVSVF9PUEVOOiAnVU5FWFBFQ1RFRF9BTEVSVF9PUEVOJyxcclxuICAgIE5PX0FMRVJUX09QRU5fRVJST1I6ICdOT19BTEVSVF9PUEVOX0VSUk9SJyxcclxuICAgIE1BSUxJTkFUT1JfRVJST1I6ICdNQUlMSU5BVE9SX0VSUk9SJyxcclxuICAgIEFQUElVTV9VTlJFQUNIQUJMRV9FUlJPUjogJ0FQUElVTV9VTlJFQUNIQUJMRV9FUlJPUicsXHJcbiAgICBTRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUjogJ1NFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SJyxcclxuICAgIENIUk9NRURSSVZFUl9FUlJPUjogJ0NIUk9NRURSSVZFUl9FUlJPUicsXHJcbiAgICBXRUJEUklWRVJfRVJST1I6ICdXRUJEUklWRVJfRVJST1InLFxyXG4gICAgREJfQ09OTkVDVElPTl9FUlJPUjogJ0RCX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgREJfUVVFUllfRVJST1I6ICdEQl9RVUVSWV9FUlJPUicsXHJcbiAgICBTT0FQX0VSUk9SOiAnU09BUF9FUlJPUicsXHJcbiAgICBOT1RfSU1QTEVNRU5URURfRVJST1I6ICdOT1RfSU1QTEVNRU5URURfRVJST1InLFxyXG4gICAgU0VSSUFMX1BPUlRfRVJST1I6ICdTRVJJQUxfUE9SVF9FUlJPUicsXHJcbiAgICBIVFRQX0VSUk9SOiAnSFRUUF9FUlJPUicsXHJcbiAgICBFTUFJTF9FUlJPUjogJ0VNQUlMX0VSUk9SJyxcclxuICAgIE1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1I6ICdNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SJyxcclxuICAgIERFVklDRV9OT1RfRk9VTkQ6ICdERVZJQ0VfTk9UX0ZPVU5EJyxcclxuICAgIFBBUkFNRVRFUlNfRVJST1I6ICdQQVJBTUVURVJTX0VSUk9SJyxcclxuICAgIElOVkFMSURfQ0FQQUJJTElUSUVTOiAnSU5WQUxJRF9DQVBBQklMSVRJRVMnLFxyXG4gICAgQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SOiAnQlJPV1NFUl9DT05GSUdVUkFUSU9OX0VSUk9SJyxcclxuICAgIEFQUElVTV9DT05ORUNUSU9OX0VSUk9SOiAnQVBQSVVNX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgQVBQSVVNX1NFU1NJT05fRVJST1I6ICdBUFBJVU1fU0VTU0lPTl9FUlJPUicsXHJcbiAgICBTRUxFTklVTV9TRVNTSU9OX0VSUk9SOiAnU0VMRU5JVU1fU0VTU0lPTl9FUlJPUicsXHJcbiAgICBTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQ6ICdTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQnLFxyXG4gICAgU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUjogJ1NFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1InLFxyXG4gICAgVVJMX09QRU5fRVJST1I6ICdVUkxfT1BFTl9FUlJPUicsXHJcbiAgICBPUFRJT05fTk9UX0ZPVU5EOiAnT1BUSU9OX05PVF9GT1VORCcsXHJcbiAgICBBVFRSSUJVVEVfTk9UX0ZPVU5EOiAnQVRUUklCVVRFX05PVF9GT1VORCcsXHJcbiAgICBFTEVNRU5UX1NUQVRFX0VSUk9SOiAnRUxFTUVOVF9TVEFURV9FUlJPUicsXHJcbiAgICBNT0JJTEVfQ09OVEVYVF9FUlJPUjogJ01PQklMRV9DT05URVhUX0VSUk9SJyxcclxuICAgIEFQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUjogJ0FQUExJQ0FUSU9OX05PVF9GT1VORF9FUlJPUicsXHJcbiAgICBUV0lMSU9fRVJST1I6ICdUV0lMSU9fRVJST1InLFxyXG4gICAgSE9PS19FUlJPUjogJ0hPT0tfRVJST1InLFxyXG4gICAgTk9UX1NVUFBPUlRFRDogJ05PVF9TVVBQT1JURUQnLFxyXG4gICAgQVNTRVJUX1BBU1NFRDogJ0FTU0VSVF9QQVNTRUQnLFxyXG4gICAgTU9EVUxFX05PVF9GT1VORDogJ01PRFVMRV9OT1RfRk9VTkQnLFxyXG4gICAgRklMRV9CUk9XU0VfRVJST1I6ICdGSUxFX0JST1dTRV9FUlJPUicsXHJcbiAgICBDU1ZfRVJST1I6ICdDU1ZfRVJST1InLFxyXG4gICAgQ1JZUFRPX0VSUk9SOiAnQ1JZUFRPX0VSUk9SJyxcclxuICAgIEROU19FUlJPUjogJ0ROU19FUlJPUidcclxufTtcclxuXHJcbi8vIENoYWkgdG8gT3h5Z2VuIGVycm9yIGNvZGVzIG1hcHBpbmdcclxuY29uc3QgQ0hBSV9FUlJPUl9DT0RFUyA9IHtcclxuICAgIEFzc2VydGlvbkVycm9yOiBFUlJPUl9DT0RFUy5BU1NFUlRfRVJST1JcclxufTtcclxuXHJcbi8vIEdlbmVyYWwgSmF2YVNjcmlwdCBlcnJvciBjb2RlcyBtYXBwaW5nXHJcbmNvbnN0IFNDUklQVF9FUlJPUl9DT0RFUyA9IHtcclxuICAgIFR5cGVFcnJvcjogRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLFxyXG4gICAgU3ludGF4RXJyb3I6IEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUixcclxuICAgIFJlZmVyZW5jZUVycm9yOiBFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIGdldEZhaWx1cmVGcm9tRXJyb3I6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICghZXJyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBPeEVycm9yKSkge1xyXG4gICAgICAgICAgICBlcnIgPSB0aGlzLmdldE94eWdlbkVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6IGVyci50eXBlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcclxuICAgICAgICAgICAgZGF0YTogZXJyLmRhdGEsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uOiBlcnIubG9jYXRpb24sXHJcbiAgICAgICAgICAgIHN0YWNrdHJhY2U6IGVyci5zdGFja3RyYWNlIHx8IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGdldERiRXJyb3JNZXNzYWdlOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoZXJyICYmIGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGVyciAmJlxyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycyAmJlxyXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGVyci5vZGJjRXJyb3JzKSAmJlxyXG4gICAgICAgICAgICBlcnIub2RiY0Vycm9ycy5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGVyci5vZGJjRXJyb3JzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gJzogJyAraXRlbS5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgfSxcclxuICAgIGdldE94eWdlbkVycm9yOiBmdW5jdGlvbihlcnIsIG1vZHVsZSwgY21kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBlcnJvciBhcyBpcyBpZiBpdCBoYXMgYmVlbiBhbHJlYWR5IHByb2Nlc3NlZFxyXG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBPeEVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZXJyVHlwZSA9IGVyci50eXBlIHx8IGVyci5uYW1lIHx8IHR5cGVvZiBlcnI7XHJcbiAgICAgICAgLy8gaGFuZGxlIFwiQ2FuJ3QgY2FsbCA8Y29tbWFuZD4gb24gZWxlbWVudCB3aXRoIHNlbGVjdG9yIDxzZWxlY3Rvcj4gYmVjYXVzZSBlbGVtZW50IHdhc24ndCBmb3VuZFwiXHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdiZWNhdXNlIGVsZW1lbnQgd2FzblxcJ3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfRk9VTkQsIGVyci5tZXNzYWdlLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBoYW5kbGUgXCJpbnZhbGlkIGFyZ3VtZW50OiBVbnN1cHBvcnRlZCBsb2NhdG9yIHN0cmF0ZWd5OiAtYW5kcm9pZCB1aWF1dG9tYXRvclwiIGZvciBtb2JpbGUuXHJcbiAgICAgICAgLy8gdXN1YWxseSBkdWUgdG8gbm90IHVzaW5nIHRoZSBjb3JyZWN0IGNvbnRleHRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5zdXBwb3J0ZWQgbG9jYXRvciBzdHJhdGVneScpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goL2ludmFsaWQgYXJndW1lbnQ6ICguKikvaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5NT0JJTEVfQ09OVEVYVF9FUlJPUiwgKG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSArXHJcbiAgICAgICAgICAgICAgICAnLiBNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBtb2JpbGUgY29udGV4dC4gU2VlIG1vYi5zZXROYXRpdmVDb250ZXh0IGFuZCBtb2Iuc2V0V2ViVmlld0NvbnRleHQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGhhbmRsZSBcImludmFsaWQgc2VsZWN0b3I6IFVuYWJsZSB0byBsb2NhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSB4cGF0aCBleHByZXNzaW9uXCJcclxuICAgICAgICAvLyB1c3VhbGx5IGR1ZSB0byBpbnZhbGlkIHhwYXRoXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBsb2NhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSB4cGF0aCBleHByZXNzaW9uJykpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBlcnIubWVzc2FnZS5tYXRjaCgvKFRoZSBzdHJpbmcgJy4qJyBpcyBub3QgYSB2YWxpZCBYUGF0aCBleHByZXNzaW9uLikvaSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TQ1JJUFRfRVJST1IsIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAyID8gbWF0Y2hlc1sxXSA6IGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgY3NzIGxvY2F0b3Igb24gQ2hyb21lL0lFLiBlLmcuIGNzcz0jXFw6cDBcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnQW4gaW52YWxpZCBvciBpbGxlZ2FsIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0NSSVBUX0VSUk9SLCAnQW4gaW52YWxpZCBvciBpbGxlZ2FsIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW52YWxpZCBjc3MgbG9jYXRvciBvbiBGaXJlZm94LiBlLmcuIGNzcz0jXFw6cDBcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdHaXZlbiBjc3Mgc2VsZWN0b3IgZXhwcmVzc2lvbicpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyhHaXZlbiBjc3Mgc2VsZWN0b3IgZXhwcmVzc2lvbiBcIi4qXCIgaXMgaW52YWxpZCkuKi9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24nKSB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcygnTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlJykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGhhbmRsZSB2YXJpb3VzIHR5cGVzIG9mICdPcmlnaW5hbCBlcnJvcidcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcyhPUklHSU5BTF9FUlJPUl9NRVNTQUdFKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGludmFsaWQgVVJMIGluIG9wZW4gY29tbWFuZFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdJbnZhbGlkIFVSTCcpKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZXJyLm1lc3NhZ2UubWF0Y2goLyggSW52YWxpZCBVUkw6IC4qJCkuKi9pKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdXN1YWxseSBvbiBtb2JpbGUgQ2hyb21lIHdoZW4gZWxlbWVudCBpcyBvdmVybGFwcGVkIGJ5IGFub3RoZXIgZWxlbWVudFxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ2VsZW1lbnQgY2xpY2sgaW50ZXJjZXB0ZWQnKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGVyci5tZXNzYWdlLm1hdGNoKC9lbGVtZW50IGNsaWNrIGludGVyY2VwdGVkOiAoLiopL2kpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuRUxFTUVOVF9OT1RfVklTSUJMRSwgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDIgPyBtYXRjaGVzWzFdIDogZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdXN1YWxseSBiZWNhdXNlIFNlbGVuaXVtIGhhcyBraWxsZWQgdGhlIHNlc3Npb24gZHVlIHRvIGV4Y2VlZGluZyAnLXRpbWVvdXQnIHRpbWVvdXRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5zdGFydHNXaXRoKCdObyBhY3RpdmUgc2Vzc2lvbiB3aXRoIElEJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fRVJST1IsICdFeGVjdXRpb24gdGltZSBleGNlZWRlZCB0aGUgdGltZW91dCBzZXQgYnkgU2VsZW5pdW0nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2hlbiBkcml2ZXIgKElFRHJpdmVyU2VydmVyLCBDaHJvbWVEcml2ZXIsIGV0YykgY3Jhc2hlc1xyXG4gICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlID09PSAnamF2YS5uZXQuQ29ubmVjdEV4Y2VwdGlvbjogQ29ubmVjdGlvbiByZWZ1c2VkOiBjb25uZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuV0VCRFJJVkVSX0VSUk9SLCAnVGhlIHVuZGVybHlpbmcgV2ViRHJpdmVyIHNlZW1zIHRvIGhhdmUgY3Jhc2hlZDogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc3RhbGUgZWxlbWVudCByZWZlcmVuY2VcclxuICAgICAgICBlbHNlIGlmIChlcnIubmFtZSAmJiBlcnIubmFtZS5pbmNsdWRlcygnc3RhbGUgZWxlbWVudCByZWZlcmVuY2UnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU1RBTEVfRUxFTUVOVF9SRUZFUkVOQ0UsIGVyci5uYW1lICsgJyAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlcnIuY29kZSAmJiBlcnIuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5NT0RVTEVfTk9UX0ZPVU5ELCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vICB3aGVuIGRvaW5nIGFuIG9wZXJhdGlvbiBvbiBhbiBlbGVtZW50IChlLmcuIGNsaWNrKSBidXQgdGhlIHdpbmRvdyB3YXMgYWxyZWFkeSBjbG9zZWRcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnbm8gc3VjaCB3aW5kb3cnKSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygndGFyZ2V0IHdpbmRvdyBhbHJlYWR5IGNsb3NlZCcpICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCd3ZWIgdmlldyBub3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuV0lORE9XX05PVF9GT1VORCwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBleGFtcGxlOiBUaGUgZWxlbWVudCB3aXRoIHNlbGVjdG9yICoqKiB5b3UgdHJ5aW5nIHRvIHBhc3MgaW50byB0aGUgZXhlY3V0ZSBtZXRob2Qgd2Fzbid0IGZvdW5kXHJcbiAgICAgICAgLy8gd2hlbiBlbGVtZW50IHdhcyBkZWxldGVkIGZyb20gRE9NXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ3lvdSB0cnlpbmcgdG8gcGFzcyBpbnRvIHRoZSBleGVjdXRlIG1ldGhvZCB3YXNuXFwndCBmb3VuZCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5FTEVNRU5UX05PVF9GT1VORCwgIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2hlbiBkb2luZyBhbiBvcGVyYXRpb24gb24gYW4gZWxlbWVudCByZWZlcmVuY2UgKGUuZy4gY2xpY2spIGJ1dCB0aGUgcGFnZSB3YXMgYWxyZWFkeSBjaGFuZ2VkXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2VsZW1lbnQgbm90IGludGVyYWN0YWJsZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5FTEVNRU5UX05PVF9JTlRFUkFDVEFCTEUsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW52YWxpZCBzZWxlY3RvcjogamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjogVW5hYmxlIHRvIGNvbXBpbGUgc2VsZWN0b3IgLi4uXHJcbiAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGVyci5uYW1lICYmXHJcbiAgICAgICAgICAgIGVyci5uYW1lID09PSAnaW52YWxpZCBzZWxlY3RvcidcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNDUklQVF9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZXF1ZXN0RXJyb3I6IFRpbWVvdXQgYXdhaXRpbmcgJ3JlcXVlc3QnIGZvciAzMTAwMDBtcywgbmFtZTogJ1RpbWVvdXRFcnJvcidcclxuICAgICAgICBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVGltZW91dCBhd2FpdGluZyBcXCdyZXF1ZXN0XFwnJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCAsICBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyciAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnc29ja2V0IGhhbmcgdXAnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VULCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1RpbWVkIG91dCByZWNlaXZpbmcgbWVzc2FnZSBmcm9tIHJlbmRlcmUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VULCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBDaGFpIGVycm9yIGNvZGVcclxuICAgICAgICB2YXIgb3hFcnJvckNvZGUgPSBDSEFJX0VSUk9SX0NPREVTW2VyclR5cGVdO1xyXG4gICAgICAgIGlmIChveEVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICAvLyB0aHJvdyBub24tZmF0YWwgZXJyb3IgaWYgaXQncyBhIFwidmVyaWZ5XCIgbW9kdWxlIG9yIG1ldGhvZCBcclxuICAgICAgICAgICAgaWYgKG94RXJyb3JDb2RlID09PSBFUlJPUl9DT0RFUy5BU1NFUlQgJiZcclxuXHRcdFx0XHQobW9kdWxlID09PSAndmVyaWZ5JyB8fCBjbWQuaW5kZXhPZigndmVyaWZ5JykgPT09IDApKSB7IC8vIHZlcmlmeS4qLCAqLnZlcmlmeSpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRlksIGVyci5tZXNzYWdlLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG94RXJyb3JDb2RlLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRyeSB0byByZXNvbHZlIEphdmFTY3JpcHQgZXJyb3IgY29kZVxyXG4gICAgICAgIG94RXJyb3JDb2RlID0gU0NSSVBUX0VSUk9SX0NPREVTW2VyclR5cGVdO1xyXG4gICAgICAgIGlmIChveEVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICAvLyB0aHJvdyBub24tZmF0YWwgZXJyb3IgaWYgaXQncyBhIFwidmVyaWZ5XCIgbW9kdWxlIG9yIG1ldGhvZCBcclxuICAgICAgICAgICAgaWYgKG94RXJyb3JDb2RlID09PSBFUlJPUl9DT0RFUy5BU1NFUlQgJiZcclxuXHRcdFx0XHQobW9kdWxlID09PSAndmVyaWZ5JyB8fCBjbWQuaW5kZXhPZigndmVyaWZ5JykgPT09IDApKSB7IC8vIHZlcmlmeS4qLCAqLnZlcmlmeSpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5WRVJJRlksIGVyci5tZXNzYWdlLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKG94RXJyb3JDb2RlLCBlcnIubWVzc2FnZSB8fCBudWxsLCBudWxsLCB0cnVlLCBlcnIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICBjb25zdCBlcnJNZXNzYWdlID0gZXJyLm1lc3NhZ2UgPyBgJHtlcnJUeXBlfTogJHtlcnIubWVzc2FnZX1gIDogYCR7ZXJyVHlwZX1gO1xyXG4gICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5VTktOT1dOX0VSUk9SLCBlcnJNZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSwgdHJ1ZSwgZXJyKTtcclxuICAgIH0sXHJcbiAgICBnZXRTZWxlbml1bUluaXRFcnJvcjogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBpZVpvb21FcnJvck1zZyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oVW5leHBlY3RlZCBlcnJvciBsYXVuY2hpbmcgSW50ZXJuZXQgRXhwbG9yZXJcXC4gQnJvd3NlciB6b29tIGxldmVsIHdhcyBzZXQgdG8gXFxkKyVcXC4gSXQgc2hvdWxkIGJlIHNldCB0byBcXGQrJSkvZ20pO1xyXG4gICAgICAgICAgICBpZiAoaWVab29tRXJyb3JNc2cpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5CUk9XU0VSX0NPTkZJR1VSQVRJT05fRVJST1IsIGllWm9vbUVycm9yTXNnLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6IENocm9tZURyaXZlclNlcnZpY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkNIUk9NRURSSVZFUl9FUlJPUiwgZXJyLm1lc3NhZ2UsIG51bGwsIHRydWUsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGNyZWF0ZSBuZXcgc2VydmljZTonKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBlcnIubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNocm9tZURyaXZlck1zZyA9IGVyci5tZXNzYWdlLm1hdGNoKC8oVGhpcyB2ZXJzaW9uIG9mIENocm9tZURyaXZlciBvbmx5IHN1cHBvcnRzIENocm9tZSB2ZXJzaW9uIFswLTldKikvZ20pO1xyXG4gICAgICAgICAgICBpZiAoY2hyb21lRHJpdmVyTXNnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBjaHJvbWVEcml2ZXJNc2cudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnY2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsICdDYW5ub3QgZmluZCBDaHJvbWUgYmluYXJ5Jyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVGVVNFRCcgfHwgZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyB8fCBlcnIuY29kZSA9PT0gJ0VOT1RGT1VORCcgfHwgZXJyLm1lc3NhZ2UgPT09ICdGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24uXFxuc29ja2V0IGhhbmcgdXAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5TRUxFTklVTV9VTlJFQUNIQUJMRV9FUlJPUiwgXCJDb3VsZG4ndCBjb25uZWN0IHRvIFNlbGVuaXVtIHNlcnZlclwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlID09PSAnQWxsIG1pbnV0ZXMgZm9yIHRoaXMgb3JnYW5pemF0aW9uIGhhcyBiZWVuIGV4YXVzdGVkJyB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJzQwMSBVbmF1dGhvcml6ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi4nKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuU0VMRU5JVU1fQ09OTkVDVElPTl9FUlJPUiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1VuYWJsZSB0byBjcmVhdGUgbmV3IHNlcnZpY2U6JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlNFTEVOSVVNX0NPTk5FQ1RJT05fRVJST1IsIGVyci5tZXNzYWdlICsgJ1xcblxcblRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIG1pc3NpbmcgQ2hyb21lRHJpdmVyL0lFRHJpdmVyU2VydmVyL0dlY2tvRHJpdmVyIGJpbmFyeS5cXG4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT0gRXJyb3IgRGV0YWlscyA9PT0nKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVHlwZTogJyArIGVyci50eXBlICsgJyBOYW1lOiAnICsgZXJyLm5hbWUgKyAnIENvZGU6ICcgKyBlcnIuY29kZSArICcgTXNnOiAnICsgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHV0aWwuaW5zcGVjdChlcnIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLlVOS05PV05fRVJST1IsIGVyci50eXBlICsgJzogJyArIGVyci5tZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXBwaXVtSW5pdEVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2Nhbm5vdCBmaW5kIENocm9tZSBiaW5hcnknKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCAnQ2Fubm90IGZpbmQgQ2hyb21lIGJpbmFyeScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFRlVTRUQnIHx8IGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgfHwgZXJyLmNvZGUgPT09ICdFTk9URk9VTkQnIHx8IGVyci5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uLlxcbnNvY2tldCBoYW5nIHVwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQSVVNX1VOUkVBQ0hBQkxFX0VSUk9SLCBcIkNvdWxkbid0IGNvbm5lY3QgdG8gQXBwaXVtIHNlcnZlclwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb3VsZCBub3QgZmluZCBhIGNvbm5lY3RlZCBBbmRyb2lkIGRldmljZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5ERVZJQ0VfTk9UX0ZPVU5ELCAnQ291bGQgbm90IGZpbmQgYSBjb25uZWN0ZWQgQW5kcm9pZCBkZXZpY2UnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24nKSkgeyAgICAgICAgICAvLyBhcHBpdW0gPD0gMS4xNFxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQ0hST01FRFJJVkVSX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ05vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZScpKSB7ICAgIC8vIGFwcGl1bSA+PSAxLjE1XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3hFcnJvcihFUlJPUl9DT0RFUy5DSFJPTUVEUklWRVJfRVJST1IsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnVW5hYmxlIHRvIGZpbmQgYW4gYWN0aXZlIGRldmljZSBvciBlbXVsYXRvciB3aXRoJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkRFVklDRV9OT1RfRk9VTkQsIGV4dHJhY3RPcmlnaW5hbEVycm9yKGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5pbmNsdWRlcygnaXMgbm90IGluc3RhbGxlZCBvbiBkZXZpY2UnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuQVBQTElDQVRJT05fTk9UX0ZPVU5EX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UgPT09ICdBbGwgbWludXRlcyBmb3IgdGhpcyBvcmdhbml6YXRpb24gaGFzIGJlZW4gZXhhdXN0ZWQnIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnNDAxIFVuYXV0aG9yaXplZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9DT05ORUNUSU9OX0VSUk9SLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubWVzc2FnZSAmJiAoXHJcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcygnQSBuZXcgc2Vzc2lvbiBjb3VsZCBub3QgYmUgY3JlYXRlZC4nKSB8fFxyXG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0ZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbi4nKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFQUElVTV9TRVNTSU9OX0VSUk9SLCBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnIubWVzc2FnZSksIG51bGwsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBFcnJvciBEZXRhaWxzID09PScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUeXBlOiAnICsgZXJyLnR5cGUgKyAnIE5hbWU6ICcgKyBlcnIubmFtZSArICcgQ29kZTogJyArIGVyci5jb2RlICsgJyBNc2c6ICcgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXRpbC5pbnNwZWN0KGVycikpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE94RXJyb3IoRVJST1JfQ09ERVMuVU5LTk9XTl9FUlJPUiwgZXh0cmFjdE9yaWdpbmFsRXJyb3IoZXJyLm1lc3NhZ2UpLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXNzZXJ0RXJyb3I6IGZ1bmN0aW9uKGV4cGVjdGVkLCBhY3R1YWwpIHtcclxuICAgICAgICBhY3R1YWwgPSBhY3R1YWwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPeEVycm9yKEVSUk9SX0NPREVTLkFTU0VSVF9FUlJPUiwgYEV4cGVjdGVkOiBcIiR7ZXhwZWN0ZWR9XCIuIEdvdDogXCIke2FjdHVhbH1cImApO1xyXG4gICAgfSxcclxuICAgIGVycm9yQ29kZTogRVJST1JfQ09ERVNcclxufTtcclxuXHJcbmNvbnN0IE9SSUdJTkFMX0VSUk9SX01FU1NBR0UgPSAnT3JpZ2luYWwgZXJyb3I6ICc7XHJcbmNvbnN0IFVOS05PV05fRVJST1JfTUVTU0FHRSA9ICd1bmtub3duIGVycm9yOiAnO1xyXG5cclxuZnVuY3Rpb24gZXh0cmFjdE9yaWdpbmFsRXJyb3IobXNnKSB7XHJcbiAgICBpZiAoIW1zZykge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXJyb3JJbmRleDEgPSBtc2cuaW5kZXhPZihPUklHSU5BTF9FUlJPUl9NRVNTQUdFKTtcclxuICAgIGlmIChlcnJvckluZGV4MSA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoZXJlIGNvdWxkIGFub3RoZSBuZXN0ZWQgXCJvcmlnaW5hbCBlcnJvclwiXHJcbiAgICB2YXIgZXJyb3JJbmRleDIgPSBtc2cuaW5kZXhPZihPUklHSU5BTF9FUlJPUl9NRVNTQUdFLCBlcnJvckluZGV4MSArIE9SSUdJTkFMX0VSUk9SX01FU1NBR0UubGVuZ3RoKTtcclxuXHJcbiAgICBtc2cgPSBtc2cuc3Vic3RyaW5nKChlcnJvckluZGV4MiA+IC0xID8gZXJyb3JJbmRleDIgOiBlcnJvckluZGV4MSkgICsgT1JJR0lOQUxfRVJST1JfTUVTU0FHRS5sZW5ndGgpO1xyXG5cclxuICAgIC8vIHN0cmlwICd1bmtub3duIGVycm9yOidcclxuICAgIHZhciB1bmtub3duRXJyb3JJbmRleCA9IG1zZy5pbmRleE9mKFVOS05PV05fRVJST1JfTUVTU0FHRSk7XHJcbiAgICBpZiAodW5rbm93bkVycm9ySW5kZXggPiAtMSkge1xyXG4gICAgICAgIHJldHVybiBtc2cuc3Vic3RyaW5nKHVua25vd25FcnJvckluZGV4ICsgVU5LTk9XTl9FUlJPUl9NRVNTQUdFLmxlbmd0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1zZztcclxufVxyXG4iXX0=
|
package/build/lib/util.js
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
4
|
|
|
5
|
+
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
6
|
+
|
|
7
|
+
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
8
|
+
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
|
|
5
11
|
const path = require('path');
|
|
6
12
|
|
|
7
13
|
const fs = require('fs');
|
|
@@ -12,7 +18,7 @@ const crypto = require('crypto');
|
|
|
12
18
|
|
|
13
19
|
const util = require('util');
|
|
14
20
|
|
|
15
|
-
const password = require('../../package.json').
|
|
21
|
+
const password = require('../../package.json').encryptionKey;
|
|
16
22
|
|
|
17
23
|
const key = crypto.scryptSync(password, 'GfG', 24);
|
|
18
24
|
const iv = Buffer.alloc(16, 0);
|
|
@@ -327,12 +333,16 @@ var self = module.exports = {
|
|
|
327
333
|
},
|
|
328
334
|
|
|
329
335
|
decrypt(text) {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
+
try {
|
|
337
|
+
let encryptedText = Buffer.from(text, 'hex');
|
|
338
|
+
let decipher = crypto.createDecipheriv(algorithm, key, iv);
|
|
339
|
+
let decrypted = decipher.update(encryptedText);
|
|
340
|
+
decrypted = Buffer.concat([decrypted, decipher.final()]);
|
|
341
|
+
const retVal = decrypted.toString();
|
|
342
|
+
return new DecryptResult(retVal);
|
|
343
|
+
} catch (e) {
|
|
344
|
+
throw new _OxygenError.default(_helper.default.errorCode.CRYPTO_ERROR, "The provided argument doesn't seem to be a valid cipher produced by 'utils.encrypt'");
|
|
345
|
+
}
|
|
336
346
|
},
|
|
337
347
|
|
|
338
348
|
encrypt(text) {
|
|
@@ -340,7 +350,10 @@ var self = module.exports = {
|
|
|
340
350
|
let encrypted = cipher.update(text);
|
|
341
351
|
encrypted = Buffer.concat([encrypted, cipher.final()]);
|
|
342
352
|
return encrypted.toString('hex');
|
|
343
|
-
}
|
|
353
|
+
},
|
|
344
354
|
|
|
355
|
+
sleep: function (timeout) {
|
|
356
|
+
return new Promise(resolve => setTimeout(resolve, timeout));
|
|
357
|
+
}
|
|
345
358
|
};
|
|
346
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwidmVyc2lvbiIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJqb2luIiwidGFyZ2V0IiwiY3dkIiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50Iiwib3B0aW9ucyIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJjYXNlcyIsImZvckVhY2giLCJjYXNlRGVmIiwidGMiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJyZXNvbHZlUGF0aCIsImZvcm1hdCIsInB1c2giLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJmaWxlUGF0aCIsInBhcmFtRmlsZSIsInBhcmFtTW9kZSIsIm5vUGFyYW1BdXRvU2VhcmNoIiwiZmlsZU5hbWVOb0V4dCIsInRlc3RjYXNlIiwicmVvcGVuU2Vzc2lvbiIsImRpcm5hbWUiLCJmaWxlIiwibW9kZSIsIm1haW5GaWxlUGF0aCIsInBhcmFtT3B0cyIsImF1dG9TZWFyY2giLCJwYXJhbUZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsImxvYWRQYXJhbWV0ZXJNYW5hZ2VyIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJmaWxlTmFtZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJleGlzdHNTeW5jIiwiaW5pdCIsInBhdGhUb1Jlc29sdmUiLCJiYXNlRm9sZGVyIiwicmVzb2x2ZSIsIm1ha2VTZXJpYWxpemFibGUiLCJlcnIiLCJkZXN0cm95Q2lyY3VsYXIiLCJmcm9tIiwic2VlbiIsInRvIiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImluZGV4T2YiLCJzbGljZSIsImdldE1ldGhvZFNpZ25hdHVyZSIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwibWV0aG9kQXJncyIsInN0cmluZ2lmeSIsImFyZ3MiLCJpbmRlbnRhdGlvbiIsInN0ciIsIkpTT04iLCJ2YWx1ZSIsIkVycm9yIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJyZXBsYWNlIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiaXNJbkRlYnVnTW9kZSIsImxvYWRUZXN0SG9va3MiLCJob29rcyIsImV4ZWN1dGVUZXN0SG9vayIsIm1ldGhvZCIsImdsb2JhbCIsImNoYWlBbmRNb2NrZXJ5TG9hZGVkIiwiY2hhaSIsIm1vY2tlcnkiLCJlbmFibGUiLCJ1c2VDbGVhbkNhY2hlIiwid2Fybk9uUmVwbGFjZSIsIndhcm5PblVucmVnaXN0ZXJlZCIsInJlZ2lzdGVyTW9jayIsImFwcGx5IiwidW5kZWZpbmVkIiwiZXJyb3IiLCJnZXRPeE1vZHVsZXNEaXIiLCJfX2Rpcm5hbWUiLCJob29rTG9ncyIsImxvZ2dlciIsIm9yaWdsb2ciLCJsb2ciLCJvcmlnRGVidWciLCJkZWJ1ZyIsIm9yaWdJbmZvIiwiaW5mbyIsIm9yaWdXYXJuIiwib3JpZ0Vycm9yIiwicHJvY2Vzc0FyZ3MiLCJhcmd1bWVudEFycmF5IiwibWFwIiwiaXRlbSIsImluc3BlY3QiLCJtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQiLCJzdGVwcyIsImxlbmd0aCIsImxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4IiwibmV3U3RlcHMiLCJpZHgiLCJpbmNsdWRlcyIsInN0YXR1cyIsImRlY3J5cHQiLCJ0ZXh0IiwiZW5jcnlwdGVkVGV4dCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsImRlY3J5cHRlZCIsInVwZGF0ZSIsImNvbmNhdCIsImZpbmFsIiwicmV0VmFsIiwiZW5jcnlwdCIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkIl0sIm1hcHBpbmdzIjoiOzs7O0FBWUEsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNQyxFQUFFLEdBQUdELE9BQU8sQ0FBQyxJQUFELENBQWxCOztBQUNBLE1BQU1FLE1BQU0sR0FBR0YsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsTUFBTUcsTUFBTSxHQUFHSCxPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxNQUFNSSxJQUFJLEdBQUdKLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLE1BQU1LLFFBQVEsR0FBR0wsT0FBTyxDQUFDLG9CQUFELENBQVAsQ0FBOEJNLE9BQS9DOztBQUNBLE1BQU1DLEdBQUcsR0FBR0osTUFBTSxDQUFDSyxVQUFQLENBQWtCSCxRQUFsQixFQUE0QixLQUE1QixFQUFtQyxFQUFuQyxDQUFaO0FBQ0EsTUFBTUksRUFBRSxHQUFHQyxNQUFNLENBQUNDLEtBQVAsQ0FBYSxF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QUFNLENBQUNILEtBQVAsRUFBWixDQUFkLENBQVo7QUFDQSxXQUFPSyxTQUFTLENBQUMxSixRQUFWLENBQW1CLEtBQW5CLENBQVA7QUFDSDs7QUExVXVCLENBQTVCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogSGVscGVyIG1vZHVsZSBmb3IgaW50ZXJuYWwgT3h5Z2VuIHVzZVxyXG4gKi9cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xyXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcclxuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XHJcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XHJcbmNvbnN0IHBhc3N3b3JkID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcclxuY29uc3Qga2V5ID0gY3J5cHRvLnNjcnlwdFN5bmMocGFzc3dvcmQsICdHZkcnLCAyNCk7XHJcbmNvbnN0IGl2ID0gQnVmZmVyLmFsbG9jKDE2LCAwKTtcclxuY29uc3QgYWxnb3JpdGhtID0gJ2Flcy0xOTItY2JjJztcclxuXHJcbmZ1bmN0aW9uIERlY3J5cHRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICBjb25zdCBkZWNyeXB0UmVzdWx0ID0gcmVzdWx0O1xyXG5cclxuICAgIHRoaXMuZ2V0RGVjcnlwdFJlc3VsdCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdFJlc3VsdDtcclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IERVTU1ZX0hPT0tTID0ge1xyXG4gICAgYmVmb3JlVGVzdDogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVTdWl0ZTogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVDYXNlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDb21tYW5kOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyVGVzdDogKCkgPT4ge30sXHJcbiAgICBhZnRlclN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyQ2FzZTogKCkgPT4ge30sXHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgMTtcclxuICAgICAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0Yyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlID0gbnVsbCwgcGFyYW1Nb2RlID0gbnVsbCwgbm9QYXJhbUF1dG9TZWFyY2ggPSB0cnVlLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgdmFyIHRlc3RjYXNlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICB0ZXN0Y2FzZS5uYW1lID0gZmlsZU5hbWVOb0V4dDtcclxuICAgICAgICB0ZXN0Y2FzZS5wYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGVzdGNhc2UuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICB0ZXN0Y2FzZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcblxyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSB0ZXN0Y2FzZS5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gdGVzdGNhc2UuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRlc3RjYXNlKTtcclxuICAgICAgICBpZiAodGVzdGNhc2UucmVvcGVuU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBzdWl0ZS5yZW9wZW5TZXNzaW9uID0gdGVzdGNhc2UucmVvcGVuU2Vzc2lvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3dkID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoZmlsZVBhdGgsIHsgZmlsZTogcGFyYW1GaWxlLCBtb2RlOiBwYXJhbU1vZGUgfSwgY3dkKTtcclxuICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgcmVhZGluZyBtb2RlIGlzICdhbGwnIHRoZW4gY2hhbmdlIGl0ZXJhdGlvbkNvdW50IHRvIHRoZSBhbW91bnQgb2Ygcm93cyBpbiB0aGUgcGFyYW0gZmlsZVxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgcGFyYW1Nb2RlID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGVQYXRoLCBwYXJhbU9wdHMgPSBudWxsLCBjd2QgPSBudWxsLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcGFyYW1GaWxlUGF0aCA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMuZmlsZSA/IHBhcmFtT3B0cy5maWxlIDogbnVsbDtcclxuICAgICAgICBsZXQgcGFyYW1Nb2RlID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5tb2RlID8gcGFyYW1PcHRzLm1vZGUgOiAnc2VxJztcclxuXHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZVBhdGggJiYgY3dkICYmICFwYXRoLmlzQWJzb2x1dGUocGFyYW1GaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgcGFyYW1GaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIHBhcmFtRmlsZVBhdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYubG9hZFBhcmFtZXRlck1hbmFnZXIobWFpbkZpbGVQYXRoLCBwYXJhbUZpbGVQYXRoLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2gpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHRlc3RDb25maWcucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIGZpbGU6IHBhcmFtRmlsZSxcclxuICAgICAgICAgICAgICAgIG1vZGU6IHBhcmFtTW9kZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihyZXF1aXJlKGZpbGVQYXRoKSwgdGVzdENvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZpbGVOYW1lV2l0aG91dEV4dDogZnVuY3Rpb24gKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdmFyIGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlUGF0aE5vRXh0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKGZpbGVFeHQpKTtcclxuICAgICAgICByZXR1cm4gZmlsZVBhdGhOb0V4dDtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFBhcmFtZXRlck1hbmFnZXI6IGFzeW5jIGZ1bmN0aW9uKG1haW5GaWxlLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgLy8gaWYgcGFyYW0gZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNoZWNrIGlmIEpTIGZpbGUgaXMgY29taW5nIGluIHBhaXIgd2l0aCBhIHBhcmFtZXRlciBmaWxlIFxyXG4gICAgICAgIC8vIChjdXJyZW50bHkgc3VwcG9ydGluZyBDU1Ygb3IgVFhUKVxyXG4gICAgICAgIGlmICghcGFyYW1GaWxlICYmIGF1dG9TZWFyY2gpIHtcclxuICAgICAgICAgICAgdmFyIGZpbGVOYW1lTm9FeHQgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChtYWluRmlsZSk7XHJcbiAgICAgICAgICAgIHZhciBjc3ZQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcuY3N2Jyk7XHJcbiAgICAgICAgICAgIHZhciB0eHRQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcudHh0Jyk7XHJcbiAgICAgICAgICAgIHZhciB4bHNQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzJyk7XHJcbiAgICAgICAgICAgIHZhciB4bHN4UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhsc3gnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNzdlBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IGNzdlBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHR4dFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHR4dFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc1BhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc1BhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc3hQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHN4UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgcGFyYW1NYW5hZ2VyID0gbmV3IHJlcXVpcmUoJy4vcGFyYW0tbWFuYWdlcicpKHBhcmFtRmlsZSwgcGFyYW1Nb2RlIHx8ICdzZXF1ZW50aWFsJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHBhcmFtTWFuYWdlci5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU1hbmFnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24ocGF0aFRvUmVzb2x2ZSwgYmFzZUZvbGRlcikge1xyXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aFRvUmVzb2x2ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoVG9SZXNvbHZlO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aFRvUmVzb2x2ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VTZXJpYWxpemFibGU6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveUNpcmN1bGFyKGVyciwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXJyO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam9ucGFja2VyL2Rlc3Ryb3ktY2lyY3VsYXJcclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2lyY3VsYXIoZnJvbSwgc2Vlbikge1xyXG4gICAgICAgICAgICB2YXIgdG8gPSBBcnJheS5pc0FycmF5KGZyb20pID8gW10gOiB7fTtcclxuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tW2tleV0gfHwgKHR5cGVvZiBmcm9tW2tleV0gIT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZnJvbVtrZXldKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuLmluZGV4T2YoZnJvbVtrZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBkZXN0cm95Q2lyY3VsYXIoZnJvbVtrZXldLCBzZWVuLnNsaWNlKDApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB0b1trZXldID0gJ1tDaXJjdWxhcl0nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWV0aG9kU2lnbmF0dXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBtZXRob2RBcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lICsgJygnICsgc2VsZi5zdHJpbmdpZnkobWV0aG9kQXJncywgMCkgKyAnKSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBVc2VkIHRvIHNlcmlhbGl6ZSBveHlnZW4gY29tbWFuZCBwYXJhbWV0ZXJzLiBQcm9kdWNlcyBhIG5vbi1jb21wbGlhbnQgSlNPTiBzZXJpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhcmdzLCBpbmRlbnRhdGlvbiA9IDApIHtcclxuICAgICAgICBsZXQgc3RyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgeyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9qc2JpL2lzc3Vlcy8zMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuZGVmaW5lZCBpcyBpbnNpZGUgYW4gYXJyYXkgdGhlbiBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbnVsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyIGlmIHdlIGp1c3QgcmV0dXJuICd1bmRlZmluZWQnIGhlcmUgYXMgc3RyaW5nLCBpdCB3aWxsIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyByZXR1cm4gbWFnaWMgc3RyaW5nIGluc3RlYWQgYW5kIHRyaW0gdGhlIHF1b3RlcyBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX19VTkRFRklORUQnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcvJyArIHZhbHVlLnNvdXJjZSArICcvJyArIHZhbHVlLmZsYWdzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBpbmRlbnRhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGVuY2xvc2luZyBhcnJheSBhbmQgYW55IHdoaXRlc3BhY2VcclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXFt7MX1cXHMqfFxccypcXF17MX0kL2csICcnKTtcclxuICAgICAgICAgICAgLy8gY29udmVydCBtYWdpYyAndW5kZWZpbmVkJyBzdHJpbmcgdG8gcHJvcGVyIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cIl9fVU5ERUZJTkVEXCIvZywgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2VyaWFsaXplIGNvbW1hbmQgYXJndW1lbnRzOiAnLCBlKTtcclxuICAgICAgICAgICAgc3RyID0gZS50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc0luRGVidWdNb2RlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyB0aGlzIGFsd2F5cyB0cnVlO1xyXG4gICAgICAgIC8vIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2LmpvaW4oKTtcclxuXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Byb2Nlc3MuZGVidWdQb3J0JywgcHJvY2Vzcy5kZWJ1Z1BvcnQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpXCIsIGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpXCIsIGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnZGVidWcnKVwiLCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpKTtcclxuXHJcbiAgICAgICAgLy8gcmV0dXJuIHByb2Nlc3MuZGVidWdQb3J0IHx8IGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKSB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpIHx8IGFyZ3YuaW5jbHVkZXMoJ2RlYnVnJyk7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFRlc3RIb29rczogZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIGxldCBob29rcyA9IERVTU1ZX0hPT0tTO1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudGFyZ2V0ICYmIG9wdGlvbnMudGFyZ2V0Lm5hbWUgPT09ICdveHlnZW4uY29uZicpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGhvb2tzID0gcmVxdWlyZShvcHRpb25zLnRhcmdldC5wYXRoKS5ob29rcyB8fCBEVU1NWV9IT09LUztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBsb2FkaW5nIHVzZXIgaG9va3M6JywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhvb2tzO1xyXG4gICAgfSxcclxuXHJcbiAgICBleGVjdXRlVGVzdEhvb2s6IGFzeW5jIGZ1bmN0aW9uKGhvb2tzLCBtZXRob2QsIGFyZ3MpIHtcclxuICAgICAgICAvLyBpZiBob29rIGlzIG5vdCBkZWZpbmVkLCBqdXN0IHF1aWV0bHkgaWdub3JlIGl0XHJcbiAgICAgICAgaWYgKCFob29rcyB8fCAhbWV0aG9kIHx8ICFob29rc1ttZXRob2RdIHx8IHR5cGVvZiBob29rc1ttZXRob2RdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWkgPSByZXF1aXJlKCdjaGFpJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZXJ5ID0gcmVxdWlyZSgnbW9ja2VyeScpO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5lbmFibGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsZWFuQ2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uUmVwbGFjZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uVW5yZWdpc3RlcmVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBtb2NrZXJ5LnJlZ2lzdGVyTW9jaygnY2hhaScsIGNoYWkpO1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgaG9va3NbbWV0aG9kXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBIb29rIFwiJHttZXRob2R9XCIgaGFzIHRocm93biBhbiBlcnJvcjogJHtlLnRvU3RyaW5nKCl9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRPeE1vZHVsZXNEaXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnb3hfbW9kdWxlcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBob29rTG9ncyhsb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBvcmlnbG9nID0gY29uc29sZS5sb2c7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0RlYnVnID0gY29uc29sZS5kZWJ1ZztcclxuICAgICAgICBjb25zdCBvcmlnSW5mbyA9IGNvbnNvbGUuaW5mbztcclxuICAgICAgICBjb25zdCBvcmlnV2FybiA9IGNvbnNvbGUud2FybjtcclxuICAgICAgICBjb25zdCBvcmlnRXJyb3IgPSBjb25zb2xlLmVycm9yO1xyXG5cclxuICAgICAgICBjb25zdCBwcm9jZXNzQXJncyA9IChhcmd1bWVudEFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmd1bWVudEFycmF5ICYmIGFyZ3VtZW50QXJyYXkubWFwKSB7XHJcbiAgICAgICAgICAgICAgICBhcmd1bWVudEFycmF5Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7aXRlbX1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHt1dGlsLmluc3BlY3QoaXRlbSl9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuam9pbignICcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ2xvZy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdEZWJ1Zy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdJbmZvLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLndhcm4gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnV2Fybi5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdFcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoc3RlcHMpIHtcclxuICAgICAgICBpZiAoc3RlcHMgJiYgc3RlcHMubGVuZ3RoICYmIHN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0ZXBzID0gWy4uLnN0ZXBzXTtcclxuICAgICAgICAgICAgc3RlcHMubWFwKChpdGVtLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgJiYgaXRlbS5uYW1lLmluY2x1ZGVzICYmIGl0ZW0ubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uKCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPSBpZHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9PT0gJ251bWJlcicgJiYgaXRlbS5zdGF0dXMgJiYgaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RlcHNbbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXhdWydzdGF0dXMnXSA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGVwcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGVwcztcclxuICAgIH0sXHJcblxyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZFRleHQgPSBCdWZmZXIuZnJvbSh0ZXh0LCAnaGV4Jyk7XHJcbiAgICAgICAgbGV0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYWxnb3JpdGhtLCBrZXksIGl2KTtcclxuICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIGNvbnN0IHJldFZhbCA9IGRlY3J5cHRlZC50b1N0cmluZygpO1xyXG4gICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfVxyXG59O1xyXG4iXX0=
|
|
359
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJqb2luIiwidGFyZ2V0IiwiY3dkIiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50Iiwib3B0aW9ucyIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJjYXNlcyIsImZvckVhY2giLCJjYXNlRGVmIiwidGMiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJyZXNvbHZlUGF0aCIsImZvcm1hdCIsInB1c2giLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJmaWxlUGF0aCIsInBhcmFtRmlsZSIsInBhcmFtTW9kZSIsIm5vUGFyYW1BdXRvU2VhcmNoIiwiZmlsZU5hbWVOb0V4dCIsInRlc3RjYXNlIiwicmVvcGVuU2Vzc2lvbiIsImRpcm5hbWUiLCJmaWxlIiwibW9kZSIsIm1haW5GaWxlUGF0aCIsInBhcmFtT3B0cyIsImF1dG9TZWFyY2giLCJwYXJhbUZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsImxvYWRQYXJhbWV0ZXJNYW5hZ2VyIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJmaWxlTmFtZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJleGlzdHNTeW5jIiwiaW5pdCIsInBhdGhUb1Jlc29sdmUiLCJiYXNlRm9sZGVyIiwicmVzb2x2ZSIsIm1ha2VTZXJpYWxpemFibGUiLCJlcnIiLCJkZXN0cm95Q2lyY3VsYXIiLCJmcm9tIiwic2VlbiIsInRvIiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImluZGV4T2YiLCJzbGljZSIsImdldE1ldGhvZFNpZ25hdHVyZSIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwibWV0aG9kQXJncyIsInN0cmluZ2lmeSIsImFyZ3MiLCJpbmRlbnRhdGlvbiIsInN0ciIsIkpTT04iLCJ2YWx1ZSIsIkVycm9yIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJyZXBsYWNlIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiaXNJbkRlYnVnTW9kZSIsImxvYWRUZXN0SG9va3MiLCJob29rcyIsImV4ZWN1dGVUZXN0SG9vayIsIm1ldGhvZCIsImdsb2JhbCIsImNoYWlBbmRNb2NrZXJ5TG9hZGVkIiwiY2hhaSIsIm1vY2tlcnkiLCJlbmFibGUiLCJ1c2VDbGVhbkNhY2hlIiwid2Fybk9uUmVwbGFjZSIsIndhcm5PblVucmVnaXN0ZXJlZCIsInJlZ2lzdGVyTW9jayIsImFwcGx5IiwidW5kZWZpbmVkIiwiZXJyb3IiLCJnZXRPeE1vZHVsZXNEaXIiLCJfX2Rpcm5hbWUiLCJob29rTG9ncyIsImxvZ2dlciIsIm9yaWdsb2ciLCJsb2ciLCJvcmlnRGVidWciLCJkZWJ1ZyIsIm9yaWdJbmZvIiwiaW5mbyIsIm9yaWdXYXJuIiwib3JpZ0Vycm9yIiwicHJvY2Vzc0FyZ3MiLCJhcmd1bWVudEFycmF5IiwibWFwIiwiaXRlbSIsImluc3BlY3QiLCJtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQiLCJzdGVwcyIsImxlbmd0aCIsImxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4IiwibmV3U3RlcHMiLCJpZHgiLCJpbmNsdWRlcyIsInN0YXR1cyIsImRlY3J5cHQiLCJ0ZXh0IiwiZW5jcnlwdGVkVGV4dCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsImRlY3J5cHRlZCIsInVwZGF0ZSIsImNvbmNhdCIsImZpbmFsIiwicmV0VmFsIiwiT3h5Z2VuRXJyb3IiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIkNSWVBUT19FUlJPUiIsImVuY3J5cHQiLCJjaXBoZXIiLCJjcmVhdGVDaXBoZXJpdiIsImVuY3J5cHRlZCIsInNsZWVwIiwidGltZW91dCIsIlByb21pc2UiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7O0FBc0JBOztBQUNBOzs7O0FBWEEsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNQyxFQUFFLEdBQUdELE9BQU8sQ0FBQyxJQUFELENBQWxCOztBQUNBLE1BQU1FLE1BQU0sR0FBR0YsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsTUFBTUcsTUFBTSxHQUFHSCxPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxNQUFNSSxJQUFJLEdBQUdKLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLE1BQU1LLFFBQVEsR0FBR0wsT0FBTyxDQUFDLG9CQUFELENBQVAsQ0FBOEJNLGFBQS9DOztBQUNBLE1B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VXhCQyxFQUFBQSxPQUFPLENBQUNiLElBQUQsRUFBTztBQUNWLFFBQUljLE1BQU0sR0FBR3hMLE1BQU0sQ0FBQ3lMLGNBQVAsQ0FBc0JoTCxTQUF0QixFQUFpQ0wsR0FBakMsRUFBc0NFLEVBQXRDLENBQWI7QUFDQSxRQUFJb0wsU0FBUyxHQUFHRixNQUFNLENBQUNULE1BQVAsQ0FBY0wsSUFBZCxDQUFoQjtBQUNBZ0IsSUFBQUEsU0FBUyxHQUFHbkwsTUFBTSxDQUFDeUssTUFBUCxDQUFjLENBQUNVLFNBQUQsRUFBWUYsTUFBTSxDQUFDUCxLQUFQLEVBQVosQ0FBZCxDQUFaO0FBQ0EsV0FBT1MsU0FBUyxDQUFDOUosUUFBVixDQUFtQixLQUFuQixDQUFQO0FBQ0gsR0E5VXVCOztBQWdWeEIrSixFQUFBQSxLQUFLLEVBQUUsVUFBU0MsT0FBVCxFQUFrQjtBQUNyQixXQUFPLElBQUlDLE9BQUosQ0FBYTdGLE9BQUQsSUFBYThGLFVBQVUsQ0FBQzlGLE9BQUQsRUFBVTRGLE9BQVYsQ0FBbkMsQ0FBUDtBQUNIO0FBbFZ1QixDQUE1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBtb2R1bGUgZm9yIGludGVybmFsIE94eWdlbiB1c2VcclxuICovXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcclxuY29uc3QgbW9tZW50ID0gcmVxdWlyZSgnbW9tZW50Jyk7XHJcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xyXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xyXG5jb25zdCBwYXNzd29yZCA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLmVuY3J5cHRpb25LZXk7XHJcbmNvbnN0IGtleSA9IGNyeXB0by5zY3J5cHRTeW5jKHBhc3N3b3JkLCAnR2ZHJywgMjQpO1xyXG5jb25zdCBpdiA9IEJ1ZmZlci5hbGxvYygxNiwgMCk7XHJcbmNvbnN0IGFsZ29yaXRobSA9ICdhZXMtMTkyLWNiYyc7XHJcblxyXG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuZnVuY3Rpb24gRGVjcnlwdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIGNvbnN0IGRlY3J5cHRSZXN1bHQgPSByZXN1bHQ7XHJcblxyXG4gICAgdGhpcy5nZXREZWNyeXB0UmVzdWx0ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0UmVzdWx0O1xyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgRFVNTVlfSE9PS1MgPSB7XHJcbiAgICBiZWZvcmVUZXN0OiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZVN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNhc2U6ICgpID0+IHt9LFxyXG4gICAgYmVmb3JlQ29tbWFuZDogKCkgPT4ge30sXHJcbiAgICBhZnRlckNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJUZXN0OiAoKSA9PiB7fSxcclxuICAgIGFmdGVyU3VpdGU6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDYXNlOiAoKSA9PiB7fSxcclxufTtcclxuXHJcbnZhciBzZWxmID0gbW9kdWxlLmV4cG9ydHMgPSB7XHJcblxyXG4gICAgZ2VuZXJhdGVVbmlxdWVJZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyg0KS50b1N0cmluZygnaGV4Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFRpbWVTdGFtcDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudC51dGMoKS52YWx1ZU9mKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb246IGFzeW5jIGZ1bmN0aW9uKHN1aXRlRGVmLCB0ZXN0Q29uZmlnLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgc3VpdGUgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdHN1aXRlLmpzJykoKTtcclxuICAgICAgICBzdWl0ZS5pZCA9IG51bGw7XHJcbiAgICAgICAgc3VpdGUubmFtZSA9IHN1aXRlRGVmLm5hbWU7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBzdWl0ZURlZi5pZDtcclxuICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IHN1aXRlRGVmLml0ZXJhdGlvbnMgfHwgdGVzdENvbmZpZy5pdGVyYXRpb25zIHx8IGl0ZXJhdGlvbkNvdW50O1xyXG4gICAgICAgIGNvbnN0IHN1aXRlRmlsZVBhdGggPSBzdWl0ZURlZi5wYXRoIHx8IHBhdGguam9pbih0ZXN0Q29uZmlnLnRhcmdldC5jd2QsICdzdWl0ZXMnLCBgJHtzdWl0ZURlZi5uYW1lfS5qc29uYCk7XHJcbiAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyID0gYXdhaXQgc2VsZi5nZXRQYXJhbWV0ZXJNYW5hZ2VyKHN1aXRlRmlsZVBhdGgsIHRlc3RDb25maWcucGFyYW1ldGVycywgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyICYmIHN1aXRlLnBhcmFtTWFuYWdlci5nZXRNb2RlKCkgPT0gJ2FsbCcpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZS5wYXJhbU1hbmFnZXIucm93cztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VpdGUuY2FwYWJpbGl0aWVzID0gc3VpdGVEZWYuY2FwYWJpbGl0aWVzIHx8IHRlc3RDb25maWcuY2FwYWJpbGl0aWVzIHx8IHt9O1xyXG4gICAgICAgIHN1aXRlLmVudmlyb25tZW50ID0gdGVzdENvbmZpZy5lbnZpcm9ubWVudCB8fCBudWxsO1xyXG4gICAgICAgIHN1aXRlLm9wdGlvbnMgPSB0ZXN0Q29uZmlnLm9wdGlvbnMgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5wYXJhbGxlbCA9IHN1aXRlRGVmLnBhcmFsbGVsIHx8IHRlc3RDb25maWcucGFyYWxsZWwgfHwgdGVzdENvbmZpZy5jb25jdXJyZW5jeSB8fCAxO1xyXG4gICAgICAgIC8vIGluaXRpYWxpemUgZWFjaCB0ZXN0IGNhc2VcclxuICAgICAgICBzdWl0ZURlZi5jYXNlcy5mb3JFYWNoKGNhc2VEZWYgPT4ge1xyXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIHRlc3RjYXNlIG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCB0YyA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0Y2FzZS5qcycpKCk7XHJcbiAgICAgICAgICAgIGlmIChjYXNlRGVmLm5hbWUpXHJcbiAgICAgICAgICAgICAgICB0Yy5uYW1lID0gY2FzZURlZi5uYW1lO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0Yy5uYW1lID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoY2FzZURlZi5wYXRoKTtcclxuICAgICAgICAgICAgdGMucGF0aCA9IHNlbGYucmVzb2x2ZVBhdGgoY2FzZURlZi5wYXRoLCB0ZXN0Q29uZmlnLnRhcmdldC5jd2QpO1xyXG4gICAgICAgICAgICB0Yy5mb3JtYXQgPSAnanMnO1xyXG4gICAgICAgICAgICB0Yy5pdGVyYXRpb25Db3VudCA9IGNhc2VEZWYuaXRlcmF0aW9ucyB8fCAxO1xyXG4gICAgICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc3VpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUgPSBudWxsLCBwYXJhbU1vZGUgPSBudWxsLCBub1BhcmFtQXV0b1NlYXJjaCA9IHRydWUsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICB2YXIgdGVzdGNhc2UgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgIHRlc3RjYXNlLm5hbWUgPSBmaWxlTmFtZU5vRXh0O1xyXG4gICAgICAgIHRlc3RjYXNlLnBhdGggPSBmaWxlUGF0aDtcclxuICAgICAgICB0ZXN0Y2FzZS5mb3JtYXQgPSAnanMnO1xyXG4gICAgICAgIHRlc3RjYXNlLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUubmFtZSA9IHRlc3RjYXNlLm5hbWU7XHJcbiAgICAgICAgc3VpdGUuaWQgPSB0ZXN0Y2FzZS5pZDtcclxuICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IGl0ZXJhdGlvbkNvdW50O1xyXG4gICAgICAgIHN1aXRlLmNhc2VzLnB1c2godGVzdGNhc2UpO1xyXG4gICAgICAgIGlmICh0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnJlb3BlblNlc3Npb24gPSB0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjd2QgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihmaWxlUGF0aCwgeyBmaWxlOiBwYXJhbUZpbGUsIG1vZGU6IHBhcmFtTW9kZSB9LCBjd2QpO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgaXMgJ2FsbCcgdGhlbiBjaGFuZ2UgaXRlcmF0aW9uQ291bnQgdG8gdGhlIGFtb3VudCBvZiByb3dzIGluIHRoZSBwYXJhbSBmaWxlXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBwYXJhbU1vZGUgPT0gJ2FsbCcpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZS5wYXJhbU1hbmFnZXIucm93cztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZVBhdGgsIHBhcmFtT3B0cyA9IG51bGwsIGN3ZCA9IG51bGwsIGF1dG9TZWFyY2ggPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBwYXJhbUZpbGVQYXRoID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5maWxlID8gcGFyYW1PcHRzLmZpbGUgOiBudWxsO1xyXG4gICAgICAgIGxldCBwYXJhbU1vZGUgPSBwYXJhbU9wdHMgJiYgcGFyYW1PcHRzLm1vZGUgPyBwYXJhbU9wdHMubW9kZSA6ICdzZXEnO1xyXG5cclxuICAgICAgICBpZiAocGFyYW1GaWxlUGF0aCAmJiBjd2QgJiYgIXBhdGguaXNBYnNvbHV0ZShwYXJhbUZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBwYXJhbUZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgcGFyYW1GaWxlUGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5sb2FkUGFyYW1ldGVyTWFuYWdlcihtYWluRmlsZVBhdGgsIHBhcmFtRmlsZVBhdGgsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlOiBhc3luYyBmdW5jdGlvbiAoZmlsZVBhdGgsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlID0gbnVsbCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgdGVzdENvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyB8fCB7fSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgdGVzdENvbmZpZy5wYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgZmlsZTogcGFyYW1GaWxlLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogcGFyYW1Nb2RlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHJlcXVpcmUoZmlsZVBhdGgpLCB0ZXN0Q29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RmlsZU5hbWVXaXRob3V0RXh0OiBmdW5jdGlvbiAoZmlsZVBhdGgpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICB2YXIgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVQYXRoTm9FeHQgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoZmlsZUV4dCkpO1xyXG4gICAgICAgIHJldHVybiBmaWxlUGF0aE5vRXh0O1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkUGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGUsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgcGFyYW1NYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICAvLyBpZiBwYXJhbSBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY2hlY2sgaWYgSlMgZmlsZSBpcyBjb21pbmcgaW4gcGFpciB3aXRoIGEgcGFyYW1ldGVyIGZpbGUgXHJcbiAgICAgICAgLy8gKGN1cnJlbnRseSBzdXBwb3J0aW5nIENTViBvciBUWFQpXHJcbiAgICAgICAgaWYgKCFwYXJhbUZpbGUgJiYgYXV0b1NlYXJjaCkge1xyXG4gICAgICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KG1haW5GaWxlKTtcclxuICAgICAgICAgICAgdmFyIGNzdlBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy5jc3YnKTtcclxuICAgICAgICAgICAgdmFyIHR4dFBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy50eHQnKTtcclxuICAgICAgICAgICAgdmFyIHhsc1BhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy54bHMnKTtcclxuICAgICAgICAgICAgdmFyIHhsc3hQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzeCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY3N2UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gY3N2UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmModHh0UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gdHh0UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzUGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0geGxzUGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzeFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc3hQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZSkge1xyXG4gICAgICAgICAgICBwYXJhbU1hbmFnZXIgPSBuZXcgcmVxdWlyZSgnLi9wYXJhbS1tYW5hZ2VyJykocGFyYW1GaWxlLCBwYXJhbU1vZGUgfHwgJ3NlcXVlbnRpYWwnKTtcclxuICAgICAgICAgICAgYXdhaXQgcGFyYW1NYW5hZ2VyLmluaXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtTWFuYWdlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc29sdmVQYXRoOiBmdW5jdGlvbihwYXRoVG9SZXNvbHZlLCBiYXNlRm9sZGVyKSB7XHJcbiAgICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShwYXRoVG9SZXNvbHZlKSlcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGhUb1Jlc29sdmU7XHJcbiAgICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBwYXRoVG9SZXNvbHZlKTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVNlcmlhbGl6YWJsZTogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0cm95Q2lyY3VsYXIoZXJyLCBbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlcnI7XHJcblxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb25wYWNrZXIvZGVzdHJveS1jaXJjdWxhclxyXG4gICAgICAgIGZ1bmN0aW9uIGRlc3Ryb3lDaXJjdWxhcihmcm9tLCBzZWVuKSB7XHJcbiAgICAgICAgICAgIHZhciB0byA9IEFycmF5LmlzQXJyYXkoZnJvbSkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgICBzZWVuLnB1c2goZnJvbSk7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZyb20pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZyb21ba2V5XSB8fCAodHlwZW9mIGZyb21ba2V5XSAhPSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShmcm9tW2tleV0pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlZW4uaW5kZXhPZihmcm9tW2tleV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGRlc3Ryb3lDaXJjdWxhcihmcm9tW2tleV0sIHNlZW4uc2xpY2UoMCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHRvW2tleV0gPSAnW0NpcmN1bGFyXSc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdG87XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRNZXRob2RTaWduYXR1cmU6IGZ1bmN0aW9uKG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIG1ldGhvZEFyZ3MpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlTmFtZSArICcuJyArIG1ldGhvZE5hbWUgKyAnKCcgKyBzZWxmLnN0cmluZ2lmeShtZXRob2RBcmdzLCAwKSArICcpJztcclxuICAgIH0sXHJcblxyXG4gICAgLypcclxuICAgICAqIFVzZWQgdG8gc2VyaWFsaXplIG94eWdlbiBjb21tYW5kIHBhcmFtZXRlcnMuIFByb2R1Y2VzIGEgbm9uLWNvbXBsaWFudCBKU09OIHNlcmlhbGl6YXRpb24uXHJcbiAgICAgKi9cclxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGFyZ3MsIGluZGVudGF0aW9uID0gMCkge1xyXG4gICAgICAgIGxldCBzdHI7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3RyID0gSlNPTi5zdHJpbmdpZnkoYXJncywgKGtleSwgdmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7ICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL2pzYmkvaXNzdWVzLzMwXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdW5kZWZpbmVkIGlzIGluc2lkZSBhbiBhcnJheSB0aGVuIGl0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBudWxsLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIgaWYgd2UganVzdCByZXR1cm4gJ3VuZGVmaW5lZCcgaGVyZSBhcyBzdHJpbmcsIGl0IHdpbGwgYmUgZW5jbG9zZWQgaW4gcXVvdGVzLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHJldHVybiBtYWdpYyBzdHJpbmcgaW5zdGVhZCBhbmQgdHJpbSB0aGUgcXVvdGVzIGxhdGVyIG9uXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdfX1VOREVGSU5FRCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy8nICsgdmFsdWUuc291cmNlICsgJy8nICsgdmFsdWUuZmxhZ3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgIH0sIGluZGVudGF0aW9uKTtcclxuICAgICAgICAgICAgLy8gdHJpbSB0aGUgZW5jbG9zaW5nIGFycmF5IGFuZCBhbnkgd2hpdGVzcGFjZVxyXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcW3sxfVxccyp8XFxzKlxcXXsxfSQvZywgJycpO1xyXG4gICAgICAgICAgICAvLyBjb252ZXJ0IG1hZ2ljICd1bmRlZmluZWQnIHN0cmluZyB0byBwcm9wZXIgcmVwcmVzZW50YXRpb25cclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1wiX19VTkRFRklORURcIi9nLCAndW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzZXJpYWxpemUgY29tbWFuZCBhcmd1bWVudHM6ICcsIGUpO1xyXG4gICAgICAgICAgICBzdHIgPSBlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzSW5EZWJ1Z01vZGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIHRoaXMgYWx3YXlzIHRydWU7XHJcbiAgICAgICAgLy8gY29uc3QgYXJndiA9IHByb2Nlc3MuZXhlY0FyZ3Yuam9pbigpO1xyXG5cclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncHJvY2Vzcy5kZWJ1Z1BvcnQnLCBwcm9jZXNzLmRlYnVnUG9ydCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpXCIsIGFyZ3YuaW5jbHVkZXMoJ2RlYnVnJykpO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gcHJvY2Vzcy5kZWJ1Z1BvcnQgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpIHx8IGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJykgfHwgYXJndi5pbmNsdWRlcygnZGVidWcnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkVGVzdEhvb2tzOiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IGhvb2tzID0gRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy50YXJnZXQgJiYgb3B0aW9ucy50YXJnZXQubmFtZSA9PT0gJ294eWdlbi5jb25mJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaG9va3MgPSByZXF1aXJlKG9wdGlvbnMudGFyZ2V0LnBhdGgpLmhvb2tzIHx8IERVTU1ZX0hPT0tTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIGxvYWRpbmcgdXNlciBob29rczonLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaG9va3M7XHJcbiAgICB9LFxyXG5cclxuICAgIGV4ZWN1dGVUZXN0SG9vazogYXN5bmMgZnVuY3Rpb24oaG9va3MsIG1ldGhvZCwgYXJncykge1xyXG4gICAgICAgIC8vIGlmIGhvb2sgaXMgbm90IGRlZmluZWQsIGp1c3QgcXVpZXRseSBpZ25vcmUgaXRcclxuICAgICAgICBpZiAoIWhvb2tzIHx8ICFtZXRob2QgfHwgIWhvb2tzW21ldGhvZF0gfHwgdHlwZW9mIGhvb2tzW21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChnbG9iYWwuY2hhaUFuZE1vY2tlcnlMb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hhaSA9IHJlcXVpcmUoJ2NoYWknKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vY2tlcnkgPSByZXF1aXJlKCdtb2NrZXJ5Jyk7XHJcbiAgICAgICAgICAgICAgICBtb2NrZXJ5LmVuYWJsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2xlYW5DYWNoZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB3YXJuT25SZXBsYWNlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB3YXJuT25VbnJlZ2lzdGVyZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkucmVnaXN0ZXJNb2NrKCdjaGFpJywgY2hhaSk7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwuY2hhaUFuZE1vY2tlcnlMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhd2FpdCBob29rc1ttZXRob2RdLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEhvb2sgXCIke21ldGhvZH1cIiBoYXMgdGhyb3duIGFuIGVycm9yOiAke2UudG9TdHJpbmcoKX1gKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE94TW9kdWxlc0RpcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdveF9tb2R1bGVzJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhvb2tMb2dzKGxvZ2dlcikge1xyXG4gICAgICAgIGNvbnN0IG9yaWdsb2cgPSBjb25zb2xlLmxvZztcclxuICAgICAgICBjb25zdCBvcmlnRGVidWcgPSBjb25zb2xlLmRlYnVnO1xyXG4gICAgICAgIGNvbnN0IG9yaWdJbmZvID0gY29uc29sZS5pbmZvO1xyXG4gICAgICAgIGNvbnN0IG9yaWdXYXJuID0gY29uc29sZS53YXJuO1xyXG4gICAgICAgIGNvbnN0IG9yaWdFcnJvciA9IGNvbnNvbGUuZXJyb3I7XHJcblxyXG4gICAgICAgIGNvbnN0IHByb2Nlc3NBcmdzID0gKGFyZ3VtZW50QXJyYXkpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50QXJyYXkgJiYgYXJndW1lbnRBcnJheS5tYXApIHtcclxuICAgICAgICAgICAgICAgIGFyZ3VtZW50QXJyYXkubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHtpdGVtfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke3V0aWwuaW5zcGVjdChpdGVtKX1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnbG9nLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmRlYnVnID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ0RlYnVnLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIuZGVidWcocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5pbmZvID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ0luZm8uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUud2FybiA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdXYXJuLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIud2Fybihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmVycm9yID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ0Vycm9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZChzdGVwcykge1xyXG4gICAgICAgIGlmIChzdGVwcyAmJiBzdGVwcy5sZW5ndGggJiYgc3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgbmV3U3RlcHMgPSBbLi4uc3RlcHNdO1xyXG4gICAgICAgICAgICBzdGVwcy5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZSAmJiBpdGVtLm5hbWUuaW5jbHVkZXMgJiYgaXRlbS5uYW1lLmluY2x1ZGVzKCcudHJhbnNhY3Rpb24oJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGlkeDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID09PSAnbnVtYmVyJyAmJiBpdGVtLnN0YXR1cyAmJiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdTdGVwc1tsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleF1bJ3N0YXR1cyddID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG5ld1N0ZXBzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN0ZXBzO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWNyeXB0KHRleHQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgZW5jcnlwdGVkVGV4dCA9IEJ1ZmZlci5mcm9tKHRleHQsICdoZXgnKTtcclxuICAgICAgICAgICAgbGV0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYWxnb3JpdGhtLCBrZXksIGl2KTtcclxuICAgICAgICAgICAgbGV0IGRlY3J5cHRlZCA9IGRlY2lwaGVyLnVwZGF0ZShlbmNyeXB0ZWRUZXh0KTtcclxuICAgICAgICAgICAgZGVjcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZGVjcnlwdGVkLCBkZWNpcGhlci5maW5hbCgpXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZhbCA9IGRlY3J5cHRlZC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERlY3J5cHRSZXN1bHQocmV0VmFsKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeHlnZW5FcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1JZUFRPX0VSUk9SLCBcIlRoZSBwcm92aWRlZCBhcmd1bWVudCBkb2Vzbid0IHNlZW0gdG8gYmUgYSB2YWxpZCBjaXBoZXIgcHJvZHVjZWQgYnkgJ3V0aWxzLmVuY3J5cHQnXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZW5jcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgbGV0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgIGxldCBlbmNyeXB0ZWQgPSBjaXBoZXIudXBkYXRlKHRleHQpO1xyXG4gICAgICAgIGVuY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2VuY3J5cHRlZCwgY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICByZXR1cm4gZW5jcnlwdGVkLnRvU3RyaW5nKCdoZXgnKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2xlZXA6IGZ1bmN0aW9uKHRpbWVvdXQpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCkpO1xyXG4gICAgfVxyXG59O1xyXG4iXX0=
|
|
@@ -48,7 +48,7 @@ module.exports = function () {
|
|
|
48
48
|
// could happen only on unix due to missing unixodbc binaries
|
|
49
49
|
const ModuleUnavailableError = require('../errors/ModuleUnavailableError');
|
|
50
50
|
|
|
51
|
-
throw new ModuleUnavailableError('
|
|
51
|
+
throw new ModuleUnavailableError('Unable to load DB module. ' + e.message);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
connection = await db.connect(this.connString);
|
|
@@ -143,4 +143,4 @@ module.exports = function () {
|
|
|
143
143
|
|
|
144
144
|
return module;
|
|
145
145
|
};
|
|
146
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1kYi5qcyJdLCJuYW1lcyI6WyJjb25uZWN0aW9uIiwiZXJySGVscGVyIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJpc0luaXRpYWxpemVkIiwiX29wZW5EYkNvbm4iLCJjb25uU3RyaW5nIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJkYiIsImUiLCJNb2R1bGVVbmF2YWlsYWJsZUVycm9yIiwiY29ubmVjdCIsImdldERiRXJyb3JNZXNzYWdlIiwic2V0Q29ubmVjdGlvblN0cmluZyIsImdldFNjYWxhciIsInF1ZXJ5IiwicmVzdWx0U2V0IiwibGVuZ3RoIiwiZmlyc3RSb3ciLCJmaXJzdENvbCIsIk9iamVjdCIsImtleXMiLCJEQl9RVUVSWV9FUlJPUiIsImNsb3NlIiwiZXhlY3V0ZVF1ZXJ5IiwicXVlcnlTeW5jUmV0dmFsIiwiZXhlY3V0ZU5vblF1ZXJ5Il0sIm1hcHBpbmdzIjoiOzs7O0FBb0JBOzs7O0FBcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlBLFVBQUo7O0FBR0EsSUFBSUMsU0FBUyxHQUFHQyxPQUFPLENBQUMsa0JBQUQsQ0FBdkI7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixZQUFXO0FBQ3hCO0FBQ0FELEVBQUFBLE1BQU0sQ0FBQ0UsYUFBUCxHQUF1QixZQUFXO0FBQzlCLFdBQU8sSUFBUDtBQUNILEdBRkQ7O0FBSUFGLEVBQUFBLE1BQU0sQ0FBQ0csV0FBUCxHQUFxQixrQkFBaUI7QUFDbEMsUUFBSSxDQUFDLEtBQUtDLFVBQVYsRUFBc0I7QUFDbEIsWUFBTSxJQUFJQyxvQkFBSixDQUFZUCxTQUFTLENBQUNRLFNBQVYsQ0FBb0JDLG1CQUFoQyxFQUFxRCwrREFBckQsQ0FBTjtBQUNIOztBQUVELFFBQUk7QUFDQTtB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QU9OLENBQVAsRUFBVTtBQUNSLFlBQU0sSUFBSUosb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CZ0IsY0FBaEMsRUFBZ0R4QixTQUFTLENBQUNjLGlCQUFWLENBQTRCSCxDQUE1QixDQUFoRCxDQUFOO0FBQ0gsS0FKRCxTQUlVO0FBQ04sWUFBTVosVUFBVSxDQUFDMEIsS0FBWCxFQUFOO0FBQ0g7QUFDSixHQVREOztBQVdBLFNBQU92QixNQUFQO0FBQ0gsQ0F4R0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBkYlxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIERhdGEgQmFzZXMgdGhyb3VnaCBPREJDLlxyXG4gKiBAbm90ZSBCZWZvcmUgdXNpbmcgdGhpcyBtb2R1bGUsIG1ha2Ugc3VyZSB0byBpbnN0YWxsIGB1bml4b2RiY2A6ICBcclxuICogICAqIFdpbmRvd3MgLSBJbnN0YWxsIGBXaW5kb3dzIFNES2AgIFxyXG4gKiAgICogT1MgWCAtICBgYnJldyBpbnN0YWxsIHVuaXhvZGJjYCAgXHJcbiAqICAgKiBMaW51eCAtIGBzdWRvIGFwdC1nZXQgaW5zdGFsbCB1bml4b2RiYyB1bml4b2RiYy1kZXZgIG9yIGBzdWRvIGRuZiBpbnN0YWxsIHVuaXhPREJDIHVuaXhPREJDLWRldmVsYFxyXG4gKi9cclxuXHJcbnZhciBjb25uZWN0aW9uO1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxudmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBGSVhNRTogY2hhbmdlIHNldENvbm5lY3Rpb25TdHJpbmcgdG8gaW5pdCBhbmQgYWRkIGhhZG5saW5nIGluIGhlcmVcclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5fb3BlbkRiQ29ubiA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb25uU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfQ09OTkVDVElPTl9FUlJPUiwgJ05vIGNvbm5lY3Rpb24gc3RyaW5nIHNwZWNpZmllZC4gVXNlIGRiLnNldENvbm5lY3Rpb25TdHJpbmcoKS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSB0aGlzIG1vZHVsZSBpZiBvZGJjIHdhc24ndCBpbnN0YWxsZWRcclxuICAgICAgICAgICAgdmFyIGRiO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZGIgPSByZXF1aXJlKCdvZGJjJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhcHBlbiBvbmx5IG9uIHVuaXggZHVlIHRvIG1pc3NpbmcgdW5peG9kYmMgYmluYXJpZXNcclxuICAgICAgICAgICAgICAgIGNvbnN0IE1vZHVsZVVuYXZhaWxhYmxlRXJyb3IgPSByZXF1aXJlKCcuLi9lcnJvcnMvTW9kdWxlVW5hdmFpbGFibGVFcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZVVuYXZhaWxhYmxlRXJyb3IoJ2B1bml4b2RiY2AgYmluYXJpZXMgbm90IGluc3RhbGxlZCcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25uZWN0aW9uID0gYXdhaXQgZGIuY29ubmVjdCh0aGlzLmNvbm5TdHJpbmcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9DT05ORUNUSU9OX0VSUk9SLCBlcnJIZWxwZXIuZ2V0RGJFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBzdW1tYXJ5IFNldHMgREIgY29ubmVjdGlvbiBzdHJpbmcgdG8gYmUgdXNlZCBieSBvdGhlciBtZXRob2RzLlxyXG4gICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgZG9lc24ndCBhY3R1YWxseSBvcGVuIHRoZSBjb25uZWN0aW9uIGFzIGl0J3Mgb3BlbmVkL2Nsb3NlZFxyXG4gICAgKiAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBieSBxdWVyeSBtZXRob2RzLiAgXHJcbiAgICAqICAgICAgICAgICAgICBFeGFtcGxlIGNvbm5lY3Rpb24gc3RyaW5nczogIFxyXG4gICAgKiAgICAgICAgICAgICAgLSBgRHJpdmVyPXtNeVNRTCBPREJDIDUuMyBVTklDT0RFIERyaXZlcn07U2VydmVyPWxvY2FsaG9zdDtEYXRhYmFzZT1teURhdGFiYXNlO1xyXG4gICAgKiAgICAgICAgICAgICAgICBVc2VyPW15VXNlcm5hbWU7UGFzc3dvcmQ9bXlQYXNzd29yZDtPcHRpb249MztgICBcclxuICAgICogICAgICAgICAgICAgIC0gYERyaXZlcj17T3JhY2xlIGluIGluc3RhbnRjbGllbnRfMTFfMn07ZGJxPTEyNy4wLjAuMToxNTIxL1hFO3VpZD1teVVzZXJuYW1lO1xyXG4gICAgKiAgICAgICAgICAgICAgICBwd2Q9bXlQYXNzd29yZDtgXHJcbiAgICAqIEBmdW5jdGlvbiBzZXRDb25uZWN0aW9uU3RyaW5nXHJcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb25uU3RyaW5nIC0gT0RCQyBjb25uZWN0aW9uIHN0cmluZy5cclxuICAgICovXHJcbiAgICBtb2R1bGUuc2V0Q29ubmVjdGlvblN0cmluZyA9IGZ1bmN0aW9uKGNvbm5TdHJpbmcpIHtcclxuICAgICAgICBtb2R1bGUuY29ublN0cmluZyA9IGNvbm5TdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZXMgU1FMIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGZpcnN0IHJvdyBpbiB0aGUgcmVzdWx0IHNldC5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRTY2FsYXJcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgZmlyc3QgY29sdW1uIG9mIHRoZSBmaXJzdCByb3cgaW4gdGhlIHJlc3VsdCBzZXQsIG9yIG51bGwgaWYgdGhlIHJlc3VsdFxyXG4gICAgICogICAgICAgICAgICAgICAgICBzZXQgaXMgZW1wdHkuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRTY2FsYXIgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHRTZXQgPSBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdFNldC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmaXJzdFJvdyA9IHJlc3VsdFNldFswXTtcclxuICAgICAgICAgICAgdmFyIGZpcnN0Q29sID0gZmlyc3RSb3dbT2JqZWN0LmtleXMoZmlyc3RSb3cpWzBdXTtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q29sO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIFNRTCBxdWVyeSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IHNldC5cclxuICAgICAqIEBmdW5jdGlvbiBleGVjdXRlUXVlcnlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0IHNldC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmV4ZWN1dGVRdWVyeSA9IGFzeW5jIGZ1bmN0aW9uKHF1ZXJ5KSB7XHJcbiAgICAgICAgYXdhaXQgbW9kdWxlLl9vcGVuRGJDb25uKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcXVlcnlTeW5jUmV0dmFsID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShxdWVyeSk7XHJcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVN5bmNSZXR2YWw7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkRCX1FVRVJZX0VSUk9SLCBlcnJIZWxwZXIuZ2V0RGJFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZXMgU1FMIHN0YXRlbWVudC5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBBbnkgcmVzdWx0cyBmcm9tIHRoZSBxdWVyeSBhcmUgZGlzY2FyZGVkLlxyXG4gICAgICogQGZ1bmN0aW9uIGV4ZWN1dGVOb25RdWVyeVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IHRvIGV4ZWN1dGUuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5leGVjdXRlTm9uUXVlcnkgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXX0=
|
|
146
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1kYi5qcyJdLCJuYW1lcyI6WyJjb25uZWN0aW9uIiwiZXJySGVscGVyIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJpc0luaXRpYWxpemVkIiwiX29wZW5EYkNvbm4iLCJjb25uU3RyaW5nIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJkYiIsImUiLCJNb2R1bGVVbmF2YWlsYWJsZUVycm9yIiwibWVzc2FnZSIsImNvbm5lY3QiLCJnZXREYkVycm9yTWVzc2FnZSIsInNldENvbm5lY3Rpb25TdHJpbmciLCJnZXRTY2FsYXIiLCJxdWVyeSIsInJlc3VsdFNldCIsImxlbmd0aCIsImZpcnN0Um93IiwiZmlyc3RDb2wiLCJPYmplY3QiLCJrZXlzIiwiREJfUVVFUllfRVJST1IiLCJjbG9zZSIsImV4ZWN1dGVRdWVyeSIsInF1ZXJ5U3luY1JldHZhbCIsImV4ZWN1dGVOb25RdWVyeSJdLCJtYXBwaW5ncyI6Ijs7OztBQW9CQTs7OztBQXBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxVQUFKOztBQUdBLElBQUlDLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGtCQUFELENBQXZCOztBQUVBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBVztBQUN4QjtBQUNBRCxFQUFBQSxNQUFNLENBQUNFLGFBQVAsR0FBdUIsWUFBVztBQUM5QixXQUFPLElBQVA7QUFDSCxHQUZEOztBQUlBRixFQUFBQSxNQUFNLENBQUNHLFdBQVAsR0FBcUIsa0JBQWlCO0FBQ2xDLFFBQUksQ0FBQyxLQUFLQyxVQUFWLEVBQXNCO0FBQ2xCLFlBQU0sSUFBSUMsb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CQyxtQkFBaEMsRUFBcUQsK0RBQXJELENBQU47QUFDSDs7QUFFRCxRQUFJO0FBQ0E7QUFDQSxVQUFJQyxFQUFKOztBQUNBLFVBQUk7QUFDQUEsUUFBQUEsRUFBRSxHQUFHVCxPQUFPLENBQUMsTUFBRCxDQUFaO0FBQ0gsT0FGRCxDQUVFLE9BQU9VLENBQVAsRUFBVTtBQUNSO0FBQ0EsY0FBTUMsc0JBQXNCLEdBQUdYLE9BQU8sQ0FBQyxrQ0FBRCxDQUF0Qzs7QUFDQSxjQUFNLElBQUlXLHNCQUFKLENBQTJCLCtCQUE2QkQsQ0FBQyxDQUFDRSxPQUExRCxDQUFOO0FBQ0g7O0FBRURkLE1BQUFBLFVBQVUsR0FBRyxNQUFNVyxFQUFFLENBQUNJLE9BQUgsQ0FBVyxLQUFLUixVQUFoQixDQUFuQjtBQUNILEtBWkQsQ0FZRSxPQUFPSyxDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlKLG9CQUFKLENBQVlQLFNBQVMsQ0FBQ1EsU0FBVixDQUFvQkMsbUJBQWhDLEVBQXFEVCxTQUFTLENBQUNlLGlCQUFWLENBQTRCSixDQUE1QixDQUFyRCxDQUFOO0FBQ0g7QUFDSixHQXBCRDtBQXNCQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJVCxFQUFBQSxNQUFNLENBQUNjLG1CQUFQLEdBQTZCLFVBQVNWLFVBQVQsRUFBcUI7QUFDOUNKLElBQUFBLE1BQU0sQ0FBQ0ksVUFBUCxHQUFvQkEsVUFBcEI7QUFDSCxHQUZEO0FBSUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJSixFQUFBQSxNQUFNLENBQUNlLFNBQVAsR0FBbUIsZ0JBQWVDLEtBQWYsRUFBc0I7QUFDckMsVUFBTWhCLE1BQU0sQ0FBQ0csV0FBUCxFQUFOOztBQUNBLFFBQUk7QUFDQSxVQUFJYyxTQUFTLEdBQUcsTUFBTXBCLFVBQVUsQ0FBQ21CLEtBQVgsQ0FBaUJBLEtBQWpCLENBQXRCOztBQUNBLFVBQUlDLFNBQVMsQ0FBQ0MsTUFBVixLQUFxQixDQUF6QixFQUE0QjtBQUN4QixlQUFPLElBQVA7QUFDSDs7QUFDRCxVQUFJQyxRQUFRLEdBQUdGLFNBQVMsQ0FBQyxDQUFELENBQXhCO0FBQ0EsVUFBSUcsUUFBUSxHQUFHRCxRQUFRLENBQUNFLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSCxRQUFaLEVBQXNCLENBQXRCLENBQUQsQ0FBdkI7QUFDQSxhQUFPQyxRQUFQO0FBQ0gsS0FSRCxDQVFFLE9BQU9YLENBQVAsRUFBVTtBQUNSLFlBQU0sSUFBSUosb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CaUIsY0FBaEMsRUFBZ0R6QixTQUFTLENBQUNlLGlCQUFWLENBQTRCSixDQUE1QixDQUFoRCxDQUFOO0FBQ0gsS0FWRCxTQVVVO0FBQ04sWUFBTVosVUFBVSxDQUFDMkIsS0FBWCxFQUFOO0FBQ0g7QUFDSixHQWZEO0FBaUJBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0l4QixFQUFBQSxNQUFNLENBQUN5QixZQUFQLEdBQXNCLGdCQUFlVCxLQUFmLEVBQXNCO0FBQ3hDLFVBQU1oQixNQUFNLENBQUNHLFdBQVAsRUFBTjs7QUFDQSxRQUFJO0FBQ0EsWUFBTXVCLGVBQWUsR0FBRyxNQUFNN0IsVUFBVSxDQUFDbUIsS0FBWCxDQUFpQkEsS0FBakIsQ0FBOUI7QUFDQSxhQUFPVSxlQUFQO0FBQ0gsS0FIRCxDQUdFLE9BQU9qQixDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlKLG9CQUFKLENBQVlQLFNBQVMsQ0FBQ1EsU0FBVixDQUFvQmlCLGNBQWhDLEVBQWdEekIsU0FBUyxDQUFDZSxpQkFBVixDQUE0QkosQ0FBNUIsQ0FBaEQsQ0FBTjtBQUNILEtBTEQsU0FLVTtBQUNOLFlBQU1aLFVBQVUsQ0FBQzJCLEtBQVgsRUFBTjtBQUNIO0FBQ0osR0FWRDtBQVlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0l4QixFQUFBQSxNQUFNLENBQUMyQixlQUFQLEdBQXlCLGdCQUFlWCxLQUFmLEVBQXNCO0FBQzNDLFVBQU1oQixNQUFNLENBQUNHLFdBQVAsRUFBTjs7QUFDQSxRQUFJO0FBQ0EsWUFBTU4sVUFBVSxDQUFDbUIsS0FBWCxDQUFpQkEsS0FBakIsQ0FBTjtBQUNILEtBRkQsQ0FFRSxPQUFPUCxDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlKLG9CQUFKLENBQVlQLFNBQVMsQ0FBQ1EsU0FBVixDQUFvQmlCLGNBQWhDLEVBQWdEekIsU0FBUyxDQUFDZSxpQkFBVixDQUE0QkosQ0FBNUIsQ0FBaEQsQ0FBTjtBQUNILEtBSkQsU0FJVTtBQUNOLFlBQU1aLFVBQVUsQ0FBQzJCLEtBQVgsRUFBTjtBQUNIO0FBQ0osR0FURDs7QUFXQSxTQUFPeEIsTUFBUDtBQUNILENBeEdEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZGJcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBEYXRhIEJhc2VzIHRocm91Z2ggT0RCQy5cclxuICogQG5vdGUgQmVmb3JlIHVzaW5nIHRoaXMgbW9kdWxlLCBtYWtlIHN1cmUgdG8gaW5zdGFsbCBgdW5peG9kYmNgOiAgXHJcbiAqICAgKiBXaW5kb3dzIC0gSW5zdGFsbCBgV2luZG93cyBTREtgICBcclxuICogICAqIE9TIFggLSAgYGJyZXcgaW5zdGFsbCB1bml4b2RiY2AgIFxyXG4gKiAgICogTGludXggLSBgc3VkbyBhcHQtZ2V0IGluc3RhbGwgdW5peG9kYmMgdW5peG9kYmMtZGV2YCBvciBgc3VkbyBkbmYgaW5zdGFsbCB1bml4T0RCQyB1bml4T0RCQy1kZXZlbGBcclxuICovXHJcblxyXG52YXIgY29ubmVjdGlvbjtcclxuXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbnZhciBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gRklYTUU6IGNoYW5nZSBzZXRDb25uZWN0aW9uU3RyaW5nIHRvIGluaXQgYW5kIGFkZCBoYWRubGluZyBpbiBoZXJlXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuX29wZW5EYkNvbm4gPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29ublN0cmluZykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkRCX0NPTk5FQ1RJT05fRVJST1IsICdObyBjb25uZWN0aW9uIHN0cmluZyBzcGVjaWZpZWQuIFVzZSBkYi5zZXRDb25uZWN0aW9uU3RyaW5nKCkuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgdGhpcyBtb2R1bGUgaWYgb2RiYyB3YXNuJ3QgaW5zdGFsbGVkXHJcbiAgICAgICAgICAgIHZhciBkYjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGRiID0gcmVxdWlyZSgnb2RiYycpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb3VsZCBoYXBwZW4gb25seSBvbiB1bml4IGR1ZSB0byBtaXNzaW5nIHVuaXhvZGJjIGJpbmFyaWVzXHJcbiAgICAgICAgICAgICAgICBjb25zdCBNb2R1bGVVbmF2YWlsYWJsZUVycm9yID0gcmVxdWlyZSgnLi4vZXJyb3JzL01vZHVsZVVuYXZhaWxhYmxlRXJyb3InKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVVbmF2YWlsYWJsZUVycm9yKCdVbmFibGUgdG8gbG9hZCBEQiBtb2R1bGUuICcrZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29ubmVjdGlvbiA9IGF3YWl0IGRiLmNvbm5lY3QodGhpcy5jb25uU3RyaW5nKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfQ09OTkVDVElPTl9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBAc3VtbWFyeSBTZXRzIERCIGNvbm5lY3Rpb24gc3RyaW5nIHRvIGJlIHVzZWQgYnkgb3RoZXIgbWV0aG9kcy5cclxuICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIGRvZXNuJ3QgYWN0dWFsbHkgb3BlbiB0aGUgY29ubmVjdGlvbiBhcyBpdCdzIG9wZW5lZC9jbG9zZWRcclxuICAgICogICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYnkgcXVlcnkgbWV0aG9kcy4gIFxyXG4gICAgKiAgICAgICAgICAgICAgRXhhbXBsZSBjb25uZWN0aW9uIHN0cmluZ3M6ICBcclxuICAgICogICAgICAgICAgICAgIC0gYERyaXZlcj17TXlTUUwgT0RCQyA1LjMgVU5JQ09ERSBEcml2ZXJ9O1NlcnZlcj1sb2NhbGhvc3Q7RGF0YWJhc2U9bXlEYXRhYmFzZTtcclxuICAgICogICAgICAgICAgICAgICAgVXNlcj1teVVzZXJuYW1lO1Bhc3N3b3JkPW15UGFzc3dvcmQ7T3B0aW9uPTM7YCAgXHJcbiAgICAqICAgICAgICAgICAgICAtIGBEcml2ZXI9e09yYWNsZSBpbiBpbnN0YW50Y2xpZW50XzExXzJ9O2RicT0xMjcuMC4wLjE6MTUyMS9YRTt1aWQ9bXlVc2VybmFtZTtcclxuICAgICogICAgICAgICAgICAgICAgcHdkPW15UGFzc3dvcmQ7YFxyXG4gICAgKiBAZnVuY3Rpb24gc2V0Q29ubmVjdGlvblN0cmluZ1xyXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gY29ublN0cmluZyAtIE9EQkMgY29ubmVjdGlvbiBzdHJpbmcuXHJcbiAgICAqL1xyXG4gICAgbW9kdWxlLnNldENvbm5lY3Rpb25TdHJpbmcgPSBmdW5jdGlvbihjb25uU3RyaW5nKSB7XHJcbiAgICAgICAgbW9kdWxlLmNvbm5TdHJpbmcgPSBjb25uU3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIFNRTCBxdWVyeSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBmaXJzdCByb3cgaW4gdGhlIHJlc3VsdCBzZXQuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0U2NhbGFyXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgLSBUaGUgcXVlcnkgdG8gZXhlY3V0ZS5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgZmlyc3Qgcm93IGluIHRoZSByZXN1bHQgc2V0LCBvciBudWxsIGlmIHRoZSByZXN1bHRcclxuICAgICAqICAgICAgICAgICAgICAgICAgc2V0IGlzIGVtcHR5LlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0U2NhbGFyID0gYXN5bmMgZnVuY3Rpb24ocXVlcnkpIHtcclxuICAgICAgICBhd2FpdCBtb2R1bGUuX29wZW5EYkNvbm4oKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0U2V0ID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShxdWVyeSk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRTZXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZmlyc3RSb3cgPSByZXN1bHRTZXRbMF07XHJcbiAgICAgICAgICAgIHZhciBmaXJzdENvbCA9IGZpcnN0Um93W09iamVjdC5rZXlzKGZpcnN0Um93KVswXV07XHJcbiAgICAgICAgICAgIHJldHVybiBmaXJzdENvbDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfUVVFUllfRVJST1IsIGVyckhlbHBlci5nZXREYkVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBFeGVjdXRlcyBTUUwgcXVlcnkgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBzZXQuXHJcbiAgICAgKiBAZnVuY3Rpb24gZXhlY3V0ZVF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgLSBUaGUgcXVlcnkgdG8gZXhlY3V0ZS5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdCBzZXQuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5leGVjdXRlUXVlcnkgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3luY1JldHZhbCA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlTeW5jUmV0dmFsO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIFNRTCBzdGF0ZW1lbnQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQW55IHJlc3VsdHMgZnJvbSB0aGUgcXVlcnkgYXJlIGRpc2NhcmRlZC5cclxuICAgICAqIEBmdW5jdGlvbiBleGVjdXRlTm9uUXVlcnlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZXhlY3V0ZU5vblF1ZXJ5ID0gYXN5bmMgZnVuY3Rpb24ocXVlcnkpIHtcclxuICAgICAgICBhd2FpdCBtb2R1bGUuX29wZW5EYkNvbm4oKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfUVVFUllfRVJST1IsIGVyckhlbHBlci5nZXREYkVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl19
|