ng-pli-commons 0.0.1865 → 0.0.1867
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/esm2020/lib/services/token.service.mjs +5 -4
- package/esm2020/lib/utils/formio-util.mjs +5 -2
- package/esm2020/version.mjs +8 -8
- package/fesm2015/ng-pli-commons.mjs +15 -11
- package/fesm2015/ng-pli-commons.mjs.map +1 -1
- package/fesm2020/ng-pli-commons.mjs +15 -11
- package/fesm2020/ng-pli-commons.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -409,8 +409,6 @@ export class TokenService {
|
|
|
409
409
|
}
|
|
410
410
|
if (formFieldToken.type == 'select' &&
|
|
411
411
|
valueData.hasOwnProperty(formFieldToken.searchField)) {
|
|
412
|
-
console.log(formFieldToken);
|
|
413
|
-
console.log(valueData);
|
|
414
412
|
if (valueData.hasOwnProperty('original_name') !== '') {
|
|
415
413
|
return valueData.original_name;
|
|
416
414
|
}
|
|
@@ -549,7 +547,10 @@ export class TokenService {
|
|
|
549
547
|
}
|
|
550
548
|
}
|
|
551
549
|
else if (token && token[0] == '$') {
|
|
552
|
-
if (dataValue !== null &&
|
|
550
|
+
if (dataValue !== null &&
|
|
551
|
+
dataValue !== undefined &&
|
|
552
|
+
dataValue.original_name !== undefined &&
|
|
553
|
+
dataValue.original_name !== null) {
|
|
553
554
|
valueReplace = dataValue.original_name;
|
|
554
555
|
}
|
|
555
556
|
else {
|
|
@@ -1328,4 +1329,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImpor
|
|
|
1328
1329
|
type: Inject,
|
|
1329
1330
|
args: [LOCALE_ID]
|
|
1330
1331
|
}] } });
|
|
1331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvc2VydmljZXMvdG9rZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUErQixVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQU1sRCxNQUFNLE9BQU8sWUFBWTtJQW9XeEIsWUFDZ0MsV0FBVyxFQUNsQyxVQUFzQixFQUN0QixXQUF3QixFQUN4QixZQUEwQjtRQUhILGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7SUFDaEMsQ0FBQztJQUVKLGlGQUFpRjtJQUNqRix1QkFBdUIsQ0FBQyxVQUFVO1FBQ2pDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEMsMEJBQTBCO1lBQzFCLElBQUksZ0JBQWdCLEdBQVUsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDdEQsSUFBSSxFQUFFLENBQUMsVUFBZSxFQUFFLEVBQUU7b0JBQ3pCLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzFCLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVSxFQUFFOzRCQUMvQixJQUFJLFVBQVUs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Z3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0ZVV0aWwsIEhFQURFUl9KU09OLCBQbGlDbmZHdWFyYW50ZWVUb2tlbiwgVG9rZW4sIFV0aWxTdHJpbmcgfSBmcm9tICduZy1wbGktdXRpbCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRm9ybWlvVXRpbCB9IGZyb20gJy4uL3V0aWxzL2Zvcm1pby11dGlsJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuL2Zvcm0uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2tlblNlcnZpY2Uge1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTSUdOX0xFVFRFUl9UQUdfSUQ6IHN0cmluZyA9ICdfc2lnbi1sZXR0ZXItdGFnLWlkJztcclxuXHJcblx0LyoqICovXHJcblx0QEluamVjdChMT0NBTEVfSUQpIHB1YmxpYyBsb2NhbGU6IHN0cmluZztcclxuXHJcblx0LyoqICovXHJcblx0c3RhdGljIFRPS0VOX0xBQkVMX0ZPUk06IHN0cmluZyA9ICdGcm0nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9CVURHRVQ6IHN0cmluZyA9ICdQcmVzdXB1ZXN0byc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFRPS0VOX0xBQkVMX0NBTENVTEFURUQ6IHN0cmluZyA9ICdDYWxjdWxhZG8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9TTkFQU0hPVDogc3RyaW5nID0gJ1NuYXBzaG90JztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgVE9LRU5fTEFCRUxfU1RBVElDOiBzdHJpbmcgPSAnRXN0w6F0aWNvJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgVE9LRU5fTEFCRUxfRE9DVU1FTlRPOiBzdHJpbmcgPSAnRG9jdW1lbnRvJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgVE9LRU5fTEFCRUxfRE9DVU1FTlRPX0FOQUxJU0lTX0FVVE9NQVRJQ086IHN0cmluZyA9ICdBbsOhbGlzaXMgYXV0b23DoXRpY28gZGUgZG9jdW1lbnRvcyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFRPS0VOX0RPQ1VNRU5UT19BTkFMWVNJU19UWVBFOiBzdHJpbmcgPSAnZG9jdW1lbnRfYW5hbHlzaXMnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9UQVNLOiBzdHJpbmcgPSAnVGFyZWEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9UQVNLTDogc3RyaW5nID0gJ3Rhc2snO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9HVUFSQU5URUU6IHN0cmluZyA9ICdHYXJhbnRpYSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfS0VZX1RPVEFMX0FNT1VOVDogc3RyaW5nID0gJ3RvdGFsQW1vdW50JztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9BTU9VTlQ6IHN0cmluZyA9ICdhcHBsaWNhdGlvblRvdGFsJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9PV05fRk9VTkRTOiBzdHJpbmcgPSAnYXBwbGljYXRpb25Pd25Gb3VuZHMnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBCVURHRVRfVE9LRU5TX0tFWV9BUFBMSUNBVElPTl9QUk9DRVNTX1RPVEFMX0ZJTkFOQ0lORzogc3RyaW5nID0gJ2FwcGxpY2F0aW9uRmluYW5jaW5nJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfQU1PVU5UOiBzdHJpbmcgPSAnbGVnYWxpemF0aW9uVG90YWwnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBCVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9PV05fRk9VTkRTOiBzdHJpbmcgPVxyXG5cdFx0J2xlZ2FsaXphdGlvbk93bkZvdW5kcyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfS0VZX0xFR0FMSVpBVElPTl9QUk9DRVNTX1RPVEFMX0ZJTkFOQ0lORzogc3RyaW5nID0gJ2xlZ2FsaXphdGlvbkZpbmFuY2luZyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfS0VZX0lOU1VSQU5DRV9BTU9VTlQ6IHN0cmluZyA9ICdpbnN1cmFuY2VBbW91bnQnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBMRUdBTElaQVRJT05fT1JfQVBQTElDQVRJT05fVE9UQUxfRklOQU5DSU5HOiBzdHJpbmcgPVxyXG5cdFx0J2xlZ2xpemF0aW9uT3JBcHBsaWNhdGlvblRvdGFsRmluYW5jaW5nJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgQlVER0VUX1RPS0VOU19LRVlfUkVTVU1FX0NBVEVHT1JZX1lFQVI6IHN0cmluZyA9ICdyZXN1bWVDYXRlZ29yeVllYXInO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBCVURHRVRfVE9LRU5TX0tFWV9GRUNIQV9GSU5BTkNJTkdfU1RBUlQ6IHN0cmluZyA9ICdmZWNoYUluaWNpb0ZpbmFuY2lhY2lvbic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfS0VZX0ZFQ0hBX0ZJTkFOQ0lOR19FTkQ6IHN0cmluZyA9ICdmZWNoYUZpbkZpbmFuY2lhY2lvbic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfRFVSQVRJT05fU1RVRElFUzogc3RyaW5nID0gJ2R1cmFjaW9uRXN0dWRpb3MnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBCVURHRVRfVE9LRU5TX0ZJTkFOQ0lOR19EVVJBVElPTjogc3RyaW5nID0gJ2R1cmFjaW9uRmluYW5jaWFjaW9uJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19LRVlfQ09ESUdPX1ZFUklGSUNBQ0lPTjogc3RyaW5nID0gJ2NvZGlnb1ZlcmlmaWNhY2lvbic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX0FfUVVJRU5fVkFfRElSSUdJRE86IHN0cmluZyA9ICdhUXVpZW5WYURpcmlnaWRvJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19LRVlfRkVDSEFfQUNUVUFMOiBzdHJpbmcgPSAnZmVjaGFBY3R1YWwnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9TVEFUVVNfTkFNRTogc3RyaW5nID0gJ3N0YXR1c05hbWUnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QQVRST0NJTkFET1I6IHN0cmluZyA9ICdwbGlQYXRyb2NpbmFkb3InO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QQVRST0NJTkFET1JfQ09SVE86IHN0cmluZyA9ICdwbGlQYXRyb2NpbmFkb3JDb3J0byc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX1BST0dSQU1BOiBzdHJpbmcgPSAncGxpUHJvZ3JhbWEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QUk9HUkFNQV9DT1JUTzogc3RyaW5nID0gJ3BsaVByb2dyYW1hQ29ydG8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QUk9NT0NJT046IHN0cmluZyA9ICdwbGlQcm9tb2Npb24nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QUk9NT0NJT05fQ09SVE86IHN0cmluZyA9ICdwbGlQcm9tb2Npb25Db3J0byc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX0FOSU9fUFJPTU9DSU9OOiBzdHJpbmcgPSAnYW5pb1Byb21vY2lvbic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX0lTT19NT05FREFfQkFTRTogc3RyaW5nID0gJ2lzb01vbmVkYUJhc2UnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9TQUxVRE9fQ09NUExFTUVOVEFSSU86IHN0cmluZyA9ICdzYWx1ZG9Db21wbGVtZW50YXJpbyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX05VTUJFUl9BUFBMSUNBVElPTjogc3RyaW5nID0gJ251bWVyb1JhZGljYWRvJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19LRVlfVVNFUl9JTklUSUFMUzogc3RyaW5nID0gJ2luaWNpYWxlc1VzdWFyaW8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9MRVRURVJfU0lHTjogc3RyaW5nID0gJ2Zpcm1hQ2FydGEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9OQU1FOiBzdHJpbmcgPSAnY29taXRlTm9tYnJlJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19DT01NSVRURUVfU0VHTUVOVEFUSU9OOiBzdHJpbmcgPSAnY29taXRlU2VnbWVudGFjaW9uJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19DT01NSVRURUVfQUdHUlVQQVRJT046IHN0cmluZyA9ICdjb21pdGVBZ3J1cGFjaW9uJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19DT01NSVRURUVfQ1VUTElORV9EQVRFOiBzdHJpbmcgPSAnY29taXRlRmVjaGFMaW5lYSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ORklSTV9MRUdBTElaQVRJT05fQVBQT0lOVE1FTlQ6IHN0cmluZyA9ICdjb25maXJtYWNpb25DaXRhJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19DT0RFQlRPUl9ET0NVTUVOVF9OVU1CRVI6IHN0cmluZyA9ICdudW1lcm9Eb2N1bWVudG9Db2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfRE9DVU1FTlRfVFlQRTogc3RyaW5nID0gJ3RpcG9Eb2N1bWVudG9Db2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfTkFNRTogc3RyaW5nID0gJ25vbWJyZXNDb2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfTEFTVE5BTUU6IHN0cmluZyA9ICdhcGVsbGlkb3NDb2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfVFlQRV9DT0RFQlRPUjogc3RyaW5nID0gJ3RpcG9QZXJzb25hQ29kZXVkb3InO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0NPREVCVE9SX1JFVklFV0VSOiBzdHJpbmcgPSAncmV2aXNvckNvZGV1ZG9yZXMnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX1RPVEFMX1dFSUdIVEVEOiBzdHJpbmcgPSAncG9uZGVyYWRvVG90YWwnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0NPTlNFQ1VUSVZFX0dVQVJBTlRFRTogc3RyaW5nID0gJ2NvbnNlY3V0aXZvR2FyYW50aWFzJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19EQVk6IHN0cmluZyA9ICdkaWEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX01PTlRIOiBzdHJpbmcgPSAnbWVzJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19ZRUFSOiBzdHJpbmcgPSAnYW5vJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19SRVBSRVNFTlRBVElWRV9OQU1FOiBzdHJpbmcgPSAnbm9tYnJlc1JlcHJlc2VudGFudGUnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX1JFUFJFU0VOVEFUSVZFX0xBU1ROQU1FOiBzdHJpbmcgPSAnYXBlbGxpZG9zUmVwcmVzZW50YW50ZSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfUkVQUkVTRU5UQVRJVkVfRE9DVU1FTlRfTlVNQkVSOiBzdHJpbmcgPSAnY2VkdWxhUmVwcmVzZW50YW50ZSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ0lUWV9TSUdOQVRVUkU6IHN0cmluZyA9ICdjaXVkYWRGaXJtYSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfVVNFUl9UWVBFX0NSRURJVF9TVFVEWTogc3RyaW5nID0gJ3RpcG9Vc3VhcmlvRXN0dWRpb0NyZWRpdG8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0NPREVCVE9SX1ZFSElDTEVTX1FVQU5USVRZOiBzdHJpbmcgPSAnY2FudGlkYWRWZWhpY3Vsb3NDb2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfQVNTRVRTX1FVQU5USVRZOiBzdHJpbmcgPSAnY2FudGlkYWRCaWVuZXNDb2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfTElTVF9DT0RFQlRPUlM6IHN0cmluZyA9ICdsaXN0YUNvZGV1ZG9yZXMnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5fSU5HUkVTT19DT0RFVURPUl9IQUJFQVNfREFUQTogc3RyaW5nID0gJ2luZ3Jlc29Db2RldWRvckhhYmVhc0RhdGEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5fUERGX1JFU1VNRU5fQ09ERVVET1I6IHN0cmluZyA9ICdwZGZSZXN1bWVuQ29kZXVkb3InO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX1FVQU5USVRZX1ZFSElDTEVfQkVORUZJQ0lBUlk6IHN0cmluZyA9ICdjYW50aWRhZFZlaGljdWxvc1NlbGVjY2lvbmFkbyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfUVVBTlRJVFlfQVNTRVRTX0JFTkVGSUNJQVJZOiBzdHJpbmcgPSAnY2FudGlkYWRCaWVuZXNTZWxlY2Npb25hZG8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0JFTl9DT0RJR086IHN0cmluZyA9ICdiZW5Db2RpZ28nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5fQ1JFRElUX1JFVklFV0VSX09CU0VSVkFUSU9OU19DT0RFQlRPUjogc3RyaW5nID1cclxuXHRcdCdjcmVkaXRSZXZpZXdlck9ic2VydmF0aW9uc0NvZGVidG9yJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOX0NSRURJVF9SRVZJRVdFUl9PQlNFUlZBVElPTlM6IHN0cmluZyA9ICdjcmVkaXRSZXZpZXdlck9ic2VydmF0aW9ucyc7XHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTl9UQUdfTkFNRTogc3RyaW5nID0gJ3RhZ05hbWUnO1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5fTkFNRV9SRVZJRVdFUl9UQVNLID0gJ25hbWVSZXZpd2VyVGFzayc7XHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTl9MQVNUX05BTUVfUkVWSUVXRVJfVEFTSyA9ICdsYXN0TmFtZVJldml3ZXJUYXNrJztcclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOX1RBU0tfVE9UQUxfQVNTSUdORURfVE9fUkVWSUVXRVIgPSAndGFza1RvdGFsQXNzaWduZWRUb1Jldmlld2VyJztcclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOUzogYW55W10gPSBbXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX1BBVFJPQ0lOQURPUixcclxuXHRcdFx0bGFiZWw6ICdQYXRyb2NpbmFkb3InXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9QUk9HUkFNQSxcclxuXHRcdFx0bGFiZWw6ICdQcm9ncmFtYSdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX1BST01PQ0lPTixcclxuXHRcdFx0bGFiZWw6ICdQcm9tb2Npw7NuJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfQU5JT19QUk9NT0NJT04sXHJcblx0XHRcdGxhYmVsOiAnQcOxbyBwcm9tb2Npw7NuJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfSVNPX01PTkVEQV9CQVNFLFxyXG5cdFx0XHRsYWJlbDogJ0lTTyBNb25lZGEgYmFzZSdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX1NBTFVET19DT01QTEVNRU5UQVJJTyxcclxuXHRcdFx0bGFiZWw6ICdTYWx1ZG8gY29tcGxlbWVudGFyaW8nXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9DT0RJR09fVkVSSUZJQ0FDSU9OLFxyXG5cdFx0XHRsYWJlbDogJ0PDs2RpZ28gZGUgdmVyaWZpY2FjacOzbidcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX0FfUVVJRU5fVkFfRElSSUdJRE8sXHJcblx0XHRcdGxhYmVsOiAnQSBxdWllbiB2YSBkaXJpZ2lkbydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX0ZFQ0hBX0FDVFVBTCxcclxuXHRcdFx0bGFiZWw6ICdGZWNoYSBhY3R1YWwnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9TVEFUVVNfTkFNRSxcclxuXHRcdFx0bGFiZWw6ICdFc3RhZG8gYWN0dWFsJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfTlVNQkVSX0FQUExJQ0FUSU9OLFxyXG5cdFx0XHRsYWJlbDogJ07Dum1lcm8gcmFkaWNhZG8nXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9VU0VSX0lOSVRJQUxTLFxyXG5cdFx0XHRsYWJlbDogJ0luaWNpYWxlcyBkZSB1c3VhcmlvJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfTEVUVEVSX1NJR04sXHJcblx0XHRcdGxhYmVsOiAnRmlybWEgZGUgY2FydGFzJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfTkFNRSxcclxuXHRcdFx0bGFiZWw6ICdOb21icmUgY29taXTDqSdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09NTUlUVEVFX1NFR01FTlRBVElPTixcclxuXHRcdFx0bGFiZWw6ICdTZWdtZW50YWNpw7NuIGNvbWl0w6knXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9BR0dSVVBBVElPTixcclxuXHRcdFx0bGFiZWw6ICdBZ3J1cGFjacOzbiBjb21pdMOpJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfQ1VUTElORV9EQVRFLFxyXG5cdFx0XHRsYWJlbDogJ0ZlY2hhIEzDrW5lYSBkZSBjb3J0ZSdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09ORklSTV9MRUdBTElaQVRJT05fQVBQT0lOVE1FTlQsXHJcblx0XHRcdGxhYmVsOiAnQ29uZmlybWFjacOzbiBkZSBjaXRhJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT0RFQlRPUl9ET0NVTUVOVF9OVU1CRVIsXHJcblx0XHRcdGxhYmVsOiAnTsO6bWVybyBkZSBkb2N1bWVudG8gZGUgY29kZXVkb3InXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPREVCVE9SX0RPQ1VNRU5UX1RZUEUsXHJcblx0XHRcdGxhYmVsOiAnVGlwbyBkZSBkb2N1bWVudG8gZGUgY29kZXVkb3InXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPREVCVE9SX05BTUUsXHJcblx0XHRcdGxhYmVsOiAnTm9tYnJlcyBjb2RldWRvcidcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfTEFTVE5BTUUsXHJcblx0XHRcdGxhYmVsOiAnQXBlbGxpZG9zIGNvZGV1ZG9yJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19UWVBFX0NPREVCVE9SLFxyXG5cdFx0XHRsYWJlbDogJ1RpcG8gZGUgcGVyc29uYSBjb2RldWRvcidcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfVkVISUNMRVNfUVVBTlRJVFksXHJcblx0XHRcdGxhYmVsOiAnQ2FudGlkYWQgdmVoaWN1bG9zIGNvZGV1ZG9yJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT0RFQlRPUl9BU1NFVFNfUVVBTlRJVFksXHJcblx0XHRcdGxhYmVsOiAnQ2FudGlkYWQgYmllbmVzIGNvZGV1ZG9yJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT0RFQlRPUl9SRVZJRVdFUixcclxuXHRcdFx0bGFiZWw6ICdSZXZpc29yIGRlIGNvZGV1ZG9yZXMnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1RPVEFMX1dFSUdIVEVELFxyXG5cdFx0XHRsYWJlbDogJ1BvbmRlcmFkbyB0b3RhbCdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09OU0VDVVRJVkVfR1VBUkFOVEVFLFxyXG5cdFx0XHRsYWJlbDogJ0NvbnNlY3V0aXZvIGRlIGdhcmFudGlhcydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfUkVQUkVTRU5UQVRJVkVfTkFNRSxcclxuXHRcdFx0bGFiZWw6ICdOb21icmVzIHJlcHJlc2VudGFudGUgbGVnYWwnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1JFUFJFU0VOVEFUSVZFX0xBU1ROQU1FLFxyXG5cdFx0XHRsYWJlbDogJ0FwZWxsaWRvcyByZXByZXNlbnRhbnRlIGxlZ2FsJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19SRVBSRVNFTlRBVElWRV9ET0NVTUVOVF9OVU1CRVIsXHJcblx0XHRcdGxhYmVsOiAnQ2VkdWxhIHJlcHJlc2VudGFudGUgbGVnYWwnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1VTRVJfVFlQRV9DUkVESVRfU1RVRFksXHJcblx0XHRcdGxhYmVsOiAnVGlwbyB1c3VhcmlvIGVzdHVkaW8gY3LDqWRpdG8nXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0RBWSxcclxuXHRcdFx0bGFiZWw6ICdEaWEnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX01PTlRILFxyXG5cdFx0XHRsYWJlbDogJ01lcydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfWUVBUixcclxuXHRcdFx0bGFiZWw6ICdBw7FvJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DSVRZX1NJR05BVFVSRSxcclxuXHRcdFx0bGFiZWw6ICdDaXVkYWQgZGUgbGEgZmlybWEnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0xJU1RfQ09ERUJUT1JTLFxyXG5cdFx0XHRsYWJlbDogJ0xpc3RhIGRlIGNvZGV1ZG9yZXMnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5fSU5HUkVTT19DT0RFVURPUl9IQUJFQVNfREFUQSxcclxuXHRcdFx0bGFiZWw6ICdJbmdyZXNvIENvZGV1ZG9yIEhhYmVhcyBEYXRhJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOX1BERl9SRVNVTUVOX0NPREVVRE9SLFxyXG5cdFx0XHRsYWJlbDogJ1BkZiBjb2RldWRvcidcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfUVVBTlRJVFlfVkVISUNMRV9CRU5FRklDSUFSWSxcclxuXHRcdFx0bGFiZWw6ICdDYW50aWRhZCBkZSB2ZWjDrWN1bG9zIGRlbCBzZWxlY2Npb25hZG8nXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1FVQU5USVRZX0FTU0VUU19CRU5FRklDSUFSWSxcclxuXHRcdFx0bGFiZWw6ICdDYW50aWRhZCBiaWVuZXMgZGVsIHNlbGVjY2lvbmFkbydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQkVOX0NPRElHTyxcclxuXHRcdFx0bGFiZWw6ICdDw7NkaWdvIGJlbmVmaWNpYXJpbydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTl9DUkVESVRfUkVWSUVXRVJfT0JTRVJWQVRJT05TLFxyXG5cdFx0XHRsYWJlbDogJ09ic2VydmFjaW9uZXMgcmV2aXNvciBmaW5hbmNpZXJvIHNlbGVjY2lvbmFkbydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTl9DUkVESVRfUkVWSUVXRVJfT0JTRVJWQVRJT05TX0NPREVCVE9SLFxyXG5cdFx0XHRsYWJlbDogJ09ic2VydmFjaW9uZXMgcmV2aXNvciBmaW5hbmNpZXJvIGNvZGV1ZG9yZXMnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5fVEFHX05BTUUsXHJcblx0XHRcdGxhYmVsOiAnTm9tYnJlIGRlbCB0YWcnXHJcblx0XHR9LFxyXG5cdFx0eyBrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5fTkFNRV9SRVZJRVdFUl9UQVNLLCBsYWJlbDogJ05vbWJyZSByZXZpc29yIHRhcmVhcycgfSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOX0xBU1RfTkFNRV9SRVZJRVdFUl9UQVNLLFxyXG5cdFx0XHRsYWJlbDogJ0FwZWxsaWRvIHJldmlzb3IgdGFyZWFzJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOX1RBU0tfVE9UQUxfQVNTSUdORURfVE9fUkVWSUVXRVIsXHJcblx0XHRcdGxhYmVsOiAnVG90YWwgdGFyZWFzIGFzaWduYWRhcyBhIHJldmlzb3InXHJcblx0XHR9XHJcblx0XTtcclxuXHJcblx0c3RhdGljIGV4Y2x1ZGVkVG9rZW4gPSBbXHJcblx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19VU0VSX1RZUEVfQ1JFRElUX1NUVURZLnRvTG93ZXJDYXNlKCksXHJcblx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT0RFQlRPUl9WRUhJQ0xFU19RVUFOVElUWS50b0xvd2VyQ2FzZSgpLFxyXG5cdFx0VG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfQVNTRVRTX1FVQU5USVRZLnRvTG93ZXJDYXNlKClcclxuXHRdO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudCxcclxuXHRcdHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuXHRcdHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjdXJyZW5jeVBpcGU6IEN1cnJlbmN5UGlwZVxyXG5cdCkge31cclxuXHJcblx0LyoqIFRoaXMgcHJvbWlzZSBhbGxvd3MgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gY29uc3VsdGluZyB0aGUgZm9ybSBmaWVsZHMuICovXHJcblx0Z2V0Rm9ybUZpZWxkc0J5UHJvbUNvZGUocHJvbUNvZGlnbyk6IFByb21pc2U8YW55W10+IHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdC8vIFNlYXJjaCB0aGUgZHluYW1pYyBmb3JtXHJcblx0XHRcdGxldCBsRm9ybUZpZWxkc1Rva2VuOiBhbnlbXSA9IG51bGw7XHJcblx0XHRcdHRoaXMuZm9ybVNlcnZpY2UuZ2V0QnlQcm9tQ29kaWdvKHByb21Db2RpZ28pLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKGFycmF5Rm9ybXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGFycmF5Rm9ybXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1zIG9mIGFycmF5Rm9ybXMpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgY29tcG9uZW50cyA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRjb21wb25lbnRzLnB1c2goLi4uRm9ybWlvVXRpbC5nZXRDb21wb25lbnRzKGZvcm1zLmNvbXBvbmVudHMpKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1zLmNvbXBvbmVudHMgJiYgZm9ybXMuY29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNvbXBvbmVudHMgb2YgZm9ybXMuY29tcG9uZW50cykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29tcG9uZW50cy5jb21wb25lbnRzICYmIGNvbXBvbmVudHMuY29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cy5jb21wb25lbnRzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29tcG9uZW50LmNvbHVtbnMgJiYgY29tcG9uZW50LmNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNDb21wb25lbnRzIG9mIGNvbXBvbmVudC5jb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y0NvbXBvbmVudHMuY29tcG9uZW50cyAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y0NvbXBvbmVudHMuY29tcG9uZW50cy5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZXJhdG9yIG9mIGNDb21wb25lbnRzLmNvbXBvbmVudHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZXJhdG9yLnR5cGUgPT09ICdhZGRyZXNzJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBpdGVyYXRvci5jb21wb25lbnRzO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0bGV0IGZvcm06IGFueSA9IGFycmF5Rm9ybXM7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdCFmb3JtIHx8XHJcblx0XHRcdFx0XHRcdCFmb3JtWzBdIHx8XHJcblx0XHRcdFx0XHRcdCFmb3JtWzBdLnByb21Db2RpZ28gfHxcclxuXHRcdFx0XHRcdFx0Zm9ybVswXS5wcm9tQ29kaWdvICE9IHByb21Db2RpZ29cclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJzQwNCddKTtcclxuXHRcdFx0XHRcdFx0cmVzb2x2ZShsRm9ybUZpZWxkc1Rva2VuKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGxGb3JtRmllbGRzVG9rZW4gPSBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGZvcm1Db21wIG9mIGZvcm0pIHtcclxuXHRcdFx0XHRcdFx0bGV0IG5ld0NvbXBvbmVudHM6IGFueTtcclxuXHRcdFx0XHRcdFx0bGV0IGNvbXBvbmVudHM6IGFueVtdID0gW107XHJcblx0XHRcdFx0XHRcdGlmIChmb3JtQ29tcC5jb21wb25lbnRzKSB7XHJcblx0XHRcdFx0XHRcdFx0bmV3Q29tcG9uZW50cyA9IGZvcm1Db21wLmNvbXBvbmVudHM7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZm9ybUNvbXAuY29sdW1ucykge1xyXG5cdFx0XHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb2x1bW5zO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChuZXdDb21wb25lbnRzICYmIFV0aWxTdHJpbmcuaXNWYWxpZChmb3JtQ29tcC50aXRsZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRsRm9ybUZpZWxkc1Rva2VuLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuZ2V0S2V5Rm9ybXVsYXJpbyhmb3JtQ29tcC50aXRsZSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBmb3JtQ29tcC50aXRsZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0b2JqZWN0OiBmb3JtQ29tcFxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdGxGb3JtRmllbGRzVG9rZW5bbEZvcm1GaWVsZHNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldENvbXBvbmVuZXRGb3JtKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wb25lbnRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdDb21wb25lbnRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0bnVsbFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmVzb2x2ZShsRm9ybUZpZWxkc1Rva2VuKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Z2V0Rm9ybUZpZWxkc0J5Rm9ybUlkKGZvcm1JZDogc3RyaW5nKTogUHJvbWlzZTxhbnlbXT4ge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0Ly8gU2VhcmNoIHRoZSBkeW5hbWljIGZvcm1cclxuXHRcdFx0bGV0IGxGb3JtRmllbGRzVG9rZW46IGFueVtdID0gbnVsbDtcclxuXHRcdFx0dGhpcy5mb3JtU2VydmljZS5nZXRCeUlkKGZvcm1JZCkuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0bGV0IGZvcm06IGFueSA9IHJlc3VsdDtcclxuXHRcdFx0XHRcdGlmICghZm9ybSB8fCAhZm9ybVswXSkge1xyXG5cdFx0XHRcdFx0XHRyZXNvbHZlKGxGb3JtRmllbGRzVG9rZW4pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bEZvcm1GaWVsZHNUb2tlbiA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUNvbXAgb2YgZm9ybSkge1xyXG5cdFx0XHRcdFx0XHRsZXQgbmV3Q29tcG9uZW50czogYW55O1xyXG5cdFx0XHRcdFx0XHRsZXQgY29tcG9uZW50czogYW55W10gPSBbXTtcclxuXHRcdFx0XHRcdFx0aWYgKGZvcm1Db21wLmNvbXBvbmVudHMpIHtcclxuXHRcdFx0XHRcdFx0XHRuZXdDb21wb25lbnRzID0gZm9ybUNvbXAuY29tcG9uZW50cztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmb3JtQ29tcC5jb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRcdFx0bmV3Q29tcG9uZW50cyA9IGZvcm1Db21wLmNvbHVtbnM7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKG5ld0NvbXBvbmVudHMgJiYgVXRpbFN0cmluZy5pc1ZhbGlkKGZvcm1Db21wLnRpdGxlKSkge1xyXG5cdFx0XHRcdFx0XHRcdGxGb3JtRmllbGRzVG9rZW4ucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk6IFRva2VuU2VydmljZS5nZXRLZXlGb3JtdWxhcmlvKGZvcm1Db21wLnRpdGxlKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGZvcm1Db21wLnRpdGxlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvYmplY3Q6IGZvcm1Db21wXHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0bEZvcm1GaWVsZHNUb2tlbltsRm9ybUZpZWxkc1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q29tcG9uZW5ldEZvcm0oXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBvbmVudHMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0NvbXBvbmVudHMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXNvbHZlKGxGb3JtRmllbGRzVG9rZW4pO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqIFRoaXMgcHJvbWlzZSBhbGxvd3MgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gY29uc3VsdGluZyB0aGUgZm9ybSBmaWVsZHMuICovXHJcblx0Z2V0Rm9ybVBhbmVsc0J5UHJvbUNvZGUocHJvbUNvZGlnbyk6IFByb21pc2U8YW55W10+IHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdC8vIFNlYXJjaCB0aGUgZHluYW1pYyBmb3JtXHJcblx0XHRcdGxldCBsRm9ybVBhbm5lbHNUb2tlbjogYW55W10gPSBudWxsO1xyXG5cdFx0XHR0aGlzLmZvcm1TZXJ2aWNlLmdldEJ5UHJvbUNvZGlnbyhwcm9tQ29kaWdvKS5zdWJzY3JpYmUoXHJcblx0XHRcdFx0KHJlc3VsdDogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRsZXQgZm9ybTogYW55ID0gcmVzdWx0O1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhZm9ybSB8fFxyXG5cdFx0XHRcdFx0XHQhZm9ybVswXSB8fFxyXG5cdFx0XHRcdFx0XHQhZm9ybVswXS5wcm9tQ29kaWdvIHx8XHJcblx0XHRcdFx0XHRcdGZvcm1bMF0ucHJvbUNvZGlnbyAhPSBwcm9tQ29kaWdvXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Ly8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyc0MDQnXSk7XHJcblx0XHRcdFx0XHRcdHJlc29sdmUobEZvcm1QYW5uZWxzVG9rZW4pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bEZvcm1QYW5uZWxzVG9rZW4gPSBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGZvcm1Db21wIG9mIGZvcm0pIHtcclxuXHRcdFx0XHRcdFx0bGV0IG5ld0NvbXBvbmVudHM6IGFueTtcclxuXHRcdFx0XHRcdFx0bGV0IGNvbXBvbmVudHM6IGFueVtdID0gW107XHJcblx0XHRcdFx0XHRcdGlmIChmb3JtQ29tcC5jb21wb25lbnRzKSB7XHJcblx0XHRcdFx0XHRcdFx0bmV3Q29tcG9uZW50cyA9IGZvcm1Db21wLmNvbXBvbmVudHM7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZm9ybUNvbXAuY29sdW1ucykge1xyXG5cdFx0XHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb2x1bW5zO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChuZXdDb21wb25lbnRzICYmIFV0aWxTdHJpbmcuaXNWYWxpZChmb3JtQ29tcC50aXRsZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRsRm9ybVBhbm5lbHNUb2tlbi5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLmdldEtleUZvcm11bGFyaW8oZm9ybUNvbXAudGl0bGUpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZm9ybUNvbXAudGl0bGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9iamVjdDogZm9ybUNvbXBcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRsRm9ybVBhbm5lbHNUb2tlbltsRm9ybVBhbm5lbHNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldFBhbmVsQ29tcG9uZW5ldChjb21wb25lbnRzLCBuZXdDb21wb25lbnRzLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmVzb2x2ZShsRm9ybVBhbm5lbHNUb2tlbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlY3Vyc2l2ZSBtZXRob2QgdG8gZ2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGVkaXRHcmlkIGR5bmFtaWMgZm9ybVxyXG5cdCAqIEBwYXJhbSBjb21wb25lbnRzXHJcblx0ICogQHBhcmFtIGZvcm1cclxuXHQgKi9cclxuXHRnZXRQYW5lbENvbXBvbmVuZXQoY29tcG9uZW50czogYW55W10sIGZvcm06IGFueSwgcGFuZWxOYW1lOiBzdHJpbmcpOiBhbnlbXSB7XHJcblx0XHRmb3IgKGxldCBmb3JtQ29tcCBvZiBmb3JtKSB7XHJcblx0XHRcdGlmIChmb3JtQ29tcC50eXBlID09PSAncGFuZWwnKSB7XHJcblx0XHRcdFx0Y29tcG9uZW50cy5wdXNoKGZvcm1Db21wKTtcclxuXHRcdFx0fSBlbHNlIGlmIChmb3JtQ29tcC5jb21wb25lbnRzIHx8IGZvcm1Db21wLmNvbHVtbnMpIHtcclxuXHRcdFx0XHRsZXQgbmV3Q29tcG9uZW50czogYW55O1xyXG5cdFx0XHRcdGlmIChmb3JtQ29tcC5jb21wb25lbnRzKSB7XHJcblx0XHRcdFx0XHRuZXdDb21wb25lbnRzID0gZm9ybUNvbXAuY29tcG9uZW50cztcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1Db21wLmNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb2x1bW5zO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb21wb25lbnRzID0gdGhpcy5nZXRQYW5lbENvbXBvbmVuZXQoY29tcG9uZW50cywgbmV3Q29tcG9uZW50cywgcGFuZWxOYW1lKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlY3Vyc2l2ZSBtZXRob2QgdG8gZ2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGNvbXBvbmVudHMgYSBjb2x1bW5zIG9mIHRoZSBkeW5hbWljIGZvcm1cclxuXHQgKiBAcGFyYW0gY29tcG9uZW50c1xyXG5cdCAqIEBwYXJhbSBmb3JtXHJcblx0ICovXHJcblx0Z2V0Q29tcG9uZW5ldEZvcm0oXHJcblx0XHRjb21wb25lbnRzOiBhbnlbXSxcclxuXHRcdGZvcm06IGFueSxcclxuXHRcdHBhbmVsTmFtZTogc3RyaW5nLFxyXG5cdFx0ZWRpdGdyaWQ6IGJvb2xlYW4sXHJcblx0XHRlZGl0R3JpZEtleTogc3RyaW5nXHJcblx0KTogYW55W10ge1xyXG5cdFx0Zm9yIChsZXQgZm9ybUNvbXAgb2YgZm9ybSkge1xyXG5cdFx0XHQvL01PLSAgbWFudGlzIDg3NDMgZml4IGFkZHJlc3MgdG9rZW5cclxuXHRcdFx0aWYgKChmb3JtQ29tcC5jb21wb25lbnRzIHx8IGZvcm1Db21wLmNvbHVtbnMpICYmIGZvcm1Db21wLnR5cGUgIT09ICdhZGRyZXNzJykge1xyXG5cdFx0XHRcdGxldCBuZXdDb21wb25lbnRzOiBhbnk7XHJcblx0XHRcdFx0aWYgKGZvcm1Db21wLmNvbXBvbmVudHMpIHtcclxuXHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb21wb25lbnRzO1xyXG5cdFx0XHRcdFx0aWYgKGZvcm1Db21wLnR5cGUgPT09ICdlZGl0Z3JpZCcpIHtcclxuXHRcdFx0XHRcdFx0ZWRpdGdyaWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRlZGl0R3JpZEtleSA9IGZvcm1Db21wLmtleTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1Db21wLmNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb2x1bW5zO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZm9ybUNvbXAudHlwZSAmJiBmb3JtQ29tcC50eXBlID09PSAncGFuZWwnKSB7XHJcblx0XHRcdFx0XHRwYW5lbE5hbWUgPSBmb3JtQ29tcC50aXRsZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW5ldEZvcm0oXHJcblx0XHRcdFx0XHRjb21wb25lbnRzLFxyXG5cdFx0XHRcdFx0bmV3Q29tcG9uZW50cyxcclxuXHRcdFx0XHRcdHBhbmVsTmFtZSxcclxuXHRcdFx0XHRcdGVkaXRncmlkLFxyXG5cdFx0XHRcdFx0ZWRpdEdyaWRLZXlcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvcm1Db21wLnBhbmVsTmFtZSA9IHBhbmVsTmFtZTtcclxuXHRcdFx0XHRmb3JtQ29tcC5lZGl0Z3JpZCA9IGVkaXRncmlkO1xyXG5cdFx0XHRcdGZvcm1Db21wLmVkaXRHcmlkS2V5ID0gZWRpdEdyaWRLZXk7XHJcblx0XHRcdFx0Y29tcG9uZW50cy5wdXNoKGZvcm1Db21wKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XHJcblx0fVxyXG5cclxuXHQvKiogVGhpcyBwcm9taXNlIGFsbG93cyB0byBleGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBjb25zdWx0aW5nIHRoZSBmb3JtIGZpZWxkcy4gKi9cclxuXHRnZXRGb3JtRWRpdEdyaWRGaWVsZHNCeVByb21Db2RlKHByb21Db2RpZ28pOiBQcm9taXNlPGFueVtdPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHQvLyBTZWFyY2ggdGhlIGR5bmFtaWMgZm9ybVxyXG5cdFx0XHRsZXQgbEZvcm1GaWVsZHNUb2tlbjogYW55W10gPSBudWxsO1xyXG5cdFx0XHR0aGlzLmZvcm1TZXJ2aWNlLmdldEJ5UHJvbUNvZGlnbyhwcm9tQ29kaWdvKS5zdWJzY3JpYmUoXHJcblx0XHRcdFx0KHJlc3VsdDogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRsZXQgZm9ybTogYW55ID0gcmVzdWx0O1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhZm9ybSB8fFxyXG5cdFx0XHRcdFx0XHQhZm9ybVswXSB8fFxyXG5cdFx0XHRcdFx0XHQhZm9ybVswXS5wcm9tQ29kaWdvIHx8XHJcblx0XHRcdFx0XHRcdGZvcm1bMF0ucHJvbUNvZGlnbyAhPSBwcm9tQ29kaWdvXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Ly8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyc0MDQnXSk7XHJcblx0XHRcdFx0XHRcdHJlc29sdmUobEZvcm1GaWVsZHNUb2tlbik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRsRm9ybUZpZWxkc1Rva2VuID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGxldCBmb3JtQ29tcCBvZiBmb3JtKSB7XHJcblx0XHRcdFx0XHRcdGxldCBuZXdDb21wb25lbnRzOiBhbnk7XHJcblx0XHRcdFx0XHRcdGxldCBjb21wb25lbnRzOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRpZiAoZm9ybUNvbXAuY29tcG9uZW50cykge1xyXG5cdFx0XHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb21wb25lbnRzO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1Db21wLmNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdFx0XHRuZXdDb21wb25lbnRzID0gZm9ybUNvbXAuY29sdW1ucztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAobmV3Q29tcG9uZW50cyAmJiBVdGlsU3RyaW5nLmlzVmFsaWQoZm9ybUNvbXAudGl0bGUpKSB7XHJcblx0XHRcdFx0XHRcdFx0bEZvcm1GaWVsZHNUb2tlbi5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLmdldEtleUZvcm11bGFyaW8oZm9ybUNvbXAudGl0bGUpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZm9ybUNvbXAudGl0bGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9iamVjdDogZm9ybUNvbXBcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRsRm9ybUZpZWxkc1Rva2VuW2xGb3JtRmllbGRzVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRFZGl0R3JpZENvbXBvbmVuZXQoY29tcG9uZW50cywgbmV3Q29tcG9uZW50cywgbnVsbCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJlc29sdmUobEZvcm1GaWVsZHNUb2tlbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlY3Vyc2l2ZSBtZXRob2QgdG8gZ2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGVkaXRHcmlkIGR5bmFtaWMgZm9ybVxyXG5cdCAqIEBwYXJhbSBjb21wb25lbnRzXHJcblx0ICogQHBhcmFtIGZvcm1cclxuXHQgKi9cclxuXHRnZXRFZGl0R3JpZENvbXBvbmVuZXQoY29tcG9uZW50czogYW55W10sIGZvcm06IGFueSwgcGFuZWxOYW1lOiBzdHJpbmcpOiBhbnlbXSB7XHJcblx0XHRmb3IgKGxldCBmb3JtQ29tcCBvZiBmb3JtKSB7XHJcblx0XHRcdGlmIChmb3JtQ29tcC50eXBlID09PSAnZWRpdGdyaWQnKSB7XHJcblx0XHRcdFx0Zm9ybUNvbXAucGFuZWxOYW1lID0gcGFuZWxOYW1lO1xyXG5cdFx0XHRcdGNvbXBvbmVudHMucHVzaChmb3JtQ29tcCk7XHJcblx0XHRcdH0gZWxzZSBpZiAoZm9ybUNvbXAuY29tcG9uZW50cyB8fCBmb3JtQ29tcC5jb2x1bW5zKSB7XHJcblx0XHRcdFx0bGV0IG5ld0NvbXBvbmVudHM6IGFueTtcclxuXHRcdFx0XHRpZiAoZm9ybUNvbXAuY29tcG9uZW50cykge1xyXG5cdFx0XHRcdFx0bmV3Q29tcG9uZW50cyA9IGZvcm1Db21wLmNvbXBvbmVudHM7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChmb3JtQ29tcC5jb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRuZXdDb21wb25lbnRzID0gZm9ybUNvbXAuY29sdW1ucztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGZvcm1Db21wLnR5cGUgJiYgZm9ybUNvbXAudHlwZSA9PT0gJ3BhbmVsJykge1xyXG5cdFx0XHRcdFx0cGFuZWxOYW1lID0gZm9ybUNvbXAudGl0bGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbXBvbmVudHMgPSB0aGlzLmdldEVkaXRHcmlkQ29tcG9uZW5ldChjb21wb25lbnRzLCBuZXdDb21wb25lbnRzLCBwYW5lbE5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY29tcG9uZW50cztcclxuXHR9XHJcblxyXG5cdC8qKiBJdCByZXR1cm5zIHRoZSB0b2tlbnMgYnkgcHJvbUNvZGlnbyAqL1xyXG5cdGdldExpc3RCeVByb21Db2RpZ28ocHJvbUNvZGU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcclxuXHRcdFx0dGhpcy5lbnZpcm9ubWVudC5ob3N0LmJhY2tlbmQuY29uZmlndXJhdGlvbiArICd0b2tlbi9nZXRCeVByb21Db2RpZ28nLFxyXG5cdFx0XHR7IHBhcmFtczogbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ3Byb21Db2RpZ28nLCBwcm9tQ29kZS50b1N0cmluZygpKSB9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHJldHVybnMgdGhlIHRva2VuIGJ5IGlkICovXHJcblx0Z2V0QnlJZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZW52aXJvbm1lbnQuaG9zdC5iYWNrZW5kLmNvbmZpZ3VyYXRpb24gKyAndG9rZW4vZ2V0QnlJZCcsIHtcclxuXHRcdFx0cGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnaWQnLCBpZC50b1N0cmluZygpKVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgZGVsZXRlcyBhIGZvcm0gYnkgaWQgKi9cclxuXHRkZWxldGUoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGUoXHJcblx0XHRcdHRoaXMuZW52aXJvbm1lbnQuaG9zdC5iYWNrZW5kLmNvbmZpZ3VyYXRpb24gKyAndG9rZW4vZGVsZXRlJyxcclxuXHRcdFx0eyBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpZCcsIGlkKSB9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHNhdmVzIHRoZSB0b2tlbiAqL1xyXG5cdHNhdmUodG9rZW46IFRva2VuKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChcclxuXHRcdFx0dGhpcy5lbnZpcm9ubWVudC5ob3N0LmJhY2tlbmQuY29uZmlndXJhdGlvbiArICd0b2tlbi9zYXZlJyxcclxuXHRcdFx0dG9rZW4sXHJcblx0XHRcdEhFQURFUl9KU09OXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEtleUZvcm11bGFyaW8oZm9ybVRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0aWYgKFV0aWxTdHJpbmcuaXNWYWxpZChmb3JtVGl0bGUpKSB7XHJcblx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNKSArXHJcblx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKGZvcm1UaXRsZSkucmVwbGFjZSgvXy9nLCAnLScpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gJyc7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgcmV0dXJucyB0aGUgdW5pcXVlIHZlcmlmaWNhdGlvbiBjb2RlICovXHJcblx0Z2V0VW5pcXVlVmVyaWZpY2F0aW9uQ29kZShsb2dpbjogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG5cdFx0XHR0aGlzLmVudmlyb25tZW50Lmhvc3QuYmFja2VuZC5kb2N1bWVudHNSZXBvc2l0b3J5ICtcclxuXHRcdFx0XHQnZG9jdW1lbnRvL2NvbnN1bHRhckNvZGlnb1VuaWNvLycgK1xyXG5cdFx0XHRcdGxvZ2luICtcclxuXHRcdFx0XHQnLycgK1xyXG5cdFx0XHRcdHRva2VuLFxyXG5cdFx0XHR7IHBhcmFtczogbmV3IEh0dHBQYXJhbXMoKSB9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHNlbmQgdGhlIGluZm9ybWF0aW9uIHRvIGNvcHkgdGhlIERvY3VtZW50IHZpZXdlciAqL1xyXG5cdGNvcHlEb2N1bWVudEluZm9ybWF0aW9uVmlld2VyKFxyXG5cdFx0bG9naW46IHN0cmluZyxcclxuXHRcdHRva2VuOiBzdHJpbmcsXHJcblx0XHR1bmlxdWVDb2RlOiBzdHJpbmcsXHJcblx0XHRkb2N1bWVudFVSTDogc3RyaW5nLFxyXG5cdFx0ZG9jdW1lbnROYW1lOiBzdHJpbmdcclxuXHQpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0bGV0IGluZm9Eb2N1bWVudG8gPSB7XHJcblx0XHRcdGNvZGlnb1VuaWNvOiB1bmlxdWVDb2RlLFxyXG5cdFx0XHRydXRhRG9jdW1lbnRvOiBkb2N1bWVudFVSTCxcclxuXHRcdFx0ZG9jdW1lbnROYW1lOiBkb2N1bWVudE5hbWVcclxuXHRcdH07XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoXHJcblx0XHRcdHRoaXMuZW52aXJvbm1lbnQuaG9zdC5iYWNrZW5kLmRvY3VtZW50c1JlcG9zaXRvcnkgK1xyXG5cdFx0XHRcdCdkb2N1bWVudG8vYWRpY2lvbmFyRG9jdW1lbnRvLycgK1xyXG5cdFx0XHRcdGxvZ2luICtcclxuXHRcdFx0XHQnLycgK1xyXG5cdFx0XHRcdHRva2VuLFxyXG5cdFx0XHRpbmZvRG9jdW1lbnRvLFxyXG5cdFx0XHRIRUFERVJfSlNPTlxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRLZXlCdWRnZXQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0S2V5RG9jdW1lbnQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0RPQ1VNRU5UTyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0S2V5RG9jdW1lbnRBbmFseXNpcygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyhUb2tlblNlcnZpY2UuVE9LRU5fRE9DVU1FTlRPX0FOQUxZU0lTX1RZUEUpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEtleVRhc2soKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0tMKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRLZXlTdGF0aWMoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0S2V5Q2FsY3VsYXRlZCh0b2tlbjogVG9rZW4pOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEKSArXHJcblx0XHRcdCdfJyArXHJcblx0XHRcdFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyh0b2tlbi5uYW1lKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRLZXlTbmFwc2hvdCh0b2tlbjogVG9rZW4pOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TTkFQU0hPVCkgK1xyXG5cdFx0XHQnXycgK1xyXG5cdFx0XHRVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnModG9rZW4ubmFtZSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0S2V5R3VhcmFudGVlKHRva2VuOiBQbGlDbmZHdWFyYW50ZWVUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0dVQVJBTlRFRSkgK1xyXG5cdFx0XHQnXycgK1xyXG5cdFx0XHRVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnModG9rZW4ubmFtZSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm4gYSB2YWx1ZSB0aGF0IHJlcHJlc2VudCB0aGUgdHlwZSBvZiBsYWJlbDogMT1Gb3JtLCAyPUJ1ZGdldCwgMz1TdGF0aWMsIDQ9Q2FsY3VsYXRlZFxyXG5cdCAqIEBwYXJhbSBrZXkgVmFsdWUgdG8gZXZhbHVlYXRlXHJcblx0ICovXHJcblx0c3RhdGljIGdldEtleVR5cGUoa2V5OiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdFx0a2V5ID0ga2V5LnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKTtcclxuXHRcdGtleSA9IGtleS5zdWJzdHJpbmcoMSwga2V5LmluZGV4T2YoJ18nKSk7XHJcblx0XHRpZiAoa2V5LnN0YXJ0c1dpdGgoVXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNKSkpIHtcclxuXHRcdFx0cmV0dXJuIDE7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRrZXkuc3RhcnRzV2l0aChVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVCkpXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuIDI7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRrZXkuc3RhcnRzV2l0aChVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQykpXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuIDM7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRrZXkuc3RhcnRzV2l0aChcclxuXHRcdFx0XHRVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURUQpXHJcblx0XHRcdClcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gNDtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdGtleS5zdGFydHNXaXRoKFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyhUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTS0wpKVxyXG5cdFx0KSB7XHJcblx0XHRcdHJldHVybiA1O1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0a2V5LnN0YXJ0c1dpdGgoXHJcblx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9ET0NVTUVOVE9fQU5BTFlTSVNfVFlQRSlcclxuXHRcdFx0KVxyXG5cdFx0KSB7XHJcblx0XHRcdHJldHVybiA2O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZXBlbmRzIG9mIHRoZSB0eXBlIG9mIGZvcm1GaWVsZFRva2VuIHJldHVybiBkZSB2YWx1ZSBvZiB0aGUgdmFsdWVEYXRhXHJcblx0ICogQHBhcmFtIGZvcm1GaWVsZFRva2VuXHJcblx0ICogQHBhcmFtIHZhbHVlRGF0YVxyXG5cdCAqL1xyXG5cdGdldFZhbHVlRnJvbUZvcm1GaWVsZChmb3JtRmllbGRUb2tlbjogYW55LCB2YWx1ZURhdGE6IGFueSk6IGFueSB7XHJcblx0XHRpZiAodHlwZW9mIHZhbHVlRGF0YSA9PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRpZiAoZm9ybUZpZWxkVG9rZW4udHlwZSkge1xyXG5cdFx0XHRcdGlmIChmb3JtRmllbGRUb2tlbi50eXBlID09ICdhZGRyZXNzJykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRGF0YS5mb3JtYXR0ZWRfYWRkcmVzcztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0Zm9ybUZpZWxkVG9rZW4udHlwZSA9PSAnc2VsZWN0JyAmJlxyXG5cdFx0XHRcdFx0dmFsdWVEYXRhLmhhc093blByb3BlcnR5KGZvcm1GaWVsZFRva2VuLnNlYXJjaEZpZWxkKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZm9ybUZpZWxkVG9rZW4pO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2codmFsdWVEYXRhKTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0aWYodmFsdWVEYXRhLmhhc093blByb3BlcnR5KCdvcmlnaW5hbF9uYW1lJykgIT09ICcnKXtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlRGF0YS5vcmlnaW5hbF9uYW1lO1xyXG5cdFx0XHRcdFx0fWVsc2UgaWYodmFsdWVEYXRhLmhhc093blByb3BlcnR5KCduYXRpdmVOYW1lJykgIT09ICcnKXtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlRGF0YS5uYXRpdmVOYW1lO1xyXG5cdFx0XHRcdFx0fWVsc2UgaWYoZm9ybUZpZWxkVG9rZW4uc2VhcmNoRmllbGQpe1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVEYXRhW2Zvcm1GaWVsZFRva2VuLnNlYXJjaEZpZWxkXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWx1ZURhdGE7XHJcblx0fVxyXG5cdGZvcm1hdERhdGUodmFsdWU6IERhdGUsIGxvY2FsZTogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcblxyXG5cdFx0Y29uc3QgbW9udGhzID0ge1xyXG5cdFx0XHRlczogW1xyXG5cdFx0XHRcdCdlbmVybycsXHJcblx0XHRcdFx0J2ZlYnJlcm8nLFxyXG5cdFx0XHRcdCdtYXJ6bycsXHJcblx0XHRcdFx0J2FicmlsJyxcclxuXHRcdFx0XHQnbWF5bycsXHJcblx0XHRcdFx0J2p1bmlvJyxcclxuXHRcdFx0XHQnanVsaW8nLFxyXG5cdFx0XHRcdCdhZ29zdG8nLFxyXG5cdFx0XHRcdCdzZXB0aWVtYnJlJyxcclxuXHRcdFx0XHQnb2N0dWJyZScsXHJcblx0XHRcdFx0J25vdmllbWJyZScsXHJcblx0XHRcdFx0J2RpY2llbWJyZSdcclxuXHRcdFx0XSxcclxuXHRcdFx0ZW46IFtcclxuXHRcdFx0XHQnSmFudWFyeScsXHJcblx0XHRcdFx0J0ZlYnJ1YXJ5JyxcclxuXHRcdFx0XHQnTWFyY2gnLFxyXG5cdFx0XHRcdCdBcHJpbCcsXHJcblx0XHRcdFx0J01heScsXHJcblx0XHRcdFx0J0p1bmUnLFxyXG5cdFx0XHRcdCdKdWx5JyxcclxuXHRcdFx0XHQnQXVndXN0JyxcclxuXHRcdFx0XHQnU2VwdGVtYmVyJyxcclxuXHRcdFx0XHQnT2N0b2JlcicsXHJcblx0XHRcdFx0J05vdmVtYmVyJyxcclxuXHRcdFx0XHQnRGVjZW1iZXInXHJcblx0XHRcdF0sXHJcblx0XHRcdGZyOiBbXHJcblx0XHRcdFx0J2phbnZpZXInLFxyXG5cdFx0XHRcdCdmw6l2cmllcicsXHJcblx0XHRcdFx0J21hcnMnLFxyXG5cdFx0XHRcdCdhdnJpbCcsXHJcblx0XHRcdFx0J21haScsXHJcblx0XHRcdFx0J2p1aW4nLFxyXG5cdFx0XHRcdCdqdWlsbGV0JyxcclxuXHRcdFx0XHQnYW/Du3QnLFxyXG5cdFx0XHRcdCdzZXB0ZW1icmUnLFxyXG5cdFx0XHRcdCdvY3RvYnJlJyxcclxuXHRcdFx0XHQnbm92ZW1icmUnLFxyXG5cdFx0XHRcdCdkw6ljZW1icmUnXHJcblx0XHRcdF0sXHJcblx0XHRcdGRlOiBbXHJcblx0XHRcdFx0J0phbnVhcicsXHJcblx0XHRcdFx0J0ZlYnJ1YXInLFxyXG5cdFx0XHRcdCdNw6RyeicsXHJcblx0XHRcdFx0J0FwcmlsJyxcclxuXHRcdFx0XHQnTWFpJyxcclxuXHRcdFx0XHQnSnVuaScsXHJcblx0XHRcdFx0J0p1bGknLFxyXG5cdFx0XHRcdCdBdWd1c3QnLFxyXG5cdFx0XHRcdCdTZXB0ZW1iZXInLFxyXG5cdFx0XHRcdCdPa3RvYmVyJyxcclxuXHRcdFx0XHQnTm92ZW1iZXInLFxyXG5cdFx0XHRcdCdEZXplbWJlcidcclxuXHRcdFx0XSxcclxuXHRcdFx0aXQ6IFtcclxuXHRcdFx0XHQnZ2VubmFpbycsXHJcblx0XHRcdFx0J2ZlYmJyYWlvJyxcclxuXHRcdFx0XHQnbWFyem8nLFxyXG5cdFx0XHRcdCdhcHJpbGUnLFxyXG5cdFx0XHRcdCdtYWdnaW8nLFxyXG5cdFx0XHRcdCdnaXVnbm8nLFxyXG5cdFx0XHRcdCdsdWdsaW8nLFxyXG5cdFx0XHRcdCdhZ29zdG8nLFxyXG5cdFx0XHRcdCdzZXR0ZW1icmUnLFxyXG5cdFx0XHRcdCdvdHRvYnJlJyxcclxuXHRcdFx0XHQnbm92ZW1icmUnLFxyXG5cdFx0XHRcdCdkaWNlbWJyZSdcclxuXHRcdFx0XVxyXG5cdFx0fTtcclxuXHJcblx0XHRjb25zdCBsb2NhbGVNb250aHMgPSBtb250aHNbbG9jYWxlXTtcclxuXHJcblx0XHRjb25zdCBtb250aCA9IGxvY2FsZU1vbnRoc1tkYXRlLmdldE1vbnRoKCldO1xyXG5cdFx0Y29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHJcblx0XHRyZXR1cm4gYCR7bW9udGh9ICR7eWVhcn1gO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBUcnkgdG8gZmluZCB0aGUgdG9rZW4gaW4gdGhlIHN0cmluZ1RleHQgYW5kIHJlcGxhY2Ugd2l0aCBkYXRhVmFsdWUuIElmIGRldGVjdCBmb3JtYXQgb2YgbnVtYmVyIG9yIGRhdGUgdHJ5IHRvIGZvcm1hdCB0aGUgZGF0YVZhbHVlXHJcblx0ICogQHBhcmFtIHN0cmluZ1RleHRcclxuXHQgKiBAcGFyYW0gdG9rZW5cclxuXHQgKiBAcGFyYW0gZGF0YVZhbHVlXHJcblx0ICovXHJcblx0cmVwbGFjZVRva2VuKHN0cmluZ1RleHQ6IHN0cmluZywgdG9rZW46IGFueSwgZGF0YVZhbHVlOiBhbnksIGxvY2FsZT86IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRsZXQgdmFsdWVSZXBsYWNlOiBzdHJpbmcgPSBudWxsO1xyXG5cdFx0aWYgKHRva2VuICYmIHRva2VuWzBdID09ICcjJykge1xyXG5cdFx0XHRsZXQgdHlwZVRva2VuID0gdG9rZW4uc3Vic3RyaW5nKDEsIHRva2VuLmluZGV4T2YoJygnKSk7XHJcblx0XHRcdGlmICh0eXBlVG9rZW4gPT0gJ2RhdGUnKSB7XHJcblx0XHRcdFx0bGV0IGRhdGVGb3JtYXQ6IHN0cmluZyA9IHRva2VuLnN1YnN0cmluZyhcclxuXHRcdFx0XHRcdHRva2VuLmluZGV4T2YoJ30nKSArIDEsXHJcblx0XHRcdFx0XHR0b2tlbi5pbmRleE9mKCcpJylcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0LnRyaW0oKS5yZXBsYWNlKC9cXFwiL2csICcnKS5yZXBsYWNlKC9cXCcvZywgJycpO1xyXG5cdFx0XHRcdGxldCBkYXRlVmFsdWUgPSBEYXRlVXRpbC5nZXREYXRlKGRhdGFWYWx1ZSk7XHJcblx0XHRcdFx0aWYgKGxvY2FsZSAhPSBudWxsICYmIGxvY2FsZSkge1xyXG5cdFx0XHRcdFx0dmFsdWVSZXBsYWNlID0gdGhpcy5mb3JtYXREYXRlKGRhdGVWYWx1ZSwgbG9jYWxlKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGRhdGVWYWx1ZSkge1xyXG5cdFx0XHRcdFx0dmFsdWVSZXBsYWNlID0gRGF0ZVV0aWwuZ2V0TW9tZW50KGRhdGVWYWx1ZSkuZm9ybWF0KGRhdGVGb3JtYXQpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR2YWx1ZVJlcGxhY2UgPSAnJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSBpZiAodHlwZVRva2VuID09ICdudW1iZXInKSB7XHJcblx0XHRcdFx0bGV0IG51bWJlclZhbHVlOiBudW1iZXIgPSBOdW1iZXIoZGF0YVZhbHVlKTtcclxuXHRcdFx0XHRpZiAobnVtYmVyVmFsdWUgIT0gdW5kZWZpbmVkICYmICFpc05hTihudW1iZXJWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdGxldCBudW1iZXJGb3JtYXQ6IHN0cmluZyA9IHRva2VuLnN1YnN0cmluZyhcclxuXHRcdFx0XHRcdFx0dG9rZW4uaW5kZXhPZignfScpICsgMSxcclxuXHRcdFx0XHRcdFx0dG9rZW4uaW5kZXhPZignKScpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0bnVtYmVyRm9ybWF0ID0gbnVtYmVyRm9ybWF0LnRyaW0oKS5yZXBsYWNlKC9cXFwiL2csICcnKS5yZXBsYWNlKC9cXCcvZywgJycpO1xyXG5cdFx0XHRcdFx0dmFsdWVSZXBsYWNlID0gdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKFxyXG5cdFx0XHRcdFx0XHRudW1iZXJWYWx1ZSxcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2NhbGUsXHJcblx0XHRcdFx0XHRcdCcnLFxyXG5cdFx0XHRcdFx0XHRudW1iZXJGb3JtYXRcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFxyXG5cdFx0XHRcdFx0XHQnRWwgZGF0byBbJyArXHJcblx0XHRcdFx0XHRcdFx0ZGF0YVZhbHVlICtcclxuXHRcdFx0XHRcdFx0XHQnXSBwYXJhIGVsIHRva2VuIFsnICtcclxuXHRcdFx0XHRcdFx0XHR0b2tlbiArXHJcblx0XHRcdFx0XHRcdFx0J10gdGlwbyBuw7ptZXJpY28gbm8gZXMgdmFsaWRvJ1xyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHZhbHVlUmVwbGFjZSA9ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygndGlwbyBkZSB0b2tlbiBpbmRlZmluaWRvLiBbdHlwZVRva2VuWycgKyB0eXBlVG9rZW4gKyAnXV0nKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmICh0b2tlbiAmJiB0b2tlblswXSA9PSAnJCcpIHtcclxuXHRcdFx0aWYoZGF0YVZhbHVlICE9PSBudWxsICYmIGRhdGFWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRhdGFWYWx1ZS5vcmlnaW5hbF9uYW1lICE9PSB1bmRlZmluZWQgJiYgZGF0YVZhbHVlLm9yaWdpbmFsX25hbWUgIT09IG51bGwpIHtcclxuXHRcdFx0XHR2YWx1ZVJlcGxhY2UgPSBkYXRhVmFsdWUub3JpZ2luYWxfbmFtZTtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dmFsdWVSZXBsYWNlID0gZGF0YVZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdFx0Ly8gdmFsdWVSZXBsYWNlID0gZGF0YVZhbHVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ0VsIHRva2VuIG5vIGVzIHZhbGlkby4gW3Rva2VuWycgKyB0b2tlbiArICddXScpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHN0cmluZ1RleHQgJiYgdmFsdWVSZXBsYWNlICE9PSBudWxsKSB7XHJcblx0XHRcdC8vIHJlcGxhY2UgdGV4dCBpbiBhIG1vcmUgZWZmaWNpZW50IHdheVxyXG5cdFx0XHRzdHJpbmdUZXh0ID0gc3RyaW5nVGV4dC5zcGxpdCh0b2tlbikuam9pbih2YWx1ZVJlcGxhY2UpO1xyXG5cdFx0XHQvL3N0cmluZ1RleHQgPSBzdHJpbmdUZXh0LnJlcGxhY2UodG9rZW4sIHZhbHVlUmVwbGFjZSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gc3RyaW5nVGV4dDtcclxuXHR9XHJcblxyXG5cdGdldExpc3RUb2tlbnNCeVN0cmluZ1NlZ21lbnRhdGlvbihzdHJpbmdUZXh0OiBzdHJpbmcpOiBhbnlbXSB7XHJcblx0XHRjb25zdCBhcnJheVRva2VuID0gc3RyaW5nVGV4dC5tYXRjaCgvXFwkeyhbXn1dKylcXH0vZyk7XHJcblx0XHRjb25zdCBhcnJheVRva2VuRm9ybWF0dGVkRGF0ZSA9IHN0cmluZ1RleHQubWF0Y2goL1xcI2RhdGVbXildK1xcKS9nKTtcclxuXHRcdGNvbnN0IGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIgPSBzdHJpbmdUZXh0Lm1hdGNoKC9cXCNudW1iZXJbXildK1xcKS9nKTtcclxuXHRcdGxldCBhcnJheVRva2VuRm9ybWF0dGVkID0gW107XHJcblx0XHRpZiAoXHJcblx0XHRcdGFycmF5VG9rZW5Gb3JtYXR0ZWREYXRlICYmXHJcblx0XHRcdGFycmF5VG9rZW5Gb3JtYXR0ZWREYXRlLmxlbmd0aCA+IDAgJiZcclxuXHRcdFx0YXJyYXlUb2tlbkZvcm1hdHRlZE51bWJlciAmJlxyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyLmxlbmd0aCA+IDBcclxuXHRcdCkge1xyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkID0gYXJyYXlUb2tlbkZvcm1hdHRlZERhdGUuY29uY2F0KGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIpO1xyXG5cdFx0fSBlbHNlIGlmIChhcnJheVRva2VuRm9ybWF0dGVkRGF0ZSAmJiBhcnJheVRva2VuRm9ybWF0dGVkRGF0ZS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGFycmF5VG9rZW5Gb3JtYXR0ZWQgPSBhcnJheVRva2VuRm9ybWF0dGVkRGF0ZS5zbGljZSgpO1xyXG5cdFx0fSBlbHNlIGlmIChhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyICYmIGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkID0gYXJyYXlUb2tlbkZvcm1hdHRlZE51bWJlci5zbGljZSgpO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChhcnJheVRva2VuKSB7XHJcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgYXJyYXlUb2tlbikge1xyXG5cdFx0XHRcdGNvbnN0IGluZm9Ub2tlbiA9IHsga2V5OiB0b2tlbiwgdmFsdWU6IHRva2VuIH07XHJcblx0XHRcdFx0aWYgKGFycmF5VG9rZW5Gb3JtYXR0ZWQpIHtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdG9rZW5Gb3JtYXR0ZWQgb2YgYXJyYXlUb2tlbkZvcm1hdHRlZCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpbmRleCA9IHRva2VuRm9ybWF0dGVkLmluZGV4T2YodG9rZW4pO1xyXG5cdFx0XHRcdFx0XHRpZiAoaW5kZXggPj0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGluZm9Ub2tlbi52YWx1ZSA9IHRva2VuRm9ybWF0dGVkO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGluZm9Ub2tlbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y2hhbmdlSWRQcm9wZXJ0aWVzT2ZPYmplY3Qobm9ybWFsaXphdGlvbkNvbHVtbnM6IGFueVtdLCBsaXN0RGF0YTogYW55W10pOiBhbnlbXSB7XHJcblx0XHRjb25zdCBuZXdEYXRhID0gW107XHJcblx0XHRsaXN0RGF0YS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcblx0XHRcdGNvbnN0IG9iakRhdGEgPSB7fTtcclxuXHRcdFx0T2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcclxuXHRcdFx0XHRpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdG5vcm1hbGl6YXRpb25Db2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoY29sdW1uLmlkQ29sdW1uLnRvU3RyaW5nKCkgPT09IHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRcdFx0b2JqRGF0YVtjb2x1bW4ua2V5XSA9IGRhdGFbcHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpZiAob2JqRGF0YSkge1xyXG5cdFx0XHRcdG5ld0RhdGEucHVzaChvYmpEYXRhKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gbmV3RGF0YTtcclxuXHR9XHJcblxyXG5cdGdlbmVyYXRlSHRtbEJ5VG9rZW5zQW5kRGF0YShodG1sOiBzdHJpbmcsIGxpc3REYXRhOiBhbnlbXSwgbGlzdFRva2VuczogYW55W10pOiBzdHJpbmdbXSB7XHJcblx0XHRjb25zdCB0cmFuc2xhdGVkQ2FyZHM6IGFueVtdID0gW107XHJcblx0XHRsaXN0RGF0YS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcblx0XHRcdGNvbnN0IG9ialRva2VuID0ge307XHJcblx0XHRcdGNvbnN0IGh0bWxUcmFuc2xhdGVkID0geyBodG1sOiBodG1sIH07XHJcblx0XHRcdE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcblx0XHRcdFx0bGlzdFRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHByb3BlcnR5ID09IHRva2VuLmtleS5yZXBsYWNlKCckeycsICcnKS5yZXBsYWNlKCd9JywgJycpKSB7XHJcblx0XHRcdFx0XHRcdG9ialRva2VuW3Rva2VuLmtleV0gPSBkYXRhW3Byb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0aHRtbFRyYW5zbGF0ZWQuaHRtbCA9IGh0bWxUcmFuc2xhdGVkLmh0bWwucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0XHR0b2tlbi5rZXksXHJcblx0XHRcdFx0XHRcdFx0ZGF0YVtwcm9wZXJ0eV1cclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHRyYW5zbGF0ZWRDYXJkcy5wdXNoKGh0bWxUcmFuc2xhdGVkKTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHRyYW5zbGF0ZWRDYXJkcztcclxuXHR9XHJcblxyXG5cdGdldExpc3RUb2tlbnNCeVN0cmluZyhzdHJpbmdUZXh0OiBzdHJpbmcpOiBhbnlbXSB7XHJcblx0XHR2YXIgYXJyYXlUb2tlbiA9IHN0cmluZ1RleHQubWF0Y2goL1xcJHsoW159XSspXFx9L2cpO1xyXG5cdFx0dmFyIGFycmF5VG9rZW5Gb3JtYXR0ZWREYXRlID0gc3RyaW5nVGV4dC5tYXRjaCgvXFwjZGF0ZVteKV0rXFwpL2cpO1xyXG5cdFx0dmFyIGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIgPSBzdHJpbmdUZXh0Lm1hdGNoKC9cXCNudW1iZXJbXildK1xcKS9nKTtcclxuXHRcdHZhciBhcnJheVRva2VuRm9ybWF0dGVkID0gW107XHJcblx0XHRpZiAoXHJcblx0XHRcdGFycmF5VG9rZW5Gb3JtYXR0ZWREYXRlICYmXHJcblx0XHRcdGFycmF5VG9rZW5Gb3JtYXR0ZWREYXRlLmxlbmd0aCA+IDAgJiZcclxuXHRcdFx0YXJyYXlUb2tlbkZvcm1hdHRlZE51bWJlciAmJlxyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyLmxlbmd0aCA+IDBcclxuXHRcdCkge1xyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkID0gYXJyYXlUb2tlbkZvcm1hdHRlZERhdGUuY29uY2F0KGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIpO1xyXG5cdFx0fSBlbHNlIGlmIChhcnJheVRva2VuRm9ybWF0dGVkRGF0ZSAmJiBhcnJheVRva2VuRm9ybWF0dGVkRGF0ZS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGFycmF5VG9rZW5Gb3JtYXR0ZWQgPSBhcnJheVRva2VuRm9ybWF0dGVkRGF0ZS5zbGljZSgpO1xyXG5cdFx0fSBlbHNlIGlmIChhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyICYmIGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkID0gYXJyYXlUb2tlbkZvcm1hdHRlZE51bWJlci5zbGljZSgpO1xyXG5cdFx0fVxyXG5cdFx0dmFyIHJlc3VsdDogYW55W10gPSBbXTtcclxuXHJcblx0XHRpZiAoYXJyYXlUb2tlbikge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIGFycmF5VG9rZW4pIHtcclxuXHRcdFx0XHRsZXQga2V5VHlwZTogbnVtYmVyID0gVG9rZW5TZXJ2aWNlLmdldEtleVR5cGUodG9rZW4pO1xyXG5cdFx0XHRcdGlmIChrZXlUeXBlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIGluZm9Ub2tlbiA9IHsga2V5OiB0b2tlbiwgdmFsdWU6IHRva2VuIH07XHJcblx0XHRcdFx0aWYgKGFycmF5VG9rZW5Gb3JtYXR0ZWQpIHtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdG9rZW5Gb3JtYXR0ZWQgb2YgYXJyYXlUb2tlbkZvcm1hdHRlZCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgaW5kZXggPSB0b2tlbkZvcm1hdHRlZC5pbmRleE9mKHRva2VuKTtcclxuXHRcdFx0XHRcdFx0aWYgKGluZGV4ID49IDApIHtcclxuXHRcdFx0XHRcdFx0XHRpbmZvVG9rZW4udmFsdWUgPSB0b2tlbkZvcm1hdHRlZDtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXN1bHQucHVzaChpbmZvVG9rZW4pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHQvLyBsZXQgdG9rZW5zOiBhbnlbXSA9IFtdO1xyXG5cdFx0Ly8gbGV0IGkgPSB0aGlzLm5leHRWYWxpZFBvc2l0aW9uVG9rZW5zKHN0cmluZ1RleHQsIDApO1xyXG5cdFx0Ly8gbGV0IGNvdW50ID0gMDtcclxuXHRcdC8vIHdoaWxlIChpID49IDAgJiYgY291bnQgPD0gMTApIHtcclxuXHRcdC8vICAgbGV0IGluZm9Ub2tlbjoge30gPSBudWxsO1xyXG5cdFx0Ly8gICBsZXQgbmV4dEk6IG51bWJlciA9IGk7XHJcblx0XHQvLyAgIGxldCBjaGFyYWN0ZXIgPSBzdHJpbmdUZXh0LnN1YnN0cmluZyhpLCAoaSArIDEpKTtcclxuXHRcdC8vICAgaWYgKGNoYXJhY3RlciA9PSBcIiRcIikge1xyXG5cdFx0Ly8gICAgIGxldCBuZXh0Q2hhcmFjdGVyID0gc3RyaW5nVGV4dC5zdWJzdHJpbmcoKGkgKyAxKSwgKGkgKyAyKSk7XHJcblx0XHQvLyAgICAgLy8gVGhlIG5leHQgY2hhcmFjdGVyIG5lZWQgdG8gYmUgYSB7IHNpZ25cclxuXHRcdC8vICAgICBpZiAobmV4dENoYXJhY3RlciAhPSBcIntcIikge1xyXG5cdFx0Ly8gICAgICAgaSA9IHRoaXMubmV4dFZhbGlkUG9zaXRpb25Ub2tlbnMoc3RyaW5nVGV4dCwgbmV4dEkgKyAxKTtcclxuXHRcdC8vICAgICAgIGNvbnRpbnVlO1xyXG5cdFx0Ly8gICAgIH1cclxuXHRcdC8vICAgICBsZXQga2V5VG9rZW46IHN0cmluZyA9IHN0cmluZ1RleHQuc3Vic3RyaW5nKGksIHN0cmluZ1RleHQuaW5kZXhPZihcIn1cIiwgaSkgKyAxKTtcclxuXHRcdC8vICAgICAvLyBJZiB0aGUgdG9rZW4gaGF2ZSBhIHZhbGlkIGtleSB0eXBlXHJcblx0XHQvLyAgICAgbGV0IGtleVR5cGU6IG51bWJlciA9IFRva2VuU2VydmljZS5nZXRLZXlUeXBlKGtleVRva2VuLnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpKTtcclxuXHRcdC8vICAgICBpZiAoa2V5VHlwZSA9PT0gbnVsbCkge1xyXG5cdFx0Ly8gICAgICAgaSA9IHRoaXMubmV4dFZhbGlkUG9zaXRpb25Ub2tlbnMoc3RyaW5nVGV4dCwgbmV4dEkgKyAxKTtcclxuXHRcdC8vICAgICAgIGNvbnRpbnVlO1xyXG5cdFx0Ly8gICAgIH1cclxuXHRcdC8vICAgICBpbmZvVG9rZW4gPSB7XHJcblx0XHQvLyAgICAgICBrZXk6IGtleVRva2VuLFxyXG5cdFx0Ly8gICAgICAgdmFsdWU6IGtleVRva2VuXHJcblx0XHQvLyAgICAgfTtcclxuXHRcdC8vICAgICBuZXh0SSA9IHN0cmluZ1RleHQuaW5kZXhPZihcIn1cIiwgaSk7XHJcblx0XHQvLyAgIH0gZWxzZSB7XHJcblx0XHQvLyAgICAgbGV0IG5leHRTaWduOiBudW1iZXIgPSBzdHJpbmdUZXh0LmluZGV4T2YoXCIkXCIsIGkpO1xyXG5cdFx0Ly8gICAgIC8vIFdlIGlubHkgc3VwcG9ydCAjZGF0ZSgkIGFuZCAjbnVtYmVyKCQgaW4gdGhpcyAyIHNjZW5hcmlvcyB0aGUgbGVuZ2h0IGNhbid0IGJlIG1vcmUgdGhhbiAxMCBjaGFyYWN0ZXJzXHJcblx0XHQvLyAgICAgaWYgKG5leHRTaWduIDwgMCB8fCAobmV4dFNpZ24gLSBpKSA+IDEwKSB7XHJcblx0XHQvLyAgICAgICBpID0gdGhpcy5uZXh0VmFsaWRQb3NpdGlvblRva2VucyhzdHJpbmdUZXh0LCBuZXh0SSArIDEpO1xyXG5cdFx0Ly8gICAgICAgY29udGludWU7XHJcblx0XHQvLyAgICAgfVxyXG5cdFx0Ly8gICAgIGxldCBrZXlUb2tlbjogc3RyaW5nID0gc3RyaW5nVGV4dC5zdWJzdHJpbmcoc3RyaW5nVGV4dC5pbmRleE9mKFwiJFwiLCBpKSwgc3RyaW5nVGV4dC5pbmRleE9mKFwifVwiLCBpKSArIDEpO1xyXG5cdFx0Ly8gICAgIGxldCB2YWx1ZVRva2VuOiBzdHJpbmcgPSBzdHJpbmdUZXh0LnN1YnN0cmluZyhpLCBzdHJpbmdUZXh0LmluZGV4T2YoXCIpXCIsIGkpICsgMSk7XHJcblx0XHQvLyAgICAgaW5mb1Rva2VuID0ge1xyXG5cdFx0Ly8gICAgICAga2V5OiBrZXlUb2tlbixcclxuXHRcdC8vICAgICAgIHZhbHVlOiB2YWx1ZVRva2VuXHJcblx0XHQvLyAgICAgfTtcclxuXHRcdC8vICAgICBuZXh0SSA9IHN0cmluZ1RleHQuaW5kZXhPZihcIilcIiwgaSk7XHJcblx0XHQvLyAgIH1cclxuXHRcdC8vICAgdG9rZW5zLnB1c2goaW5mb1Rva2VuKTtcclxuXHRcdC8vICAgaSA9IHRoaXMubmV4dFZhbGlkUG9zaXRpb25Ub2tlbnMoc3RyaW5nVGV4dCwgbmV4dEkpO1xyXG5cdFx0Ly8gICBjb3VudCsrO1xyXG5cdFx0Ly8gfVxyXG5cdFx0Ly8gcmV0dXJuIHRva2VucztcclxuXHR9XHJcblxyXG5cdG5leHRWYWxpZFBvc2l0aW9uVG9rZW5zKHN0cmluZ1RleHQ6IHN0cmluZywgbmV4dEk6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRsZXQgdG9rZW5Eb2xsYXJTaWduOiBudW1iZXIgPSBzdHJpbmdUZXh0LmluZGV4T2YoJyQnLCBuZXh0SSk7XHJcblx0XHRsZXQgdG9rZW5OdW1TaWduOiBudW1iZXIgPSBzdHJpbmdUZXh0LmluZGV4T2YoJyMnLCBuZXh0SSk7XHJcblx0XHRsZXQgaTogbnVtYmVyID1cclxuXHRcdFx0dG9rZW5Eb2xsYXJTaWduIDwgMCAmJiB0b2tlbk51bVNpZ24gPj0gMFxyXG5cdFx0XHRcdD8gdG9rZW5OdW1TaWduXHJcblx0XHRcdFx0OiB0b2tlbk51bVNpZ24gPCAwICYmIHRva2VuRG9sbGFyU2lnbiA+PSAwXHJcblx0XHRcdFx0PyB0b2tlbkRvbGxhclNpZ25cclxuXHRcdFx0XHQ6IHRva2VuRG9sbGFyU2lnbiA8IHRva2VuTnVtU2lnblxyXG5cdFx0XHRcdD8gdG9rZW5Eb2xsYXJTaWduXHJcblx0XHRcdFx0OiB0b2tlbk51bVNpZ247XHJcblx0XHRyZXR1cm4gaTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEl0IHJldXNlcyByZXBsYWNlVG9rZW5zRnJvbUxpc3RPYmplY3RQdWJsaWMgYnV0IHNldCBhbGwga2V5cyBsb2JqZWN0dG9rZW5zIGFzIGxvd2VyY2FzZVxyXG5cdCAqIEBwYXJhbSB0b2tlbk5hbWVcclxuXHQgKiBAcGFyYW0gZm9ybXVsYVxyXG5cdCAqIEBwYXJhbSBsT2JqZWN0VG9rZW5zXHJcblx0ICovXHJcblx0cmVwbGFjZVRva2Vuc0Zyb21MaXN0T2JqZWN0UHVibGljKFxyXG5cdFx0dG9rZW5OYW1lOiBzdHJpbmcsXHJcblx0XHRmb3JtdWxhOiBzdHJpbmcsXHJcblx0XHRsT2JqZWN0VG9rZW5zOiBhbnlbXVxyXG5cdCk6IHN0cmluZyB7XHJcblx0XHRsZXQgbERhdGFPcmc6IGFueVtdID0gW107XHJcblx0XHRpZiAobE9iamVjdFRva2Vucykge1xyXG5cdFx0XHRmb3IgKGxldCBkYXRhRm9ybSBpbiBsT2JqZWN0VG9rZW5zKSB7XHJcblx0XHRcdFx0bERhdGFPcmdbZGF0YUZvcm0udG9Mb3dlckNhc2UoKV0gPSBsT2JqZWN0VG9rZW5zW2RhdGFGb3JtXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMucmVwbGFjZVRva2Vuc0Zyb21MaXN0T2JqZWN0KHRva2VuTmFtZSwgZm9ybXVsYSwgbERhdGFPcmcpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBAcGFyYW0gdG9rZW5OYW1lIHRva2VuIG5hbWVcclxuXHQgKiBAcGFyYW0gZm9ybXVsYSBTdHJpbmcgd2l0aCB0aGUgZm9ybXVsYSB0byBleGVjdXRlXHJcblx0ICogQHBhcmFtIGxPYmplY3RUb2tlbnMgTGlzdCBvZiB0b2tlbnMgd2l0aCB0aGUgdmFsdWVzIHRvIHJlcGxhY2VcclxuXHQgKi9cclxuXHRyZXBsYWNlVG9rZW5zRnJvbUxpc3RPYmplY3QodG9rZW5OYW1lOiBzdHJpbmcsIGZvcm11bGE6IHN0cmluZywgbE9iamVjdFRva2VuczogYW55KTogc3RyaW5nIHtcclxuXHRcdGlmICghZm9ybXVsYSB8fCBmb3JtdWxhLmxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdHRocm93IHtcclxuXHRcdFx0XHRtZXNzYWdlOiAnTGEgZm9ybXVsYSBkZWwgdG9rZW4gJyArIHRva2VuTmFtZSArICcgZXN0YSB2YWPDrWEnLFxyXG5cdFx0XHRcdHRpdGxlOiAnQWxlcnRhIScsXHJcblx0XHRcdFx0ZXJyb3I6XHJcblx0XHRcdFx0XHQnTGEgZm9ybXVsYSBkZWwgdG9rZW4gJyArIHRva2VuTmFtZSArICcgZXN0YSB2YWPDrWEuIFtmb3JtdWxhWycgKyBmb3JtdWxhICsgJ11dJ1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0bGV0IHJlcGxhY2VkVG9rZW5zOiBzdHJpbmcgPSBmb3JtdWxhLnRvU3RyaW5nKCk7XHJcblx0XHRpZiAocmVwbGFjZWRUb2tlbnMuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XHJcblx0XHRcdHJldHVybiByZXBsYWNlZFRva2VucztcclxuXHRcdH1cclxuXHRcdC8vIEZpbmQgdGhlIHRva2VucyBpbiB0aGUgZm9ybXVsYVxyXG5cdFx0bGV0IHRva2Vuc0FycmF5OiBhbnlbXSA9IHRoaXMuZ2V0TGlzdFRva2Vuc0J5U3RyaW5nKHJlcGxhY2VkVG9rZW5zKTtcclxuXHRcdGlmICh0b2tlbnNBcnJheS5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gcmVwbGFjZWRUb2tlbnM7XHJcblx0XHR9XHJcblx0XHQvLyBJZiB0aGVyZSBhbnkgdG9rZW4sIHRyeSB0byByZXBsYWNlXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vuc0FycmF5Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGxldCBvYmplY3RUb2tlbiA9XHJcblx0XHRcdFx0bE9iamVjdFRva2Vuc1t0b2tlbnNBcnJheVtpXS5rZXldICE9PSB1bmRlZmluZWRcclxuXHRcdFx0XHRcdD8gbE9iamVjdFRva2Vuc1t0b2tlbnNBcnJheVtpXS5rZXldXHJcblx0XHRcdFx0XHQ6IG51bGw7XHJcblx0XHRcdGxldCBjbGVhcktleTtcclxuXHRcdFx0aWYgKG9iamVjdFRva2VuID09IG51bGwpIHtcclxuXHRcdFx0XHRjbGVhcktleSA9IHRva2Vuc0FycmF5W2ldLmtleS5yZXBsYWNlKCckeycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0b2JqZWN0VG9rZW4gPVxyXG5cdFx0XHRcdFx0bE9iamVjdFRva2Vuc1tjbGVhcktleV0gIT09IHVuZGVmaW5lZCA/IGxPYmplY3RUb2tlbnNbY2xlYXJLZXldIDogbnVsbDtcclxuXHJcblx0XHRcdFx0aWYgKG9iamVjdFRva2VuID09IG51bGwpIHtcclxuXHRcdFx0XHRcdGNsZWFyS2V5ID0gdG9rZW5zQXJyYXlbaV0ua2V5XHJcblx0XHRcdFx0XHRcdC5yZXBsYWNlKCd7JywgJycpXHJcblx0XHRcdFx0XHRcdC5yZXBsYWNlKCd9JywgJycpXHJcblx0XHRcdFx0XHRcdC5zcGxpdCgnXycpWzFdXHJcblx0XHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0b2JqZWN0VG9rZW4gPVxyXG5cdFx0XHRcdFx0XHRsT2JqZWN0VG9rZW5zW2NsZWFyS2V5XSAhPT0gdW5kZWZpbmVkID8gbE9iamVjdFRva2Vuc1tjbGVhcktleV0gOiBudWxsO1xyXG5cdFx0XHRcdFx0aWYgKG9iamVjdFRva2VuID09PSBudWxsIHx8IG9iamVjdFRva2VuID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyYXlLZXkgPSB0b2tlbnNBcnJheVtpXS5rZXlcclxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZSgneycsICcnKVxyXG5cdFx0XHRcdFx0XHRcdC5yZXBsYWNlKCd9JywgJycpXHJcblx0XHRcdFx0XHRcdFx0LnNwbGl0KCdfJylbMV1cclxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoJy4nKTtcclxuXHRcdFx0XHRcdFx0aWYgKGFycmF5S2V5Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgdmFsdWUgPSBsT2JqZWN0VG9rZW5zO1xyXG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUtleS5sZW5ndGg7IGluZGV4KyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBlbGVtZW50ID0gYXJyYXlLZXlbaW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGluZGV4ID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbZWxlbWVudF07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdG9iamVjdFRva2VuID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG9iamVjdFRva2VuID09IG51bGwpIHtcclxuXHRcdFx0XHQvLyBJZiBub3QgZmluZCB0aGUgdG9rZW4sIGJ5IGRlZmF1bHQgcHV0IGFuIGVtcHR5IHN0cmluZ1xyXG5cdFx0XHRcdC8qaWYgKFRva2VuU2VydmljZS5leGNsdWRlZFRva2VuLmluZGV4T2YoY2xlYXJLZXkpID09PSAtMSkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcclxuXHRcdFx0XHRcdFx0J0VsIHRva2VuICcgKyB0b2tlbnNBcnJheVtpXS52YWx1ZSArICcgbm8gZnVlIGVuY29udHJhZG8uJyxcclxuXHRcdFx0XHRcdFx0bE9iamVjdFRva2VucyxcclxuXHRcdFx0XHRcdFx0dG9rZW5zQXJyYXlcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fSovXHJcblx0XHRcdFx0b2JqZWN0VG9rZW4gPSAnJztcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAob2JqZWN0VG9rZW4gIT0gbnVsbCkge1xyXG5cdFx0XHRcdGxldCB2YWx1ZTogYW55ID0gTnVtYmVyKG9iamVjdFRva2VuKVxyXG5cdFx0XHRcdFx0PyBvYmplY3RUb2tlblxyXG5cdFx0XHRcdFx0OiBBcnJheS5pc0FycmF5KG9iamVjdFRva2VuKVxyXG5cdFx0XHRcdFx0PyBKU09OLnN0cmluZ2lmeShvYmplY3RUb2tlbilcclxuXHRcdFx0XHRcdDogXCInXCIgKyBvYmplY3RUb2tlbiArIFwiJ1wiO1xyXG5cdFx0XHRcdHJlcGxhY2VkVG9rZW5zID0gdGhpcy5yZXBsYWNlVG9rZW4ocmVwbGFjZWRUb2tlbnMsIHRva2Vuc0FycmF5W2ldLnZhbHVlLCB2YWx1ZSk7XHJcblx0XHRcdFx0Ly8gfSBlbHNlIHtcclxuXHRcdFx0XHQvLyAgIGNvbnNvbGUuZXJyb3IobE9iamVjdFRva2VucywgdG9rZW5zQXJyYXkpO1xyXG5cdFx0XHRcdC8vICAgdGhyb3cge1xyXG5cdFx0XHRcdC8vICAgICBtZXNzYWdlOiBcIk5vIHNlIGVuY29udHLDsyB2YWxvciBwYXJhIHVuIHRva2VuXCIsXHJcblx0XHRcdFx0Ly8gICAgIHRpdGxlOiBcIkFsZXJ0YSFcIixcclxuXHRcdFx0XHQvLyAgICAgZXJyb3I6IFwiRWwgdG9rZW4gXCIgKyB0b2tlbnNBcnJheVtpXS52YWx1ZSArIFwiIG5vIGZ1ZSBlbmNvbnRyYWRvLlwiXHJcblx0XHRcdFx0Ly8gICB9O1xyXG5cdFx0XHRcdC8vXHJcblx0XHRcdFx0Ly8gU2kgZXMgbGEgdWx0aW1hIGl0ZXJhY2lvbiB5IGxhIGZvcm11bGEgdGllbmUgWyBlcyBwb3JxdWUgdGllbmUgdW4gYXJyYXkgZW4gZWwgdmFsb3IgcXVlIHJlc29sdmlvIGVsIHRva2VuXHJcblx0XHRcdFx0aWYgKGkgPT0gdG9rZW5zQXJyYXkubGVuZ3RoIC0gMSAmJiByZXBsYWNlZFRva2Vucy5pbmNsdWRlcygnWycpKSB7XHJcblx0XHRcdFx0XHQvLyBTZSBwb25lbiB0b2RvcyBsb3Mgb3BlcmFuZG9zIGNvbW8gZWxlbWVudG9zIGVuIHVuIGFycmF5IFsnZXhwcmVzaW9uIGEnLCAnJiYnLCAnRXhwcmVzaW9uIEInXVxyXG5cdFx0XHRcdFx0bGV0IGZvcm1FeHByZXNzaW9uczogc3RyaW5nW10gPSByZXBsYWNlZFRva2Vucy5zcGxpdCgvIChcXHxcXHx8JiYpIC8pO1xyXG5cdFx0XHRcdFx0bGV0IGxBdXhmb3JtRXhwcmVzc2lvbjogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0XHRcdGZvcm1FeHByZXNzaW9ucy5mb3JFYWNoKChleHByZXNzaW9uOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGV4cHJlc3Npb24uY2hhckF0KDApID09ICdbJykge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBpc1RhZ0ZvdW5kOiBzdHJpbmcgPSAnJztcclxuXHRcdFx0XHRcdFx0XHRpc1RhZ0ZvdW5kID0gdGhpcy5maW5kVGFnKGV4cHJlc3Npb24pO1xyXG5cdFx0XHRcdFx0XHRcdGxBdXhmb3JtRXhwcmVzc2lvbi5wdXNoKGlzVGFnRm91bmQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGxBdXhmb3JtRXhwcmVzc2lvbi5wdXNoKGV4cHJlc3Npb24pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJlcGxhY2VkVG9rZW5zID0gbEF1eGZvcm1FeHByZXNzaW9uLmpvaW4oJyAnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiByZXBsYWNlZFRva2VucztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1FdG9kbyBxdWUgdGVuaWVuZG8gdW5hIGV4cHJlc2lvbiBkZSBsYSBmb3JtYSBbJ3RhZzEnLCAndGFnMiddPT10YWczXHJcblx0ICogZXZhbHVhIHNpIHRhZzMgaGFjZSBwYXJ0ZSBkZWwgYXJyYXkgc2kgdGllbmUgZWwgb3BlcmFkb3IgPT0uXHJcblx0ICogU2kgdGllbmUgZWwgb3BlcmFkb3IgIT0gZXhhbWluYSBxdWUgdGFnMyBubyBoYWdhIHBhcnRlIGRlbCBhcnJheStcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBleHByZXNzaW9uIE9wZXJhbmRvIHF1ZSBldmFsdWEgdGFnLiBFcyBkZSBsYSBmb3JtYSBbJ3RhZzEnLCAndGFnMiddPT10YWczXHJcblx0ICogQHJldHVybnMgUmV0b3JuYSAndHJ1ZScgbyAnZmFsc2UnIGVuIHN0cmluZyBxdWUgZGVzcHVlcyBzZXJhIHBhc2FkbyBhIHVuIGV2YWwoKVxyXG5cdCAqIG1hcyBhZGVsYW50ZSBlbiBlbCBmbHVqb1xyXG5cdCAqL1xyXG5cdGZpbmRUYWcoZXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRcdGxldCByZWdleE9wZXJhdG9yID0gbmV3IFJlZ0V4cCgnKD09PXw9PXwhPT18IT0pJyk7XHJcblx0XHQvLyBSZXRvcm5hIGVsIG9wZXJhZG9yXHJcblx0XHRsZXQgb3BlcmF0b3I6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5tYXRjaChyZWdleE9wZXJhdG9yKTtcclxuXHRcdC8vIFNpIG5vIGVuY3VlbnRyYSB1biBvcGVyYWRvciBzZWd1biBlbCBwYXRyb24gcmV0b3JuYSAnZmFsc2UnXHJcblx0XHQvLyBwYXJhIGV2aXRhciByZXN1bHRhZG9zIGluZXNwZXJhZG9zXHJcblx0XHRpZiAob3BlcmF0b3IgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRybyB1biBvcGVyYWRvciBwZXJtaXRpZG8gcGFyYSBsYSBleHByZXNpb24nKTtcclxuXHRcdFx0cmV0dXJuICdmYWxzZSc7XHJcblx0XHR9XHJcblx0XHQvLyBTZXBhcmEgbGEgc2VudGVuY2lhIHBvciBlbCBvcGVyYWRvclxyXG5cdFx0Ly8gTGEgcHJpbWVyYSBwYXJ0ZSBlcyBlbCB2YWxvciBwb3IgZWwgY3VhbCBzZSByZW1wbGF6YSBlbCB0b2tlbiBxdWUgZXMgdW4gYXJyYXkgZW4gc3RyaW5nIFwiWydhJywgJ2InXVwiXHJcblx0XHQvLyBFbCBzZWd1bmRvIGVzIGVsIHZhbG9yIGNvbiBlbCBjdWFsIHNlIHZhIGEgY29tcGFyYXJcclxuXHRcdGxldCB2YWx1ZVRva2VuLCB2YWx1ZVRvQ29tcGFyZTtcclxuXHRcdFt2YWx1ZVRva2VuLCB2YWx1ZVRvQ29tcGFyZV0gPSBleHByZXNzaW9uLnNwbGl0KG9wZXJhdG9yWzBdKTtcclxuXHRcdC8vIFNlIGxpbXBpYSBlbCBzdHJpbmcgY29ycmVzcG9uZGllbnRlIGFsIGFycmF5IHBhcmEgcXVlIGxvcyBlbGVtZW50b3MgcXVlZGVuIHNlcGFyYWRvcyBwb3IgXCIsXCJcclxuXHRcdHZhbHVlVG9rZW4gPSB2YWx1ZVRva2VuLnJlcGxhY2UoL1teYS16QS1aMC05ICxdL2csICcnKTtcclxuXHRcdC8vIFNpIG5vIGhheSB0YWdzIGFzb2NpYWRvcyBhbCByZWdpc3RybyBzZSBkZXZ1ZWx2ZSAnZmFsc2UnXHJcblx0XHRpZiAoIXZhbHVlVG9rZW4pIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignTm8gaGF5IHRhZ3MgYXNvY2lhZG9zIGEgZXN0YSBhcGxpY2FjacOzbicpO1xyXG5cdFx0XHRyZXR1cm4gJ2ZhbHNlJztcclxuXHRcdH1cclxuXHRcdC8vIFNlIGxpbXBpYSBlbCBzdHJpbmcgY29ycmVzcG9uZGllbnRlIGFsIHZhbG9yIHBvciBjb21wYXJhclxyXG5cdFx0dmFsdWVUb0NvbXBhcmUgPSB2YWx1ZVRvQ29tcGFyZS5yZXBsYWNlKC9bXmEtekEtWjAtOSBdL2csICcnKTtcclxuXHRcdC8vIEVsIHN0cmluZyBjb3JyZXNwb25kaWVudGUgYWwgYXJyYXkgcGFzYSBhIHNlciB0aXBvIGFycmF5XHJcblx0XHR2YWx1ZVRva2VuID0gdmFsdWVUb2tlbi5zcGxpdCgnLCcpO1xyXG5cclxuXHRcdC8vIFNlIHRyYXRhIGRlIGNvbnN0YXRhciBzaSBlbCB2YWxvciBhIGNvbXBhcmFyIHNlIGVuY3VldHJhIG8gbm8gZGVudHJvXHJcblx0XHQvLyBTaSBlbCBvcGVyYWRvciBxdWUgc2UgZW5jb250cm8gPT0gcmV0dXJuYSB0cnVlIHNpIGxvIGVuY3VlbnRyYVxyXG5cdFx0bGV0IGlzVGFnRm91bmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdFx0c3dpdGNoIChvcGVyYXRvclswXSkge1xyXG5cdFx0XHRjYXNlICc9PSc6XHJcblx0XHRcdFx0aXNUYWdGb3VuZCA9IHZhbHVlVG9rZW4uc29tZSgodGFnKSA9PiB0YWcgPT0gdmFsdWVUb0NvbXBhcmUpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICc9PT0nOlxyXG5cdFx0XHRcdGlzVGFnRm91bmQgPSB2YWx1ZVRva2VuLnNvbWUoKHRhZykgPT4gdGFnID09PSB2YWx1ZVRvQ29tcGFyZSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJyE9PSc6XHJcblx0XHRcdFx0aXNUYWdGb3VuZCA9IHZhbHVlVG9rZW4uc29tZSgodGFnKSA9PiB0YWcgIT09IHZhbHVlVG9Db21wYXJlKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnIT0nOlxyXG5cdFx0XHRcdGlzVGFnRm91bmQgPSB2YWx1ZVRva2VuLnNvbWUoKHRhZykgPT4gdGFnICE9IHZhbHVlVG9Db21wYXJlKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHRcdGV4cHJlc3Npb24gPSBpc1RhZ0ZvdW5kID8gJ3RydWUnIDogJ2ZhbHNlJztcclxuXHRcdHJldHVybiBleHByZXNzaW9uO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVHJ5IHRvIGV2YWwgdGhlIGZvcm11bGEgZGVwZW5kIG9mIHRoZSB0eXBlIG9mIGZpZWxkcy5cclxuXHQgKiBAcGFyYW0gbFN0YXRpY1Rva2VuXHJcblx0ICogQHBhcmFtIGZvcm11bGFOYW1lXHJcblx0ICogQHBhcmFtIGZvcm11bGFcclxuXHQgKi9cclxuXHR2YWxpZGF0ZUZvcm11bGEobFN0YXRpY1Rva2VuOiBhbnksIGZvcm11bGFOYW1lOiBzdHJpbmcsIGZvcm11bGE6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0bGV0IGV2YWxGb3JtdWxhOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHQvLyBUbyB2YWxpZGF0ZSB0aGUgZm9ybXVsYSwgZmlyc3Qgb3JnYW5pemUgdGhlIGluZm8gdG8ga2V5IC0gdmFsdWUgYXJyYXlcclxuXHRcdGxldCBvYmplY3RUb2tlbnM6IGFueVtdID0gW107XHJcblx0XHRmb3IgKGxldCBwYW5lbCBvZiBsU3RhdGljVG9rZW4pIHtcclxuXHRcdFx0Zm9yIChsZXQgZ3JvdXBUb2tlbiBvZiBwYW5lbC52YWx1ZSkge1xyXG5cdFx0XHRcdGZvciAobGV0IHN0YXRpY1Rva2VuIG9mIGdyb3VwVG9rZW4udmFsdWUpIHtcclxuXHRcdFx0XHRcdGZvciAobGV0IGFycmF5VG9rZW5JbmZvIG9mIHN0YXRpY1Rva2VuKSB7XHJcblx0XHRcdFx0XHRcdG9iamVjdFRva2Vuc1thcnJheVRva2VuSW5mby5rZXldID0gYXJyYXlUb2tlbkluZm8ub2JqZWN0XHJcblx0XHRcdFx0XHRcdFx0PyBhcnJheVRva2VuSW5mby5vYmplY3QudHlwZSA9PSAnbnVtYmVyJ1xyXG5cdFx0XHRcdFx0XHRcdFx0PyAnMCdcclxuXHRcdFx0XHRcdFx0XHRcdDogJydcclxuXHRcdFx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Zm9ybXVsYSA9IHRoaXMucmVwbGFjZVRva2Vuc0Zyb21MaXN0T2JqZWN0KGZvcm11bGFOYW1lLCBmb3JtdWxhLCBvYmplY3RUb2tlbnMpO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHRcdFx0dGhyb3cgZXJyb3I7XHJcblx0XHR9XHJcblx0XHRpZiAoZm9ybXVsYSAhPT0gbnVsbCkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGxldCByZXN1bHQgPSBmb3JtdWxhLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSA/IGZvcm11bGEgOiBldmFsKGZvcm11bGEpO1xyXG5cdFx0XHRcdGV2YWxGb3JtdWxhID0gdHJ1ZTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdC8vY29uc29sZS5lcnJvcihcIkVycm9yIGV2YWx1YXRpbmcgdGhlIGZvcm11bGFcIiwgZSk7XHJcblx0XHRcdFx0dGhyb3cge1xyXG5cdFx0XHRcdFx0bWVzc2FnZTogJ0xhIGZvcm11bGEgbm8gZnVlIHBvc2libGUgZXZhbHVhcicsXHJcblx0XHRcdFx0XHR0aXRsZTogJ0FsZXJ0YSEnLFxyXG5cdFx0XHRcdFx0ZXJyb3I6IGVcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZXZhbEZvcm11bGE7XHJcblx0fVxyXG5cclxuXHRnZXRDb25maWdDbG9uaW5nVG9rZW5NYXAob2xkUFBQOiBudW1iZXIsIG5ld1BQUDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG5cdFx0XHR0aGlzLmVudmlyb25tZW50Lmhvc3QuYmFja2VuZC5jb25maWd1cmF0aW9uICsgJ3Rva2VuL2dldENvbmZpZ0Nsb25pbmdUb2tlbk1hcCcsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKClcclxuXHRcdFx0XHRcdC5zZXQoJ29sZFBQUCcsIG9sZFBQUC50b1N0cmluZygpKVxyXG5cdFx0XHRcdFx0LnNldCgnbmV3UFBQJywgbmV3UFBQLnRvU3RyaW5nKCkpXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiJdfQ==
|
|
1332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvc2VydmljZXMvdG9rZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUErQixVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQU1sRCxNQUFNLE9BQU8sWUFBWTtJQW9XeEIsWUFDZ0MsV0FBVyxFQUNsQyxVQUFzQixFQUN0QixXQUF3QixFQUN4QixZQUEwQjtRQUhILGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7SUFDaEMsQ0FBQztJQUVKLGlGQUFpRjtJQUNqRix1QkFBdUIsQ0FBQyxVQUFVO1FBQ2pDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEMsMEJBQTBCO1lBQzFCLElBQUksZ0JBQWdCLEdBQVUsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDdEQsSUFBSSxFQUFFLENBQUMsVUFBZSxFQUFFLEVBQUU7b0JBQ3pCLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzFCLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVSxFQUFFOzRCQUMvQixJQUFJLFVBQVUs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UUFDQyxHQUFHLEVBQUUsWUFBWSxDQUFDLHdCQUF3QjtRQUMxQyxLQUFLLEVBQUUscUJBQXFCO0tBQzVCO0lBQ0Q7UUFDQyxHQUFHLEVBQUUsWUFBWSxDQUFDLHlDQUF5QztRQUMzRCxLQUFLLEVBQUUsK0NBQStDO0tBQ3REO0lBQ0Q7UUFDQyxHQUFHLEVBQUUsWUFBWSxDQUFDLGtEQUFrRDtRQUNwRSxLQUFLLEVBQUUsNkNBQTZDO0tBQ3BEO0lBQ0Q7UUFDQyxHQUFHLEVBQUUsWUFBWSxDQUFDLHFCQUFxQjtRQUN2QyxLQUFLLEVBQUUsZ0JBQWdCO0tBQ3ZCO0lBQ0QsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLCtCQUErQixFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRTtJQUNyRjtRQUNDLEdBQUcsRUFBRSxZQUFZLENBQUMsb0NBQW9DO1FBQ3RELEtBQUssRUFBRSx5QkFBeUI7S0FDaEM7SUFDRDtRQUNDLEdBQUcsRUFBRSxZQUFZLENBQUMsNENBQTRDO1FBQzlELEtBQUssRUFBRSxrQ0FBa0M7S0FDekM7Q0FDQSxDQUFBO0FBRUssMEJBQWEsR0FBRztJQUN0QixZQUFZLENBQUMsb0NBQW9DLENBQUMsV0FBVyxFQUFFO0lBQy9ELFlBQVksQ0FBQyx3Q0FBd0MsQ0FBQyxXQUFXLEVBQUU7SUFDbkUsWUFBWSxDQUFDLHNDQUFzQyxDQUFDLFdBQVcsRUFBRTtDQUNqRSxDQUFDO3lHQWxXVSxZQUFZLGtCQXFXZixhQUFhOzZHQXJXVixZQUFZLGNBRlosTUFBTTsyRkFFTixZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQjs7MEJBc1dFLE1BQU07MkJBQUMsYUFBYTswSEFoV0ksTUFBTTtzQkFBL0IsTUFBTTt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VycmVuY3lQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0ZVV0aWwsIEhFQURFUl9KU09OLCBQbGlDbmZHdWFyYW50ZWVUb2tlbiwgVG9rZW4sIFV0aWxTdHJpbmcgfSBmcm9tICduZy1wbGktdXRpbCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRm9ybWlvVXRpbCB9IGZyb20gJy4uL3V0aWxzL2Zvcm1pby11dGlsJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuL2Zvcm0uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2tlblNlcnZpY2Uge1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTSUdOX0xFVFRFUl9UQUdfSUQ6IHN0cmluZyA9ICdfc2lnbi1sZXR0ZXItdGFnLWlkJztcclxuXHJcblx0LyoqICovXHJcblx0QEluamVjdChMT0NBTEVfSUQpIHB1YmxpYyBsb2NhbGU6IHN0cmluZztcclxuXHJcblx0LyoqICovXHJcblx0c3RhdGljIFRPS0VOX0xBQkVMX0ZPUk06IHN0cmluZyA9ICdGcm0nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9CVURHRVQ6IHN0cmluZyA9ICdQcmVzdXB1ZXN0byc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFRPS0VOX0xBQkVMX0NBTENVTEFURUQ6IHN0cmluZyA9ICdDYWxjdWxhZG8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9TTkFQU0hPVDogc3RyaW5nID0gJ1NuYXBzaG90JztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgVE9LRU5fTEFCRUxfU1RBVElDOiBzdHJpbmcgPSAnRXN0w6F0aWNvJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgVE9LRU5fTEFCRUxfRE9DVU1FTlRPOiBzdHJpbmcgPSAnRG9jdW1lbnRvJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgVE9LRU5fTEFCRUxfRE9DVU1FTlRPX0FOQUxJU0lTX0FVVE9NQVRJQ086IHN0cmluZyA9ICdBbsOhbGlzaXMgYXV0b23DoXRpY28gZGUgZG9jdW1lbnRvcyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFRPS0VOX0RPQ1VNRU5UT19BTkFMWVNJU19UWVBFOiBzdHJpbmcgPSAnZG9jdW1lbnRfYW5hbHlzaXMnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9UQVNLOiBzdHJpbmcgPSAnVGFyZWEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9UQVNLTDogc3RyaW5nID0gJ3Rhc2snO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBUT0tFTl9MQUJFTF9HVUFSQU5URUU6IHN0cmluZyA9ICdHYXJhbnRpYSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfS0VZX1RPVEFMX0FNT1VOVDogc3RyaW5nID0gJ3RvdGFsQW1vdW50JztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9BTU9VTlQ6IHN0cmluZyA9ICdhcHBsaWNhdGlvblRvdGFsJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9PV05fRk9VTkRTOiBzdHJpbmcgPSAnYXBwbGljYXRpb25Pd25Gb3VuZHMnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBCVURHRVRfVE9LRU5TX0tFWV9BUFBMSUNBVElPTl9QUk9DRVNTX1RPVEFMX0ZJTkFOQ0lORzogc3RyaW5nID0gJ2FwcGxpY2F0aW9uRmluYW5jaW5nJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfQU1PVU5UOiBzdHJpbmcgPSAnbGVnYWxpemF0aW9uVG90YWwnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBCVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9PV05fRk9VTkRTOiBzdHJpbmcgPVxyXG5cdFx0J2xlZ2FsaXphdGlvbk93bkZvdW5kcyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfS0VZX0xFR0FMSVpBVElPTl9QUk9DRVNTX1RPVEFMX0ZJTkFOQ0lORzogc3RyaW5nID0gJ2xlZ2FsaXphdGlvbkZpbmFuY2luZyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfS0VZX0lOU1VSQU5DRV9BTU9VTlQ6IHN0cmluZyA9ICdpbnN1cmFuY2VBbW91bnQnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBMRUdBTElaQVRJT05fT1JfQVBQTElDQVRJT05fVE9UQUxfRklOQU5DSU5HOiBzdHJpbmcgPVxyXG5cdFx0J2xlZ2xpemF0aW9uT3JBcHBsaWNhdGlvblRvdGFsRmluYW5jaW5nJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgQlVER0VUX1RPS0VOU19LRVlfUkVTVU1FX0NBVEVHT1JZX1lFQVI6IHN0cmluZyA9ICdyZXN1bWVDYXRlZ29yeVllYXInO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBCVURHRVRfVE9LRU5TX0tFWV9GRUNIQV9GSU5BTkNJTkdfU1RBUlQ6IHN0cmluZyA9ICdmZWNoYUluaWNpb0ZpbmFuY2lhY2lvbic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfS0VZX0ZFQ0hBX0ZJTkFOQ0lOR19FTkQ6IHN0cmluZyA9ICdmZWNoYUZpbkZpbmFuY2lhY2lvbic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIEJVREdFVF9UT0tFTlNfRFVSQVRJT05fU1RVRElFUzogc3RyaW5nID0gJ2R1cmFjaW9uRXN0dWRpb3MnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBCVURHRVRfVE9LRU5TX0ZJTkFOQ0lOR19EVVJBVElPTjogc3RyaW5nID0gJ2R1cmFjaW9uRmluYW5jaWFjaW9uJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19LRVlfQ09ESUdPX1ZFUklGSUNBQ0lPTjogc3RyaW5nID0gJ2NvZGlnb1ZlcmlmaWNhY2lvbic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX0FfUVVJRU5fVkFfRElSSUdJRE86IHN0cmluZyA9ICdhUXVpZW5WYURpcmlnaWRvJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19LRVlfRkVDSEFfQUNUVUFMOiBzdHJpbmcgPSAnZmVjaGFBY3R1YWwnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9TVEFUVVNfTkFNRTogc3RyaW5nID0gJ3N0YXR1c05hbWUnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QQVRST0NJTkFET1I6IHN0cmluZyA9ICdwbGlQYXRyb2NpbmFkb3InO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QQVRST0NJTkFET1JfQ09SVE86IHN0cmluZyA9ICdwbGlQYXRyb2NpbmFkb3JDb3J0byc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX1BST0dSQU1BOiBzdHJpbmcgPSAncGxpUHJvZ3JhbWEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QUk9HUkFNQV9DT1JUTzogc3RyaW5nID0gJ3BsaVByb2dyYW1hQ29ydG8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QUk9NT0NJT046IHN0cmluZyA9ICdwbGlQcm9tb2Npb24nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9QUk9NT0NJT05fQ09SVE86IHN0cmluZyA9ICdwbGlQcm9tb2Npb25Db3J0byc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX0FOSU9fUFJPTU9DSU9OOiBzdHJpbmcgPSAnYW5pb1Byb21vY2lvbic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX0lTT19NT05FREFfQkFTRTogc3RyaW5nID0gJ2lzb01vbmVkYUJhc2UnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9TQUxVRE9fQ09NUExFTUVOVEFSSU86IHN0cmluZyA9ICdzYWx1ZG9Db21wbGVtZW50YXJpbyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfS0VZX05VTUJFUl9BUFBMSUNBVElPTjogc3RyaW5nID0gJ251bWVyb1JhZGljYWRvJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19LRVlfVVNFUl9JTklUSUFMUzogc3RyaW5nID0gJ2luaWNpYWxlc1VzdWFyaW8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0tFWV9MRVRURVJfU0lHTjogc3RyaW5nID0gJ2Zpcm1hQ2FydGEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9OQU1FOiBzdHJpbmcgPSAnY29taXRlTm9tYnJlJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19DT01NSVRURUVfU0VHTUVOVEFUSU9OOiBzdHJpbmcgPSAnY29taXRlU2VnbWVudGFjaW9uJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19DT01NSVRURUVfQUdHUlVQQVRJT046IHN0cmluZyA9ICdjb21pdGVBZ3J1cGFjaW9uJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19DT01NSVRURUVfQ1VUTElORV9EQVRFOiBzdHJpbmcgPSAnY29taXRlRmVjaGFMaW5lYSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ORklSTV9MRUdBTElaQVRJT05fQVBQT0lOVE1FTlQ6IHN0cmluZyA9ICdjb25maXJtYWNpb25DaXRhJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19DT0RFQlRPUl9ET0NVTUVOVF9OVU1CRVI6IHN0cmluZyA9ICdudW1lcm9Eb2N1bWVudG9Db2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfRE9DVU1FTlRfVFlQRTogc3RyaW5nID0gJ3RpcG9Eb2N1bWVudG9Db2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfTkFNRTogc3RyaW5nID0gJ25vbWJyZXNDb2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfTEFTVE5BTUU6IHN0cmluZyA9ICdhcGVsbGlkb3NDb2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfVFlQRV9DT0RFQlRPUjogc3RyaW5nID0gJ3RpcG9QZXJzb25hQ29kZXVkb3InO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0NPREVCVE9SX1JFVklFV0VSOiBzdHJpbmcgPSAncmV2aXNvckNvZGV1ZG9yZXMnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX1RPVEFMX1dFSUdIVEVEOiBzdHJpbmcgPSAncG9uZGVyYWRvVG90YWwnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0NPTlNFQ1VUSVZFX0dVQVJBTlRFRTogc3RyaW5nID0gJ2NvbnNlY3V0aXZvR2FyYW50aWFzJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19EQVk6IHN0cmluZyA9ICdkaWEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX01PTlRIOiBzdHJpbmcgPSAnbWVzJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19ZRUFSOiBzdHJpbmcgPSAnYW5vJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOU19SRVBSRVNFTlRBVElWRV9OQU1FOiBzdHJpbmcgPSAnbm9tYnJlc1JlcHJlc2VudGFudGUnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX1JFUFJFU0VOVEFUSVZFX0xBU1ROQU1FOiBzdHJpbmcgPSAnYXBlbGxpZG9zUmVwcmVzZW50YW50ZSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfUkVQUkVTRU5UQVRJVkVfRE9DVU1FTlRfTlVNQkVSOiBzdHJpbmcgPSAnY2VkdWxhUmVwcmVzZW50YW50ZSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ0lUWV9TSUdOQVRVUkU6IHN0cmluZyA9ICdjaXVkYWRGaXJtYSc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfVVNFUl9UWVBFX0NSRURJVF9TVFVEWTogc3RyaW5nID0gJ3RpcG9Vc3VhcmlvRXN0dWRpb0NyZWRpdG8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0NPREVCVE9SX1ZFSElDTEVTX1FVQU5USVRZOiBzdHJpbmcgPSAnY2FudGlkYWRWZWhpY3Vsb3NDb2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfQVNTRVRTX1FVQU5USVRZOiBzdHJpbmcgPSAnY2FudGlkYWRCaWVuZXNDb2RldWRvcic7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfTElTVF9DT0RFQlRPUlM6IHN0cmluZyA9ICdsaXN0YUNvZGV1ZG9yZXMnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5fSU5HUkVTT19DT0RFVURPUl9IQUJFQVNfREFUQTogc3RyaW5nID0gJ2luZ3Jlc29Db2RldWRvckhhYmVhc0RhdGEnO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5fUERGX1JFU1VNRU5fQ09ERVVET1I6IHN0cmluZyA9ICdwZGZSZXN1bWVuQ29kZXVkb3InO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX1FVQU5USVRZX1ZFSElDTEVfQkVORUZJQ0lBUlk6IHN0cmluZyA9ICdjYW50aWRhZFZlaGljdWxvc1NlbGVjY2lvbmFkbyc7XHJcblx0LyoqICovXHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTlNfUVVBTlRJVFlfQVNTRVRTX0JFTkVGSUNJQVJZOiBzdHJpbmcgPSAnY2FudGlkYWRCaWVuZXNTZWxlY2Npb25hZG8nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5TX0JFTl9DT0RJR086IHN0cmluZyA9ICdiZW5Db2RpZ28nO1xyXG5cdC8qKiAqL1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5fQ1JFRElUX1JFVklFV0VSX09CU0VSVkFUSU9OU19DT0RFQlRPUjogc3RyaW5nID1cclxuXHRcdCdjcmVkaXRSZXZpZXdlck9ic2VydmF0aW9uc0NvZGVidG9yJztcclxuXHQvKiogKi9cclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOX0NSRURJVF9SRVZJRVdFUl9PQlNFUlZBVElPTlM6IHN0cmluZyA9ICdjcmVkaXRSZXZpZXdlck9ic2VydmF0aW9ucyc7XHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTl9UQUdfTkFNRTogc3RyaW5nID0gJ3RhZ05hbWUnO1xyXG5cdHN0YXRpYyBTVEFUSUNfVE9LRU5fTkFNRV9SRVZJRVdFUl9UQVNLID0gJ25hbWVSZXZpd2VyVGFzayc7XHJcblx0c3RhdGljIFNUQVRJQ19UT0tFTl9MQVNUX05BTUVfUkVWSUVXRVJfVEFTSyA9ICdsYXN0TmFtZVJldml3ZXJUYXNrJztcclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOX1RBU0tfVE9UQUxfQVNTSUdORURfVE9fUkVWSUVXRVIgPSAndGFza1RvdGFsQXNzaWduZWRUb1Jldmlld2VyJztcclxuXHRzdGF0aWMgU1RBVElDX1RPS0VOUzogYW55W10gPSBbXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX1BBVFJPQ0lOQURPUixcclxuXHRcdFx0bGFiZWw6ICdQYXRyb2NpbmFkb3InXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9QUk9HUkFNQSxcclxuXHRcdFx0bGFiZWw6ICdQcm9ncmFtYSdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX1BST01PQ0lPTixcclxuXHRcdFx0bGFiZWw6ICdQcm9tb2Npw7NuJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfQU5JT19QUk9NT0NJT04sXHJcblx0XHRcdGxhYmVsOiAnQcOxbyBwcm9tb2Npw7NuJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfSVNPX01PTkVEQV9CQVNFLFxyXG5cdFx0XHRsYWJlbDogJ0lTTyBNb25lZGEgYmFzZSdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX1NBTFVET19DT01QTEVNRU5UQVJJTyxcclxuXHRcdFx0bGFiZWw6ICdTYWx1ZG8gY29tcGxlbWVudGFyaW8nXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9DT0RJR09fVkVSSUZJQ0FDSU9OLFxyXG5cdFx0XHRsYWJlbDogJ0PDs2RpZ28gZGUgdmVyaWZpY2FjacOzbidcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX0FfUVVJRU5fVkFfRElSSUdJRE8sXHJcblx0XHRcdGxhYmVsOiAnQSBxdWllbiB2YSBkaXJpZ2lkbydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX0ZFQ0hBX0FDVFVBTCxcclxuXHRcdFx0bGFiZWw6ICdGZWNoYSBhY3R1YWwnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9TVEFUVVNfTkFNRSxcclxuXHRcdFx0bGFiZWw6ICdFc3RhZG8gYWN0dWFsJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfTlVNQkVSX0FQUExJQ0FUSU9OLFxyXG5cdFx0XHRsYWJlbDogJ07Dum1lcm8gcmFkaWNhZG8nXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9VU0VSX0lOSVRJQUxTLFxyXG5cdFx0XHRsYWJlbDogJ0luaWNpYWxlcyBkZSB1c3VhcmlvJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfTEVUVEVSX1NJR04sXHJcblx0XHRcdGxhYmVsOiAnRmlybWEgZGUgY2FydGFzJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfTkFNRSxcclxuXHRcdFx0bGFiZWw6ICdOb21icmUgY29taXTDqSdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09NTUlUVEVFX1NFR01FTlRBVElPTixcclxuXHRcdFx0bGFiZWw6ICdTZWdtZW50YWNpw7NuIGNvbWl0w6knXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9BR0dSVVBBVElPTixcclxuXHRcdFx0bGFiZWw6ICdBZ3J1cGFjacOzbiBjb21pdMOpJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfQ1VUTElORV9EQVRFLFxyXG5cdFx0XHRsYWJlbDogJ0ZlY2hhIEzDrW5lYSBkZSBjb3J0ZSdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09ORklSTV9MRUdBTElaQVRJT05fQVBQT0lOVE1FTlQsXHJcblx0XHRcdGxhYmVsOiAnQ29uZmlybWFjacOzbiBkZSBjaXRhJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT0RFQlRPUl9ET0NVTUVOVF9OVU1CRVIsXHJcblx0XHRcdGxhYmVsOiAnTsO6bWVybyBkZSBkb2N1bWVudG8gZGUgY29kZXVkb3InXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPREVCVE9SX0RPQ1VNRU5UX1RZUEUsXHJcblx0XHRcdGxhYmVsOiAnVGlwbyBkZSBkb2N1bWVudG8gZGUgY29kZXVkb3InXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPREVCVE9SX05BTUUsXHJcblx0XHRcdGxhYmVsOiAnTm9tYnJlcyBjb2RldWRvcidcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfTEFTVE5BTUUsXHJcblx0XHRcdGxhYmVsOiAnQXBlbGxpZG9zIGNvZGV1ZG9yJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19UWVBFX0NPREVCVE9SLFxyXG5cdFx0XHRsYWJlbDogJ1RpcG8gZGUgcGVyc29uYSBjb2RldWRvcidcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfVkVISUNMRVNfUVVBTlRJVFksXHJcblx0XHRcdGxhYmVsOiAnQ2FudGlkYWQgdmVoaWN1bG9zIGNvZGV1ZG9yJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT0RFQlRPUl9BU1NFVFNfUVVBTlRJVFksXHJcblx0XHRcdGxhYmVsOiAnQ2FudGlkYWQgYmllbmVzIGNvZGV1ZG9yJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT0RFQlRPUl9SRVZJRVdFUixcclxuXHRcdFx0bGFiZWw6ICdSZXZpc29yIGRlIGNvZGV1ZG9yZXMnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1RPVEFMX1dFSUdIVEVELFxyXG5cdFx0XHRsYWJlbDogJ1BvbmRlcmFkbyB0b3RhbCdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09OU0VDVVRJVkVfR1VBUkFOVEVFLFxyXG5cdFx0XHRsYWJlbDogJ0NvbnNlY3V0aXZvIGRlIGdhcmFudGlhcydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfUkVQUkVTRU5UQVRJVkVfTkFNRSxcclxuXHRcdFx0bGFiZWw6ICdOb21icmVzIHJlcHJlc2VudGFudGUgbGVnYWwnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1JFUFJFU0VOVEFUSVZFX0xBU1ROQU1FLFxyXG5cdFx0XHRsYWJlbDogJ0FwZWxsaWRvcyByZXByZXNlbnRhbnRlIGxlZ2FsJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19SRVBSRVNFTlRBVElWRV9ET0NVTUVOVF9OVU1CRVIsXHJcblx0XHRcdGxhYmVsOiAnQ2VkdWxhIHJlcHJlc2VudGFudGUgbGVnYWwnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1VTRVJfVFlQRV9DUkVESVRfU1RVRFksXHJcblx0XHRcdGxhYmVsOiAnVGlwbyB1c3VhcmlvIGVzdHVkaW8gY3LDqWRpdG8nXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0RBWSxcclxuXHRcdFx0bGFiZWw6ICdEaWEnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX01PTlRILFxyXG5cdFx0XHRsYWJlbDogJ01lcydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfWUVBUixcclxuXHRcdFx0bGFiZWw6ICdBw7FvJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DSVRZX1NJR05BVFVSRSxcclxuXHRcdFx0bGFiZWw6ICdDaXVkYWQgZGUgbGEgZmlybWEnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0xJU1RfQ09ERUJUT1JTLFxyXG5cdFx0XHRsYWJlbDogJ0xpc3RhIGRlIGNvZGV1ZG9yZXMnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5fSU5HUkVTT19DT0RFVURPUl9IQUJFQVNfREFUQSxcclxuXHRcdFx0bGFiZWw6ICdJbmdyZXNvIENvZGV1ZG9yIEhhYmVhcyBEYXRhJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOX1BERl9SRVNVTUVOX0NPREVVRE9SLFxyXG5cdFx0XHRsYWJlbDogJ1BkZiBjb2RldWRvcidcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfUVVBTlRJVFlfVkVISUNMRV9CRU5FRklDSUFSWSxcclxuXHRcdFx0bGFiZWw6ICdDYW50aWRhZCBkZSB2ZWjDrWN1bG9zIGRlbCBzZWxlY2Npb25hZG8nXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1FVQU5USVRZX0FTU0VUU19CRU5FRklDSUFSWSxcclxuXHRcdFx0bGFiZWw6ICdDYW50aWRhZCBiaWVuZXMgZGVsIHNlbGVjY2lvbmFkbydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQkVOX0NPRElHTyxcclxuXHRcdFx0bGFiZWw6ICdDw7NkaWdvIGJlbmVmaWNpYXJpbydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTl9DUkVESVRfUkVWSUVXRVJfT0JTRVJWQVRJT05TLFxyXG5cdFx0XHRsYWJlbDogJ09ic2VydmFjaW9uZXMgcmV2aXNvciBmaW5hbmNpZXJvIHNlbGVjY2lvbmFkbydcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTl9DUkVESVRfUkVWSUVXRVJfT0JTRVJWQVRJT05TX0NPREVCVE9SLFxyXG5cdFx0XHRsYWJlbDogJ09ic2VydmFjaW9uZXMgcmV2aXNvciBmaW5hbmNpZXJvIGNvZGV1ZG9yZXMnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5fVEFHX05BTUUsXHJcblx0XHRcdGxhYmVsOiAnTm9tYnJlIGRlbCB0YWcnXHJcblx0XHR9LFxyXG5cdFx0eyBrZXk6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5fTkFNRV9SRVZJRVdFUl9UQVNLLCBsYWJlbDogJ05vbWJyZSByZXZpc29yIHRhcmVhcycgfSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOX0xBU1RfTkFNRV9SRVZJRVdFUl9UQVNLLFxyXG5cdFx0XHRsYWJlbDogJ0FwZWxsaWRvIHJldmlzb3IgdGFyZWFzJ1xyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOX1RBU0tfVE9UQUxfQVNTSUdORURfVE9fUkVWSUVXRVIsXHJcblx0XHRcdGxhYmVsOiAnVG90YWwgdGFyZWFzIGFzaWduYWRhcyBhIHJldmlzb3InXHJcblx0XHR9XHJcblx0XTtcclxuXHJcblx0c3RhdGljIGV4Y2x1ZGVkVG9rZW4gPSBbXHJcblx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19VU0VSX1RZUEVfQ1JFRElUX1NUVURZLnRvTG93ZXJDYXNlKCksXHJcblx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT0RFQlRPUl9WRUhJQ0xFU19RVUFOVElUWS50b0xvd2VyQ2FzZSgpLFxyXG5cdFx0VG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09ERUJUT1JfQVNTRVRTX1FVQU5USVRZLnRvTG93ZXJDYXNlKClcclxuXHRdO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudCxcclxuXHRcdHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuXHRcdHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjdXJyZW5jeVBpcGU6IEN1cnJlbmN5UGlwZVxyXG5cdCkge31cclxuXHJcblx0LyoqIFRoaXMgcHJvbWlzZSBhbGxvd3MgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gY29uc3VsdGluZyB0aGUgZm9ybSBmaWVsZHMuICovXHJcblx0Z2V0Rm9ybUZpZWxkc0J5UHJvbUNvZGUocHJvbUNvZGlnbyk6IFByb21pc2U8YW55W10+IHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdC8vIFNlYXJjaCB0aGUgZHluYW1pYyBmb3JtXHJcblx0XHRcdGxldCBsRm9ybUZpZWxkc1Rva2VuOiBhbnlbXSA9IG51bGw7XHJcblx0XHRcdHRoaXMuZm9ybVNlcnZpY2UuZ2V0QnlQcm9tQ29kaWdvKHByb21Db2RpZ28pLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKGFycmF5Rm9ybXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGFycmF5Rm9ybXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1zIG9mIGFycmF5Rm9ybXMpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgY29tcG9uZW50cyA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRjb21wb25lbnRzLnB1c2goLi4uRm9ybWlvVXRpbC5nZXRDb21wb25lbnRzKGZvcm1zLmNvbXBvbmVudHMpKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1zLmNvbXBvbmVudHMgJiYgZm9ybXMuY29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNvbXBvbmVudHMgb2YgZm9ybXMuY29tcG9uZW50cykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29tcG9uZW50cy5jb21wb25lbnRzICYmIGNvbXBvbmVudHMuY29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cy5jb21wb25lbnRzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY29tcG9uZW50LmNvbHVtbnMgJiYgY29tcG9uZW50LmNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNDb21wb25lbnRzIG9mIGNvbXBvbmVudC5jb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y0NvbXBvbmVudHMuY29tcG9uZW50cyAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y0NvbXBvbmVudHMuY29tcG9uZW50cy5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZXJhdG9yIG9mIGNDb21wb25lbnRzLmNvbXBvbmVudHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZXJhdG9yLnR5cGUgPT09ICdhZGRyZXNzJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBpdGVyYXRvci5jb21wb25lbnRzO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0bGV0IGZvcm06IGFueSA9IGFycmF5Rm9ybXM7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdCFmb3JtIHx8XHJcblx0XHRcdFx0XHRcdCFmb3JtWzBdIHx8XHJcblx0XHRcdFx0XHRcdCFmb3JtWzBdLnByb21Db2RpZ28gfHxcclxuXHRcdFx0XHRcdFx0Zm9ybVswXS5wcm9tQ29kaWdvICE9IHByb21Db2RpZ29cclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJzQwNCddKTtcclxuXHRcdFx0XHRcdFx0cmVzb2x2ZShsRm9ybUZpZWxkc1Rva2VuKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGxGb3JtRmllbGRzVG9rZW4gPSBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGZvcm1Db21wIG9mIGZvcm0pIHtcclxuXHRcdFx0XHRcdFx0bGV0IG5ld0NvbXBvbmVudHM6IGFueTtcclxuXHRcdFx0XHRcdFx0bGV0IGNvbXBvbmVudHM6IGFueVtdID0gW107XHJcblx0XHRcdFx0XHRcdGlmIChmb3JtQ29tcC5jb21wb25lbnRzKSB7XHJcblx0XHRcdFx0XHRcdFx0bmV3Q29tcG9uZW50cyA9IGZvcm1Db21wLmNvbXBvbmVudHM7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZm9ybUNvbXAuY29sdW1ucykge1xyXG5cdFx0XHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb2x1bW5zO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChuZXdDb21wb25lbnRzICYmIFV0aWxTdHJpbmcuaXNWYWxpZChmb3JtQ29tcC50aXRsZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRsRm9ybUZpZWxkc1Rva2VuLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuZ2V0S2V5Rm9ybXVsYXJpbyhmb3JtQ29tcC50aXRsZSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBmb3JtQ29tcC50aXRsZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0b2JqZWN0OiBmb3JtQ29tcFxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdGxGb3JtRmllbGRzVG9rZW5bbEZvcm1GaWVsZHNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldENvbXBvbmVuZXRGb3JtKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wb25lbnRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdDb21wb25lbnRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0bnVsbFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmVzb2x2ZShsRm9ybUZpZWxkc1Rva2VuKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Z2V0Rm9ybUZpZWxkc0J5Rm9ybUlkKGZvcm1JZDogc3RyaW5nKTogUHJvbWlzZTxhbnlbXT4ge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0Ly8gU2VhcmNoIHRoZSBkeW5hbWljIGZvcm1cclxuXHRcdFx0bGV0IGxGb3JtRmllbGRzVG9rZW46IGFueVtdID0gbnVsbDtcclxuXHRcdFx0dGhpcy5mb3JtU2VydmljZS5nZXRCeUlkKGZvcm1JZCkuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdChyZXN1bHQ6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0bGV0IGZvcm06IGFueSA9IHJlc3VsdDtcclxuXHRcdFx0XHRcdGlmICghZm9ybSB8fCAhZm9ybVswXSkge1xyXG5cdFx0XHRcdFx0XHRyZXNvbHZlKGxGb3JtRmllbGRzVG9rZW4pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bEZvcm1GaWVsZHNUb2tlbiA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUNvbXAgb2YgZm9ybSkge1xyXG5cdFx0XHRcdFx0XHRsZXQgbmV3Q29tcG9uZW50czogYW55O1xyXG5cdFx0XHRcdFx0XHRsZXQgY29tcG9uZW50czogYW55W10gPSBbXTtcclxuXHRcdFx0XHRcdFx0aWYgKGZvcm1Db21wLmNvbXBvbmVudHMpIHtcclxuXHRcdFx0XHRcdFx0XHRuZXdDb21wb25lbnRzID0gZm9ybUNvbXAuY29tcG9uZW50cztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmb3JtQ29tcC5jb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRcdFx0bmV3Q29tcG9uZW50cyA9IGZvcm1Db21wLmNvbHVtbnM7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKG5ld0NvbXBvbmVudHMgJiYgVXRpbFN0cmluZy5pc1ZhbGlkKGZvcm1Db21wLnRpdGxlKSkge1xyXG5cdFx0XHRcdFx0XHRcdGxGb3JtRmllbGRzVG9rZW4ucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk6IFRva2VuU2VydmljZS5nZXRLZXlGb3JtdWxhcmlvKGZvcm1Db21wLnRpdGxlKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGZvcm1Db21wLnRpdGxlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvYmplY3Q6IGZvcm1Db21wXHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0bEZvcm1GaWVsZHNUb2tlbltsRm9ybUZpZWxkc1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q29tcG9uZW5ldEZvcm0oXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBvbmVudHMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0NvbXBvbmVudHMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRudWxsXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXNvbHZlKGxGb3JtRmllbGRzVG9rZW4pO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqIFRoaXMgcHJvbWlzZSBhbGxvd3MgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIHdoZW4gY29uc3VsdGluZyB0aGUgZm9ybSBmaWVsZHMuICovXHJcblx0Z2V0Rm9ybVBhbmVsc0J5UHJvbUNvZGUocHJvbUNvZGlnbyk6IFByb21pc2U8YW55W10+IHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdC8vIFNlYXJjaCB0aGUgZHluYW1pYyBmb3JtXHJcblx0XHRcdGxldCBsRm9ybVBhbm5lbHNUb2tlbjogYW55W10gPSBudWxsO1xyXG5cdFx0XHR0aGlzLmZvcm1TZXJ2aWNlLmdldEJ5UHJvbUNvZGlnbyhwcm9tQ29kaWdvKS5zdWJzY3JpYmUoXHJcblx0XHRcdFx0KHJlc3VsdDogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRsZXQgZm9ybTogYW55ID0gcmVzdWx0O1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhZm9ybSB8fFxyXG5cdFx0XHRcdFx0XHQhZm9ybVswXSB8fFxyXG5cdFx0XHRcdFx0XHQhZm9ybVswXS5wcm9tQ29kaWdvIHx8XHJcblx0XHRcdFx0XHRcdGZvcm1bMF0ucHJvbUNvZGlnbyAhPSBwcm9tQ29kaWdvXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Ly8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyc0MDQnXSk7XHJcblx0XHRcdFx0XHRcdHJlc29sdmUobEZvcm1QYW5uZWxzVG9rZW4pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bEZvcm1QYW5uZWxzVG9rZW4gPSBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGZvcm1Db21wIG9mIGZvcm0pIHtcclxuXHRcdFx0XHRcdFx0bGV0IG5ld0NvbXBvbmVudHM6IGFueTtcclxuXHRcdFx0XHRcdFx0bGV0IGNvbXBvbmVudHM6IGFueVtdID0gW107XHJcblx0XHRcdFx0XHRcdGlmIChmb3JtQ29tcC5jb21wb25lbnRzKSB7XHJcblx0XHRcdFx0XHRcdFx0bmV3Q29tcG9uZW50cyA9IGZvcm1Db21wLmNvbXBvbmVudHM7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZm9ybUNvbXAuY29sdW1ucykge1xyXG5cdFx0XHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb2x1bW5zO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChuZXdDb21wb25lbnRzICYmIFV0aWxTdHJpbmcuaXNWYWxpZChmb3JtQ29tcC50aXRsZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRsRm9ybVBhbm5lbHNUb2tlbi5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLmdldEtleUZvcm11bGFyaW8oZm9ybUNvbXAudGl0bGUpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZm9ybUNvbXAudGl0bGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9iamVjdDogZm9ybUNvbXBcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRsRm9ybVBhbm5lbHNUb2tlbltsRm9ybVBhbm5lbHNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldFBhbmVsQ29tcG9uZW5ldChjb21wb25lbnRzLCBuZXdDb21wb25lbnRzLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmVzb2x2ZShsRm9ybVBhbm5lbHNUb2tlbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlY3Vyc2l2ZSBtZXRob2QgdG8gZ2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGVkaXRHcmlkIGR5bmFtaWMgZm9ybVxyXG5cdCAqIEBwYXJhbSBjb21wb25lbnRzXHJcblx0ICogQHBhcmFtIGZvcm1cclxuXHQgKi9cclxuXHRnZXRQYW5lbENvbXBvbmVuZXQoY29tcG9uZW50czogYW55W10sIGZvcm06IGFueSwgcGFuZWxOYW1lOiBzdHJpbmcpOiBhbnlbXSB7XHJcblx0XHRmb3IgKGxldCBmb3JtQ29tcCBvZiBmb3JtKSB7XHJcblx0XHRcdGlmIChmb3JtQ29tcC50eXBlID09PSAncGFuZWwnKSB7XHJcblx0XHRcdFx0Y29tcG9uZW50cy5wdXNoKGZvcm1Db21wKTtcclxuXHRcdFx0fSBlbHNlIGlmIChmb3JtQ29tcC5jb21wb25lbnRzIHx8IGZvcm1Db21wLmNvbHVtbnMpIHtcclxuXHRcdFx0XHRsZXQgbmV3Q29tcG9uZW50czogYW55O1xyXG5cdFx0XHRcdGlmIChmb3JtQ29tcC5jb21wb25lbnRzKSB7XHJcblx0XHRcdFx0XHRuZXdDb21wb25lbnRzID0gZm9ybUNvbXAuY29tcG9uZW50cztcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1Db21wLmNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb2x1bW5zO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb21wb25lbnRzID0gdGhpcy5nZXRQYW5lbENvbXBvbmVuZXQoY29tcG9uZW50cywgbmV3Q29tcG9uZW50cywgcGFuZWxOYW1lKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlY3Vyc2l2ZSBtZXRob2QgdG8gZ2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGNvbXBvbmVudHMgYSBjb2x1bW5zIG9mIHRoZSBkeW5hbWljIGZvcm1cclxuXHQgKiBAcGFyYW0gY29tcG9uZW50c1xyXG5cdCAqIEBwYXJhbSBmb3JtXHJcblx0ICovXHJcblx0Z2V0Q29tcG9uZW5ldEZvcm0oXHJcblx0XHRjb21wb25lbnRzOiBhbnlbXSxcclxuXHRcdGZvcm06IGFueSxcclxuXHRcdHBhbmVsTmFtZTogc3RyaW5nLFxyXG5cdFx0ZWRpdGdyaWQ6IGJvb2xlYW4sXHJcblx0XHRlZGl0R3JpZEtleTogc3RyaW5nXHJcblx0KTogYW55W10ge1xyXG5cdFx0Zm9yIChsZXQgZm9ybUNvbXAgb2YgZm9ybSkge1xyXG5cdFx0XHQvL01PLSAgbWFudGlzIDg3NDMgZml4IGFkZHJlc3MgdG9rZW5cclxuXHRcdFx0aWYgKChmb3JtQ29tcC5jb21wb25lbnRzIHx8IGZvcm1Db21wLmNvbHVtbnMpICYmIGZvcm1Db21wLnR5cGUgIT09ICdhZGRyZXNzJykge1xyXG5cdFx0XHRcdGxldCBuZXdDb21wb25lbnRzOiBhbnk7XHJcblx0XHRcdFx0aWYgKGZvcm1Db21wLmNvbXBvbmVudHMpIHtcclxuXHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb21wb25lbnRzO1xyXG5cdFx0XHRcdFx0aWYgKGZvcm1Db21wLnR5cGUgPT09ICdlZGl0Z3JpZCcpIHtcclxuXHRcdFx0XHRcdFx0ZWRpdGdyaWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRlZGl0R3JpZEtleSA9IGZvcm1Db21wLmtleTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1Db21wLmNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb2x1bW5zO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZm9ybUNvbXAudHlwZSAmJiBmb3JtQ29tcC50eXBlID09PSAncGFuZWwnKSB7XHJcblx0XHRcdFx0XHRwYW5lbE5hbWUgPSBmb3JtQ29tcC50aXRsZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW5ldEZvcm0oXHJcblx0XHRcdFx0XHRjb21wb25lbnRzLFxyXG5cdFx0XHRcdFx0bmV3Q29tcG9uZW50cyxcclxuXHRcdFx0XHRcdHBhbmVsTmFtZSxcclxuXHRcdFx0XHRcdGVkaXRncmlkLFxyXG5cdFx0XHRcdFx0ZWRpdEdyaWRLZXlcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvcm1Db21wLnBhbmVsTmFtZSA9IHBhbmVsTmFtZTtcclxuXHRcdFx0XHRmb3JtQ29tcC5lZGl0Z3JpZCA9IGVkaXRncmlkO1xyXG5cdFx0XHRcdGZvcm1Db21wLmVkaXRHcmlkS2V5ID0gZWRpdEdyaWRLZXk7XHJcblx0XHRcdFx0Y29tcG9uZW50cy5wdXNoKGZvcm1Db21wKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XHJcblx0fVxyXG5cclxuXHQvKiogVGhpcyBwcm9taXNlIGFsbG93cyB0byBleGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBjb25zdWx0aW5nIHRoZSBmb3JtIGZpZWxkcy4gKi9cclxuXHRnZXRGb3JtRWRpdEdyaWRGaWVsZHNCeVByb21Db2RlKHByb21Db2RpZ28pOiBQcm9taXNlPGFueVtdPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHQvLyBTZWFyY2ggdGhlIGR5bmFtaWMgZm9ybVxyXG5cdFx0XHRsZXQgbEZvcm1GaWVsZHNUb2tlbjogYW55W10gPSBudWxsO1xyXG5cdFx0XHR0aGlzLmZvcm1TZXJ2aWNlLmdldEJ5UHJvbUNvZGlnbyhwcm9tQ29kaWdvKS5zdWJzY3JpYmUoXHJcblx0XHRcdFx0KHJlc3VsdDogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRsZXQgZm9ybTogYW55ID0gcmVzdWx0O1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhZm9ybSB8fFxyXG5cdFx0XHRcdFx0XHQhZm9ybVswXSB8fFxyXG5cdFx0XHRcdFx0XHQhZm9ybVswXS5wcm9tQ29kaWdvIHx8XHJcblx0XHRcdFx0XHRcdGZvcm1bMF0ucHJvbUNvZGlnbyAhPSBwcm9tQ29kaWdvXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Ly8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyc0MDQnXSk7XHJcblx0XHRcdFx0XHRcdHJlc29sdmUobEZvcm1GaWVsZHNUb2tlbik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRsRm9ybUZpZWxkc1Rva2VuID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGxldCBmb3JtQ29tcCBvZiBmb3JtKSB7XHJcblx0XHRcdFx0XHRcdGxldCBuZXdDb21wb25lbnRzOiBhbnk7XHJcblx0XHRcdFx0XHRcdGxldCBjb21wb25lbnRzOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRpZiAoZm9ybUNvbXAuY29tcG9uZW50cykge1xyXG5cdFx0XHRcdFx0XHRcdG5ld0NvbXBvbmVudHMgPSBmb3JtQ29tcC5jb21wb25lbnRzO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1Db21wLmNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdFx0XHRuZXdDb21wb25lbnRzID0gZm9ybUNvbXAuY29sdW1ucztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAobmV3Q29tcG9uZW50cyAmJiBVdGlsU3RyaW5nLmlzVmFsaWQoZm9ybUNvbXAudGl0bGUpKSB7XHJcblx0XHRcdFx0XHRcdFx0bEZvcm1GaWVsZHNUb2tlbi5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLmdldEtleUZvcm11bGFyaW8oZm9ybUNvbXAudGl0bGUpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZm9ybUNvbXAudGl0bGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9iamVjdDogZm9ybUNvbXBcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogW11cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRsRm9ybUZpZWxkc1Rva2VuW2xGb3JtRmllbGRzVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRFZGl0R3JpZENvbXBvbmVuZXQoY29tcG9uZW50cywgbmV3Q29tcG9uZW50cywgbnVsbCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJlc29sdmUobEZvcm1GaWVsZHNUb2tlbik7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlY3Vyc2l2ZSBtZXRob2QgdG8gZ2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGVkaXRHcmlkIGR5bmFtaWMgZm9ybVxyXG5cdCAqIEBwYXJhbSBjb21wb25lbnRzXHJcblx0ICogQHBhcmFtIGZvcm1cclxuXHQgKi9cclxuXHRnZXRFZGl0R3JpZENvbXBvbmVuZXQoY29tcG9uZW50czogYW55W10sIGZvcm06IGFueSwgcGFuZWxOYW1lOiBzdHJpbmcpOiBhbnlbXSB7XHJcblx0XHRmb3IgKGxldCBmb3JtQ29tcCBvZiBmb3JtKSB7XHJcblx0XHRcdGlmIChmb3JtQ29tcC50eXBlID09PSAnZWRpdGdyaWQnKSB7XHJcblx0XHRcdFx0Zm9ybUNvbXAucGFuZWxOYW1lID0gcGFuZWxOYW1lO1xyXG5cdFx0XHRcdGNvbXBvbmVudHMucHVzaChmb3JtQ29tcCk7XHJcblx0XHRcdH0gZWxzZSBpZiAoZm9ybUNvbXAuY29tcG9uZW50cyB8fCBmb3JtQ29tcC5jb2x1bW5zKSB7XHJcblx0XHRcdFx0bGV0IG5ld0NvbXBvbmVudHM6IGFueTtcclxuXHRcdFx0XHRpZiAoZm9ybUNvbXAuY29tcG9uZW50cykge1xyXG5cdFx0XHRcdFx0bmV3Q29tcG9uZW50cyA9IGZvcm1Db21wLmNvbXBvbmVudHM7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChmb3JtQ29tcC5jb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRuZXdDb21wb25lbnRzID0gZm9ybUNvbXAuY29sdW1ucztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGZvcm1Db21wLnR5cGUgJiYgZm9ybUNvbXAudHlwZSA9PT0gJ3BhbmVsJykge1xyXG5cdFx0XHRcdFx0cGFuZWxOYW1lID0gZm9ybUNvbXAudGl0bGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbXBvbmVudHMgPSB0aGlzLmdldEVkaXRHcmlkQ29tcG9uZW5ldChjb21wb25lbnRzLCBuZXdDb21wb25lbnRzLCBwYW5lbE5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY29tcG9uZW50cztcclxuXHR9XHJcblxyXG5cdC8qKiBJdCByZXR1cm5zIHRoZSB0b2tlbnMgYnkgcHJvbUNvZGlnbyAqL1xyXG5cdGdldExpc3RCeVByb21Db2RpZ28ocHJvbUNvZGU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcclxuXHRcdFx0dGhpcy5lbnZpcm9ubWVudC5ob3N0LmJhY2tlbmQuY29uZmlndXJhdGlvbiArICd0b2tlbi9nZXRCeVByb21Db2RpZ28nLFxyXG5cdFx0XHR7IHBhcmFtczogbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ3Byb21Db2RpZ28nLCBwcm9tQ29kZS50b1N0cmluZygpKSB9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHJldHVybnMgdGhlIHRva2VuIGJ5IGlkICovXHJcblx0Z2V0QnlJZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZW52aXJvbm1lbnQuaG9zdC5iYWNrZW5kLmNvbmZpZ3VyYXRpb24gKyAndG9rZW4vZ2V0QnlJZCcsIHtcclxuXHRcdFx0cGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnaWQnLCBpZC50b1N0cmluZygpKVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgZGVsZXRlcyBhIGZvcm0gYnkgaWQgKi9cclxuXHRkZWxldGUoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGUoXHJcblx0XHRcdHRoaXMuZW52aXJvbm1lbnQuaG9zdC5iYWNrZW5kLmNvbmZpZ3VyYXRpb24gKyAndG9rZW4vZGVsZXRlJyxcclxuXHRcdFx0eyBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpZCcsIGlkKSB9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHNhdmVzIHRoZSB0b2tlbiAqL1xyXG5cdHNhdmUodG9rZW46IFRva2VuKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChcclxuXHRcdFx0dGhpcy5lbnZpcm9ubWVudC5ob3N0LmJhY2tlbmQuY29uZmlndXJhdGlvbiArICd0b2tlbi9zYXZlJyxcclxuXHRcdFx0dG9rZW4sXHJcblx0XHRcdEhFQURFUl9KU09OXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEtleUZvcm11bGFyaW8oZm9ybVRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0aWYgKFV0aWxTdHJpbmcuaXNWYWxpZChmb3JtVGl0bGUpKSB7XHJcblx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNKSArXHJcblx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKGZvcm1UaXRsZSkucmVwbGFjZSgvXy9nLCAnLScpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gJyc7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgcmV0dXJucyB0aGUgdW5pcXVlIHZlcmlmaWNhdGlvbiBjb2RlICovXHJcblx0Z2V0VW5pcXVlVmVyaWZpY2F0aW9uQ29kZShsb2dpbjogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG5cdFx0XHR0aGlzLmVudmlyb25tZW50Lmhvc3QuYmFja2VuZC5kb2N1bWVudHNSZXBvc2l0b3J5ICtcclxuXHRcdFx0XHQnZG9jdW1lbnRvL2NvbnN1bHRhckNvZGlnb1VuaWNvLycgK1xyXG5cdFx0XHRcdGxvZ2luICtcclxuXHRcdFx0XHQnLycgK1xyXG5cdFx0XHRcdHRva2VuLFxyXG5cdFx0XHR7IHBhcmFtczogbmV3IEh0dHBQYXJhbXMoKSB9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHNlbmQgdGhlIGluZm9ybWF0aW9uIHRvIGNvcHkgdGhlIERvY3VtZW50IHZpZXdlciAqL1xyXG5cdGNvcHlEb2N1bWVudEluZm9ybWF0aW9uVmlld2VyKFxyXG5cdFx0bG9naW46IHN0cmluZyxcclxuXHRcdHRva2VuOiBzdHJpbmcsXHJcblx0XHR1bmlxdWVDb2RlOiBzdHJpbmcsXHJcblx0XHRkb2N1bWVudFVSTDogc3RyaW5nLFxyXG5cdFx0ZG9jdW1lbnROYW1lOiBzdHJpbmdcclxuXHQpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0bGV0IGluZm9Eb2N1bWVudG8gPSB7XHJcblx0XHRcdGNvZGlnb1VuaWNvOiB1bmlxdWVDb2RlLFxyXG5cdFx0XHRydXRhRG9jdW1lbnRvOiBkb2N1bWVudFVSTCxcclxuXHRcdFx0ZG9jdW1lbnROYW1lOiBkb2N1bWVudE5hbWVcclxuXHRcdH07XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoXHJcblx0XHRcdHRoaXMuZW52aXJvbm1lbnQuaG9zdC5iYWNrZW5kLmRvY3VtZW50c1JlcG9zaXRvcnkgK1xyXG5cdFx0XHRcdCdkb2N1bWVudG8vYWRpY2lvbmFyRG9jdW1lbnRvLycgK1xyXG5cdFx0XHRcdGxvZ2luICtcclxuXHRcdFx0XHQnLycgK1xyXG5cdFx0XHRcdHRva2VuLFxyXG5cdFx0XHRpbmZvRG9jdW1lbnRvLFxyXG5cdFx0XHRIRUFERVJfSlNPTlxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRLZXlCdWRnZXQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0S2V5RG9jdW1lbnQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0RPQ1VNRU5UTyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0S2V5RG9jdW1lbnRBbmFseXNpcygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyhUb2tlblNlcnZpY2UuVE9LRU5fRE9DVU1FTlRPX0FOQUxZU0lTX1RZUEUpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEtleVRhc2soKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0tMKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRLZXlTdGF0aWMoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0S2V5Q2FsY3VsYXRlZCh0b2tlbjogVG9rZW4pOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEKSArXHJcblx0XHRcdCdfJyArXHJcblx0XHRcdFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyh0b2tlbi5uYW1lKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRLZXlTbmFwc2hvdCh0b2tlbjogVG9rZW4pOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TTkFQU0hPVCkgK1xyXG5cdFx0XHQnXycgK1xyXG5cdFx0XHRVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnModG9rZW4ubmFtZSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0S2V5R3VhcmFudGVlKHRva2VuOiBQbGlDbmZHdWFyYW50ZWVUb2tlbik6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0dVQVJBTlRFRSkgK1xyXG5cdFx0XHQnXycgK1xyXG5cdFx0XHRVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnModG9rZW4ubmFtZSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm4gYSB2YWx1ZSB0aGF0IHJlcHJlc2VudCB0aGUgdHlwZSBvZiBsYWJlbDogMT1Gb3JtLCAyPUJ1ZGdldCwgMz1TdGF0aWMsIDQ9Q2FsY3VsYXRlZFxyXG5cdCAqIEBwYXJhbSBrZXkgVmFsdWUgdG8gZXZhbHVlYXRlXHJcblx0ICovXHJcblx0c3RhdGljIGdldEtleVR5cGUoa2V5OiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdFx0a2V5ID0ga2V5LnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKTtcclxuXHRcdGtleSA9IGtleS5zdWJzdHJpbmcoMSwga2V5LmluZGV4T2YoJ18nKSk7XHJcblx0XHRpZiAoa2V5LnN0YXJ0c1dpdGgoVXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNKSkpIHtcclxuXHRcdFx0cmV0dXJuIDE7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRrZXkuc3RhcnRzV2l0aChVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVCkpXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuIDI7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRrZXkuc3RhcnRzV2l0aChVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQykpXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuIDM7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRrZXkuc3RhcnRzV2l0aChcclxuXHRcdFx0XHRVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURUQpXHJcblx0XHRcdClcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gNDtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdGtleS5zdGFydHNXaXRoKFV0aWxTdHJpbmcucmVwbGFjZUFjY2VudFNwYWNlc090aGVycyhUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTS0wpKVxyXG5cdFx0KSB7XHJcblx0XHRcdHJldHVybiA1O1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0a2V5LnN0YXJ0c1dpdGgoXHJcblx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKFRva2VuU2VydmljZS5UT0tFTl9ET0NVTUVOVE9fQU5BTFlTSVNfVFlQRSlcclxuXHRcdFx0KVxyXG5cdFx0KSB7XHJcblx0XHRcdHJldHVybiA2O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZXBlbmRzIG9mIHRoZSB0eXBlIG9mIGZvcm1GaWVsZFRva2VuIHJldHVybiBkZSB2YWx1ZSBvZiB0aGUgdmFsdWVEYXRhXHJcblx0ICogQHBhcmFtIGZvcm1GaWVsZFRva2VuXHJcblx0ICogQHBhcmFtIHZhbHVlRGF0YVxyXG5cdCAqL1xyXG5cdGdldFZhbHVlRnJvbUZvcm1GaWVsZChmb3JtRmllbGRUb2tlbjogYW55LCB2YWx1ZURhdGE6IGFueSk6IGFueSB7XHJcblx0XHRpZiAodHlwZW9mIHZhbHVlRGF0YSA9PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRpZiAoZm9ybUZpZWxkVG9rZW4udHlwZSkge1xyXG5cdFx0XHRcdGlmIChmb3JtRmllbGRUb2tlbi50eXBlID09ICdhZGRyZXNzJykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRGF0YS5mb3JtYXR0ZWRfYWRkcmVzcztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0Zm9ybUZpZWxkVG9rZW4udHlwZSA9PSAnc2VsZWN0JyAmJlxyXG5cdFx0XHRcdFx0dmFsdWVEYXRhLmhhc093blByb3BlcnR5KGZvcm1GaWVsZFRva2VuLnNlYXJjaEZpZWxkKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0aWYgKHZhbHVlRGF0YS5oYXNPd25Qcm9wZXJ0eSgnb3JpZ2luYWxfbmFtZScpICE9PSAnJykge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVEYXRhLm9yaWdpbmFsX25hbWU7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHZhbHVlRGF0YS5oYXNPd25Qcm9wZXJ0eSgnbmF0aXZlTmFtZScpICE9PSAnJykge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVEYXRhLm5hdGl2ZU5hbWU7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGZvcm1GaWVsZFRva2VuLnNlYXJjaEZpZWxkKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZURhdGFbZm9ybUZpZWxkVG9rZW4uc2VhcmNoRmllbGRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHZhbHVlRGF0YTtcclxuXHR9XHJcblx0Zm9ybWF0RGF0ZSh2YWx1ZTogRGF0ZSwgbG9jYWxlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuXHJcblx0XHRjb25zdCBtb250aHMgPSB7XHJcblx0XHRcdGVzOiBbXHJcblx0XHRcdFx0J2VuZXJvJyxcclxuXHRcdFx0XHQnZmVicmVybycsXHJcblx0XHRcdFx0J21hcnpvJyxcclxuXHRcdFx0XHQnYWJyaWwnLFxyXG5cdFx0XHRcdCdtYXlvJyxcclxuXHRcdFx0XHQnanVuaW8nLFxyXG5cdFx0XHRcdCdqdWxpbycsXHJcblx0XHRcdFx0J2Fnb3N0bycsXHJcblx0XHRcdFx0J3NlcHRpZW1icmUnLFxyXG5cdFx0XHRcdCdvY3R1YnJlJyxcclxuXHRcdFx0XHQnbm92aWVtYnJlJyxcclxuXHRcdFx0XHQnZGljaWVtYnJlJ1xyXG5cdFx0XHRdLFxyXG5cdFx0XHRlbjogW1xyXG5cdFx0XHRcdCdKYW51YXJ5JyxcclxuXHRcdFx0XHQnRmVicnVhcnknLFxyXG5cdFx0XHRcdCdNYXJjaCcsXHJcblx0XHRcdFx0J0FwcmlsJyxcclxuXHRcdFx0XHQnTWF5JyxcclxuXHRcdFx0XHQnSnVuZScsXHJcblx0XHRcdFx0J0p1bHknLFxyXG5cdFx0XHRcdCdBdWd1c3QnLFxyXG5cdFx0XHRcdCdTZXB0ZW1iZXInLFxyXG5cdFx0XHRcdCdPY3RvYmVyJyxcclxuXHRcdFx0XHQnTm92ZW1iZXInLFxyXG5cdFx0XHRcdCdEZWNlbWJlcidcclxuXHRcdFx0XSxcclxuXHRcdFx0ZnI6IFtcclxuXHRcdFx0XHQnamFudmllcicsXHJcblx0XHRcdFx0J2bDqXZyaWVyJyxcclxuXHRcdFx0XHQnbWFycycsXHJcblx0XHRcdFx0J2F2cmlsJyxcclxuXHRcdFx0XHQnbWFpJyxcclxuXHRcdFx0XHQnanVpbicsXHJcblx0XHRcdFx0J2p1aWxsZXQnLFxyXG5cdFx0XHRcdCdhb8O7dCcsXHJcblx0XHRcdFx0J3NlcHRlbWJyZScsXHJcblx0XHRcdFx0J29jdG9icmUnLFxyXG5cdFx0XHRcdCdub3ZlbWJyZScsXHJcblx0XHRcdFx0J2TDqWNlbWJyZSdcclxuXHRcdFx0XSxcclxuXHRcdFx0ZGU6IFtcclxuXHRcdFx0XHQnSmFudWFyJyxcclxuXHRcdFx0XHQnRmVicnVhcicsXHJcblx0XHRcdFx0J03DpHJ6JyxcclxuXHRcdFx0XHQnQXByaWwnLFxyXG5cdFx0XHRcdCdNYWknLFxyXG5cdFx0XHRcdCdKdW5pJyxcclxuXHRcdFx0XHQnSnVsaScsXHJcblx0XHRcdFx0J0F1Z3VzdCcsXHJcblx0XHRcdFx0J1NlcHRlbWJlcicsXHJcblx0XHRcdFx0J09rdG9iZXInLFxyXG5cdFx0XHRcdCdOb3ZlbWJlcicsXHJcblx0XHRcdFx0J0RlemVtYmVyJ1xyXG5cdFx0XHRdLFxyXG5cdFx0XHRpdDogW1xyXG5cdFx0XHRcdCdnZW5uYWlvJyxcclxuXHRcdFx0XHQnZmViYnJhaW8nLFxyXG5cdFx0XHRcdCdtYXJ6bycsXHJcblx0XHRcdFx0J2FwcmlsZScsXHJcblx0XHRcdFx0J21hZ2dpbycsXHJcblx0XHRcdFx0J2dpdWdubycsXHJcblx0XHRcdFx0J2x1Z2xpbycsXHJcblx0XHRcdFx0J2Fnb3N0bycsXHJcblx0XHRcdFx0J3NldHRlbWJyZScsXHJcblx0XHRcdFx0J290dG9icmUnLFxyXG5cdFx0XHRcdCdub3ZlbWJyZScsXHJcblx0XHRcdFx0J2RpY2VtYnJlJ1xyXG5cdFx0XHRdXHJcblx0XHR9O1xyXG5cclxuXHRcdGNvbnN0IGxvY2FsZU1vbnRocyA9IG1vbnRoc1tsb2NhbGVdO1xyXG5cclxuXHRcdGNvbnN0IG1vbnRoID0gbG9jYWxlTW9udGhzW2RhdGUuZ2V0TW9udGgoKV07XHJcblx0XHRjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG5cclxuXHRcdHJldHVybiBgJHttb250aH0gJHt5ZWFyfWA7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFRyeSB0byBmaW5kIHRoZSB0b2tlbiBpbiB0aGUgc3RyaW5nVGV4dCBhbmQgcmVwbGFjZSB3aXRoIGRhdGFWYWx1ZS4gSWYgZGV0ZWN0IGZvcm1hdCBvZiBudW1iZXIgb3IgZGF0ZSB0cnkgdG8gZm9ybWF0IHRoZSBkYXRhVmFsdWVcclxuXHQgKiBAcGFyYW0gc3RyaW5nVGV4dFxyXG5cdCAqIEBwYXJhbSB0b2tlblxyXG5cdCAqIEBwYXJhbSBkYXRhVmFsdWVcclxuXHQgKi9cclxuXHRyZXBsYWNlVG9rZW4oc3RyaW5nVGV4dDogc3RyaW5nLCB0b2tlbjogYW55LCBkYXRhVmFsdWU6IGFueSwgbG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRcdGxldCB2YWx1ZVJlcGxhY2U6IHN0cmluZyA9IG51bGw7XHJcblx0XHRpZiAodG9rZW4gJiYgdG9rZW5bMF0gPT0gJyMnKSB7XHJcblx0XHRcdGxldCB0eXBlVG9rZW4gPSB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4uaW5kZXhPZignKCcpKTtcclxuXHRcdFx0aWYgKHR5cGVUb2tlbiA9PSAnZGF0ZScpIHtcclxuXHRcdFx0XHRsZXQgZGF0ZUZvcm1hdDogc3RyaW5nID0gdG9rZW4uc3Vic3RyaW5nKFxyXG5cdFx0XHRcdFx0dG9rZW4uaW5kZXhPZignfScpICsgMSxcclxuXHRcdFx0XHRcdHRva2VuLmluZGV4T2YoJyknKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0ZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXQudHJpbSgpLnJlcGxhY2UoL1xcXCIvZywgJycpLnJlcGxhY2UoL1xcJy9nLCAnJyk7XHJcblx0XHRcdFx0bGV0IGRhdGVWYWx1ZSA9IERhdGVVdGlsLmdldERhdGUoZGF0YVZhbHVlKTtcclxuXHRcdFx0XHRpZiAobG9jYWxlICE9IG51bGwgJiYgbG9jYWxlKSB7XHJcblx0XHRcdFx0XHR2YWx1ZVJlcGxhY2UgPSB0aGlzLmZvcm1hdERhdGUoZGF0ZVZhbHVlLCBsb2NhbGUpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoZGF0ZVZhbHVlKSB7XHJcblx0XHRcdFx0XHR2YWx1ZVJlcGxhY2UgPSBEYXRlVXRpbC5nZXRNb21lbnQoZGF0ZVZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHZhbHVlUmVwbGFjZSA9ICcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIGlmICh0eXBlVG9rZW4gPT0gJ251bWJlcicpIHtcclxuXHRcdFx0XHRsZXQgbnVtYmVyVmFsdWU6IG51bWJlciA9IE51bWJlcihkYXRhVmFsdWUpO1xyXG5cdFx0XHRcdGlmIChudW1iZXJWYWx1ZSAhPSB1bmRlZmluZWQgJiYgIWlzTmFOKG51bWJlclZhbHVlKSkge1xyXG5cdFx0XHRcdFx0bGV0IG51bWJlckZvcm1hdDogc3RyaW5nID0gdG9rZW4uc3Vic3RyaW5nKFxyXG5cdFx0XHRcdFx0XHR0b2tlbi5pbmRleE9mKCd9JykgKyAxLFxyXG5cdFx0XHRcdFx0XHR0b2tlbi5pbmRleE9mKCcpJylcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRudW1iZXJGb3JtYXQgPSBudW1iZXJGb3JtYXQudHJpbSgpLnJlcGxhY2UoL1xcXCIvZywgJycpLnJlcGxhY2UoL1xcJy9nLCAnJyk7XHJcblx0XHRcdFx0XHR2YWx1ZVJlcGxhY2UgPSB0aGlzLmN1cnJlbmN5UGlwZS50cmFuc2Zvcm0oXHJcblx0XHRcdFx0XHRcdG51bWJlclZhbHVlLFxyXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2FsZSxcclxuXHRcdFx0XHRcdFx0JycsXHJcblx0XHRcdFx0XHRcdG51bWJlckZvcm1hdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXHJcblx0XHRcdFx0XHRcdCdFbCBkYXRvIFsnICtcclxuXHRcdFx0XHRcdFx0XHRkYXRhVmFsdWUgK1xyXG5cdFx0XHRcdFx0XHRcdCddIHBhcmEgZWwgdG9rZW4gWycgK1xyXG5cdFx0XHRcdFx0XHRcdHRva2VuICtcclxuXHRcdFx0XHRcdFx0XHQnXSB0aXBvIG7Dum1lcmljbyBubyBlcyB2YWxpZG8nXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0dmFsdWVSZXBsYWNlID0gJyc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCd0aXBvIGRlIHRva2VuIGluZGVmaW5pZG8uIFt0eXBlVG9rZW5bJyArIHR5cGVUb2tlbiArICddXScpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKHRva2VuICYmIHRva2VuWzBdID09ICckJykge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0ZGF0YVZhbHVlICE9PSBudWxsICYmXHJcblx0XHRcdFx0ZGF0YVZhbHVlICE9PSB1bmRlZmluZWQgJiZcclxuXHRcdFx0XHRkYXRhVmFsdWUub3JpZ2luYWxfbmFtZSAhPT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdFx0ZGF0YVZhbHVlLm9yaWdpbmFsX25hbWUgIT09IG51bGxcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0dmFsdWVSZXBsYWNlID0gZGF0YVZhbHVlLm9yaWdpbmFsX25hbWU7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dmFsdWVSZXBsYWNlID0gZGF0YVZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIHZhbHVlUmVwbGFjZSA9IGRhdGFWYWx1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdFbCB0b2tlbiBubyBlcyB2YWxpZG8uIFt0b2tlblsnICsgdG9rZW4gKyAnXV0nKTtcclxuXHRcdH1cclxuXHRcdGlmIChzdHJpbmdUZXh0ICYmIHZhbHVlUmVwbGFjZSAhPT0gbnVsbCkge1xyXG5cdFx0XHQvLyByZXBsYWNlIHRleHQgaW4gYSBtb3JlIGVmZmljaWVudCB3YXlcclxuXHRcdFx0c3RyaW5nVGV4dCA9IHN0cmluZ1RleHQuc3BsaXQodG9rZW4pLmpvaW4odmFsdWVSZXBsYWNlKTtcclxuXHRcdFx0Ly9zdHJpbmdUZXh0ID0gc3RyaW5nVGV4dC5yZXBsYWNlKHRva2VuLCB2YWx1ZVJlcGxhY2UpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHN0cmluZ1RleHQ7XHJcblx0fVxyXG5cclxuXHRnZXRMaXN0VG9rZW5zQnlTdHJpbmdTZWdtZW50YXRpb24oc3RyaW5nVGV4dDogc3RyaW5nKTogYW55W10ge1xyXG5cdFx0Y29uc3QgYXJyYXlUb2tlbiA9IHN0cmluZ1RleHQubWF0Y2goL1xcJHsoW159XSspXFx9L2cpO1xyXG5cdFx0Y29uc3QgYXJyYXlUb2tlbkZvcm1hdHRlZERhdGUgPSBzdHJpbmdUZXh0Lm1hdGNoKC9cXCNkYXRlW14pXStcXCkvZyk7XHJcblx0XHRjb25zdCBhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyID0gc3RyaW5nVGV4dC5tYXRjaCgvXFwjbnVtYmVyW14pXStcXCkvZyk7XHJcblx0XHRsZXQgYXJyYXlUb2tlbkZvcm1hdHRlZCA9IFtdO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkRGF0ZSAmJlxyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkRGF0ZS5sZW5ndGggPiAwICYmXHJcblx0XHRcdGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIgJiZcclxuXHRcdFx0YXJyYXlUb2tlbkZvcm1hdHRlZE51bWJlci5sZW5ndGggPiAwXHJcblx0XHQpIHtcclxuXHRcdFx0YXJyYXlUb2tlbkZvcm1hdHRlZCA9IGFycmF5VG9rZW5Gb3JtYXR0ZWREYXRlLmNvbmNhdChhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyKTtcclxuXHRcdH0gZWxzZSBpZiAoYXJyYXlUb2tlbkZvcm1hdHRlZERhdGUgJiYgYXJyYXlUb2tlbkZvcm1hdHRlZERhdGUubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkID0gYXJyYXlUb2tlbkZvcm1hdHRlZERhdGUuc2xpY2UoKTtcclxuXHRcdH0gZWxzZSBpZiAoYXJyYXlUb2tlbkZvcm1hdHRlZE51bWJlciAmJiBhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0YXJyYXlUb2tlbkZvcm1hdHRlZCA9IGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIuc2xpY2UoKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcclxuXHJcblx0XHRpZiAoYXJyYXlUb2tlbikge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIGFycmF5VG9rZW4pIHtcclxuXHRcdFx0XHRjb25zdCBpbmZvVG9rZW4gPSB7IGtleTogdG9rZW4sIHZhbHVlOiB0b2tlbiB9O1xyXG5cdFx0XHRcdGlmIChhcnJheVRva2VuRm9ybWF0dGVkKSB7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHRva2VuRm9ybWF0dGVkIG9mIGFycmF5VG9rZW5Gb3JtYXR0ZWQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaW5kZXggPSB0b2tlbkZvcm1hdHRlZC5pbmRleE9mKHRva2VuKTtcclxuXHRcdFx0XHRcdFx0aWYgKGluZGV4ID49IDApIHtcclxuXHRcdFx0XHRcdFx0XHRpbmZvVG9rZW4udmFsdWUgPSB0b2tlbkZvcm1hdHRlZDtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXN1bHQucHVzaChpbmZvVG9rZW4pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNoYW5nZUlkUHJvcGVydGllc09mT2JqZWN0KG5vcm1hbGl6YXRpb25Db2x1bW5zOiBhbnlbXSwgbGlzdERhdGE6IGFueVtdKTogYW55W10ge1xyXG5cdFx0Y29uc3QgbmV3RGF0YSA9IFtdO1xyXG5cdFx0bGlzdERhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRjb25zdCBvYmpEYXRhID0ge307XHJcblx0XHRcdE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcblx0XHRcdFx0aWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRub3JtYWxpemF0aW9uQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbHVtbi5pZENvbHVtbi50b1N0cmluZygpID09PSBwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0XHRcdG9iakRhdGFbY29sdW1uLmtleV0gPSBkYXRhW3Byb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0aWYgKG9iakRhdGEpIHtcclxuXHRcdFx0XHRuZXdEYXRhLnB1c2gob2JqRGF0YSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIG5ld0RhdGE7XHJcblx0fVxyXG5cclxuXHRnZW5lcmF0ZUh0bWxCeVRva2Vuc0FuZERhdGEoaHRtbDogc3RyaW5nLCBsaXN0RGF0YTogYW55W10sIGxpc3RUb2tlbnM6IGFueVtdKTogc3RyaW5nW10ge1xyXG5cdFx0Y29uc3QgdHJhbnNsYXRlZENhcmRzOiBhbnlbXSA9IFtdO1xyXG5cdFx0bGlzdERhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRjb25zdCBvYmpUb2tlbiA9IHt9O1xyXG5cdFx0XHRjb25zdCBodG1sVHJhbnNsYXRlZCA9IHsgaHRtbDogaHRtbCB9O1xyXG5cdFx0XHRPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xyXG5cdFx0XHRcdGxpc3RUb2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHtcclxuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA9PSB0b2tlbi5rZXkucmVwbGFjZSgnJHsnLCAnJykucmVwbGFjZSgnfScsICcnKSkge1xyXG5cdFx0XHRcdFx0XHRvYmpUb2tlblt0b2tlbi5rZXldID0gZGF0YVtwcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdGh0bWxUcmFuc2xhdGVkLmh0bWwgPSBodG1sVHJhbnNsYXRlZC5odG1sLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0dG9rZW4ua2V5LFxyXG5cdFx0XHRcdFx0XHRcdGRhdGFbcHJvcGVydHldXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHR0cmFuc2xhdGVkQ2FyZHMucHVzaChodG1sVHJhbnNsYXRlZCk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB0cmFuc2xhdGVkQ2FyZHM7XHJcblx0fVxyXG5cclxuXHRnZXRMaXN0VG9rZW5zQnlTdHJpbmcoc3RyaW5nVGV4dDogc3RyaW5nKTogYW55W10ge1xyXG5cdFx0dmFyIGFycmF5VG9rZW4gPSBzdHJpbmdUZXh0Lm1hdGNoKC9cXCR7KFtefV0rKVxcfS9nKTtcclxuXHRcdHZhciBhcnJheVRva2VuRm9ybWF0dGVkRGF0ZSA9IHN0cmluZ1RleHQubWF0Y2goL1xcI2RhdGVbXildK1xcKS9nKTtcclxuXHRcdHZhciBhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyID0gc3RyaW5nVGV4dC5tYXRjaCgvXFwjbnVtYmVyW14pXStcXCkvZyk7XHJcblx0XHR2YXIgYXJyYXlUb2tlbkZvcm1hdHRlZCA9IFtdO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkRGF0ZSAmJlxyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkRGF0ZS5sZW5ndGggPiAwICYmXHJcblx0XHRcdGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIgJiZcclxuXHRcdFx0YXJyYXlUb2tlbkZvcm1hdHRlZE51bWJlci5sZW5ndGggPiAwXHJcblx0XHQpIHtcclxuXHRcdFx0YXJyYXlUb2tlbkZvcm1hdHRlZCA9IGFycmF5VG9rZW5Gb3JtYXR0ZWREYXRlLmNvbmNhdChhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyKTtcclxuXHRcdH0gZWxzZSBpZiAoYXJyYXlUb2tlbkZvcm1hdHRlZERhdGUgJiYgYXJyYXlUb2tlbkZvcm1hdHRlZERhdGUubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhcnJheVRva2VuRm9ybWF0dGVkID0gYXJyYXlUb2tlbkZvcm1hdHRlZERhdGUuc2xpY2UoKTtcclxuXHRcdH0gZWxzZSBpZiAoYXJyYXlUb2tlbkZvcm1hdHRlZE51bWJlciAmJiBhcnJheVRva2VuRm9ybWF0dGVkTnVtYmVyLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0YXJyYXlUb2tlbkZvcm1hdHRlZCA9IGFycmF5VG9rZW5Gb3JtYXR0ZWROdW1iZXIuc2xpY2UoKTtcclxuXHRcdH1cclxuXHRcdHZhciByZXN1bHQ6IGFueVtdID0gW107XHJcblxyXG5cdFx0aWYgKGFycmF5VG9rZW4pIHtcclxuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiBhcnJheVRva2VuKSB7XHJcblx0XHRcdFx0bGV0IGtleVR5cGU6IG51bWJlciA9IFRva2VuU2VydmljZS5nZXRLZXlUeXBlKHRva2VuKTtcclxuXHRcdFx0XHRpZiAoa2V5VHlwZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBpbmZvVG9rZW4gPSB7IGtleTogdG9rZW4sIHZhbHVlOiB0b2tlbiB9O1xyXG5cdFx0XHRcdGlmIChhcnJheVRva2VuRm9ybWF0dGVkKSB7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHRva2VuRm9ybWF0dGVkIG9mIGFycmF5VG9rZW5Gb3JtYXR0ZWQpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGluZGV4ID0gdG9rZW5Gb3JtYXR0ZWQuaW5kZXhPZih0b2tlbik7XHJcblx0XHRcdFx0XHRcdGlmIChpbmRleCA+PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0aW5mb1Rva2VuLnZhbHVlID0gdG9rZW5Gb3JtYXR0ZWQ7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaW5mb1Rva2VuKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Ly8gbGV0IHRva2VuczogYW55W10gPSBbXTtcclxuXHRcdC8vIGxldCBpID0gdGhpcy5uZXh0VmFsaWRQb3NpdGlvblRva2VucyhzdHJpbmdUZXh0LCAwKTtcclxuXHRcdC8vIGxldCBjb3VudCA9IDA7XHJcblx0XHQvLyB3aGlsZSAoaSA+PSAwICYmIGNvdW50IDw9IDEwKSB7XHJcblx0XHQvLyAgIGxldCBpbmZvVG9rZW46IHt9ID0gbnVsbDtcclxuXHRcdC8vICAgbGV0IG5leHRJOiBudW1iZXIgPSBpO1xyXG5cdFx0Ly8gICBsZXQgY2hhcmFjdGVyID0gc3RyaW5nVGV4dC5zdWJzdHJpbmcoaSwgKGkgKyAxKSk7XHJcblx0XHQvLyAgIGlmIChjaGFyYWN0ZXIgPT0gXCIkXCIpIHtcclxuXHRcdC8vICAgICBsZXQgbmV4dENoYXJhY3RlciA9IHN0cmluZ1RleHQuc3Vic3RyaW5nKChpICsgMSksIChpICsgMikpO1xyXG5cdFx0Ly8gICAgIC8vIFRoZSBuZXh0IGNoYXJhY3RlciBuZWVkIHRvIGJlIGEgeyBzaWduXHJcblx0XHQvLyAgICAgaWYgKG5leHRDaGFyYWN0ZXIgIT0gXCJ7XCIpIHtcclxuXHRcdC8vICAgICAgIGkgPSB0aGlzLm5leHRWYWxpZFBvc2l0aW9uVG9rZW5zKHN0cmluZ1RleHQsIG5leHRJICsgMSk7XHJcblx0XHQvLyAgICAgICBjb250aW51ZTtcclxuXHRcdC8vICAgICB9XHJcblx0XHQvLyAgICAgbGV0IGtleVRva2VuOiBzdHJpbmcgPSBzdHJpbmdUZXh0LnN1YnN0cmluZyhpLCBzdHJpbmdUZXh0LmluZGV4T2YoXCJ9XCIsIGkpICsgMSk7XHJcblx0XHQvLyAgICAgLy8gSWYgdGhlIHRva2VuIGhhdmUgYSB2YWxpZCBrZXkgdHlwZVxyXG5cdFx0Ly8gICAgIGxldCBrZXlUeXBlOiBudW1iZXIgPSBUb2tlblNlcnZpY2UuZ2V0S2V5VHlwZShrZXlUb2tlbi5yZXBsYWNlKFwie1wiLCBcIlwiKS5yZXBsYWNlKFwifVwiLCBcIlwiKSk7XHJcblx0XHQvLyAgICAgaWYgKGtleVR5cGUgPT09IG51bGwpIHtcclxuXHRcdC8vICAgICAgIGkgPSB0aGlzLm5leHRWYWxpZFBvc2l0aW9uVG9rZW5zKHN0cmluZ1RleHQsIG5leHRJICsgMSk7XHJcblx0XHQvLyAgICAgICBjb250aW51ZTtcclxuXHRcdC8vICAgICB9XHJcblx0XHQvLyAgICAgaW5mb1Rva2VuID0ge1xyXG5cdFx0Ly8gICAgICAga2V5OiBrZXlUb2tlbixcclxuXHRcdC8vICAgICAgIHZhbHVlOiBrZXlUb2tlblxyXG5cdFx0Ly8gICAgIH07XHJcblx0XHQvLyAgICAgbmV4dEkgPSBzdHJpbmdUZXh0LmluZGV4T2YoXCJ9XCIsIGkpO1xyXG5cdFx0Ly8gICB9IGVsc2Uge1xyXG5cdFx0Ly8gICAgIGxldCBuZXh0U2lnbjogbnVtYmVyID0gc3RyaW5nVGV4dC5pbmRleE9mKFwiJFwiLCBpKTtcclxuXHRcdC8vICAgICAvLyBXZSBpbmx5IHN1cHBvcnQgI2RhdGUoJCBhbmQgI251bWJlcigkIGluIHRoaXMgMiBzY2VuYXJpb3MgdGhlIGxlbmdodCBjYW4ndCBiZSBtb3JlIHRoYW4gMTAgY2hhcmFjdGVyc1xyXG5cdFx0Ly8gICAgIGlmIChuZXh0U2lnbiA8IDAgfHwgKG5leHRTaWduIC0gaSkgPiAxMCkge1xyXG5cdFx0Ly8gICAgICAgaSA9IHRoaXMubmV4dFZhbGlkUG9zaXRpb25Ub2tlbnMoc3RyaW5nVGV4dCwgbmV4dEkgKyAxKTtcclxuXHRcdC8vICAgICAgIGNvbnRpbnVlO1xyXG5cdFx0Ly8gICAgIH1cclxuXHRcdC8vICAgICBsZXQga2V5VG9rZW46IHN0cmluZyA9IHN0cmluZ1RleHQuc3Vic3RyaW5nKHN0cmluZ1RleHQuaW5kZXhPZihcIiRcIiwgaSksIHN0cmluZ1RleHQuaW5kZXhPZihcIn1cIiwgaSkgKyAxKTtcclxuXHRcdC8vICAgICBsZXQgdmFsdWVUb2tlbjogc3RyaW5nID0gc3RyaW5nVGV4dC5zdWJzdHJpbmcoaSwgc3RyaW5nVGV4dC5pbmRleE9mKFwiKVwiLCBpKSArIDEpO1xyXG5cdFx0Ly8gICAgIGluZm9Ub2tlbiA9IHtcclxuXHRcdC8vICAgICAgIGtleToga2V5VG9rZW4sXHJcblx0XHQvLyAgICAgICB2YWx1ZTogdmFsdWVUb2tlblxyXG5cdFx0Ly8gICAgIH07XHJcblx0XHQvLyAgICAgbmV4dEkgPSBzdHJpbmdUZXh0LmluZGV4T2YoXCIpXCIsIGkpO1xyXG5cdFx0Ly8gICB9XHJcblx0XHQvLyAgIHRva2Vucy5wdXNoKGluZm9Ub2tlbik7XHJcblx0XHQvLyAgIGkgPSB0aGlzLm5leHRWYWxpZFBvc2l0aW9uVG9rZW5zKHN0cmluZ1RleHQsIG5leHRJKTtcclxuXHRcdC8vICAgY291bnQrKztcclxuXHRcdC8vIH1cclxuXHRcdC8vIHJldHVybiB0b2tlbnM7XHJcblx0fVxyXG5cclxuXHRuZXh0VmFsaWRQb3NpdGlvblRva2VucyhzdHJpbmdUZXh0OiBzdHJpbmcsIG5leHRJOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0bGV0IHRva2VuRG9sbGFyU2lnbjogbnVtYmVyID0gc3RyaW5nVGV4dC5pbmRleE9mKCckJywgbmV4dEkpO1xyXG5cdFx0bGV0IHRva2VuTnVtU2lnbjogbnVtYmVyID0gc3RyaW5nVGV4dC5pbmRleE9mKCcjJywgbmV4dEkpO1xyXG5cdFx0bGV0IGk6IG51bWJlciA9XHJcblx0XHRcdHRva2VuRG9sbGFyU2lnbiA8IDAgJiYgdG9rZW5OdW1TaWduID49IDBcclxuXHRcdFx0XHQ/IHRva2VuTnVtU2lnblxyXG5cdFx0XHRcdDogdG9rZW5OdW1TaWduIDwgMCAmJiB0b2tlbkRvbGxhclNpZ24gPj0gMFxyXG5cdFx0XHRcdD8gdG9rZW5Eb2xsYXJTaWduXHJcblx0XHRcdFx0OiB0b2tlbkRvbGxhclNpZ24gPCB0b2tlbk51bVNpZ25cclxuXHRcdFx0XHQ/IHRva2VuRG9sbGFyU2lnblxyXG5cdFx0XHRcdDogdG9rZW5OdW1TaWduO1xyXG5cdFx0cmV0dXJuIGk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJdCByZXVzZXMgcmVwbGFjZVRva2Vuc0Zyb21MaXN0T2JqZWN0UHVibGljIGJ1dCBzZXQgYWxsIGtleXMgbG9iamVjdHRva2VucyBhcyBsb3dlcmNhc2VcclxuXHQgKiBAcGFyYW0gdG9rZW5OYW1lXHJcblx0ICogQHBhcmFtIGZvcm11bGFcclxuXHQgKiBAcGFyYW0gbE9iamVjdFRva2Vuc1xyXG5cdCAqL1xyXG5cdHJlcGxhY2VUb2tlbnNGcm9tTGlzdE9iamVjdFB1YmxpYyhcclxuXHRcdHRva2VuTmFtZTogc3RyaW5nLFxyXG5cdFx0Zm9ybXVsYTogc3RyaW5nLFxyXG5cdFx0bE9iamVjdFRva2VuczogYW55W11cclxuXHQpOiBzdHJpbmcge1xyXG5cdFx0bGV0IGxEYXRhT3JnOiBhbnlbXSA9IFtdO1xyXG5cdFx0aWYgKGxPYmplY3RUb2tlbnMpIHtcclxuXHRcdFx0Zm9yIChsZXQgZGF0YUZvcm0gaW4gbE9iamVjdFRva2Vucykge1xyXG5cdFx0XHRcdGxEYXRhT3JnW2RhdGFGb3JtLnRvTG93ZXJDYXNlKCldID0gbE9iamVjdFRva2Vuc1tkYXRhRm9ybV07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLnJlcGxhY2VUb2tlbnNGcm9tTGlzdE9iamVjdCh0b2tlbk5hbWUsIGZvcm11bGEsIGxEYXRhT3JnKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHRva2VuTmFtZSB0b2tlbiBuYW1lXHJcblx0ICogQHBhcmFtIGZvcm11bGEgU3RyaW5nIHdpdGggdGhlIGZvcm11bGEgdG8gZXhlY3V0ZVxyXG5cdCAqIEBwYXJhbSBsT2JqZWN0VG9rZW5zIExpc3Qgb2YgdG9rZW5zIHdpdGggdGhlIHZhbHVlcyB0byByZXBsYWNlXHJcblx0ICovXHJcblx0cmVwbGFjZVRva2Vuc0Zyb21MaXN0T2JqZWN0KHRva2VuTmFtZTogc3RyaW5nLCBmb3JtdWxhOiBzdHJpbmcsIGxPYmplY3RUb2tlbnM6IGFueSk6IHN0cmluZyB7XHJcblx0XHRpZiAoIWZvcm11bGEgfHwgZm9ybXVsYS5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHR0aHJvdyB7XHJcblx0XHRcdFx0bWVzc2FnZTogJ0xhIGZvcm11bGEgZGVsIHRva2VuICcgKyB0b2tlbk5hbWUgKyAnIGVzdGEgdmFjw61hJyxcclxuXHRcdFx0XHR0aXRsZTogJ0FsZXJ0YSEnLFxyXG5cdFx0XHRcdGVycm9yOlxyXG5cdFx0XHRcdFx0J0xhIGZvcm11bGEgZGVsIHRva2VuICcgKyB0b2tlbk5hbWUgKyAnIGVzdGEgdmFjw61hLiBbZm9ybXVsYVsnICsgZm9ybXVsYSArICddXSdcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdGxldCByZXBsYWNlZFRva2Vuczogc3RyaW5nID0gZm9ybXVsYS50b1N0cmluZygpO1xyXG5cdFx0aWYgKHJlcGxhY2VkVG9rZW5zLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xyXG5cdFx0XHRyZXR1cm4gcmVwbGFjZWRUb2tlbnM7XHJcblx0XHR9XHJcblx0XHQvLyBGaW5kIHRoZSB0b2tlbnMgaW4gdGhlIGZvcm11bGFcclxuXHRcdGxldCB0b2tlbnNBcnJheTogYW55W10gPSB0aGlzLmdldExpc3RUb2tlbnNCeVN0cmluZyhyZXBsYWNlZFRva2Vucyk7XHJcblx0XHRpZiAodG9rZW5zQXJyYXkubGVuZ3RoID09IDApIHtcclxuXHRcdFx0cmV0dXJuIHJlcGxhY2VkVG9rZW5zO1xyXG5cdFx0fVxyXG5cdFx0Ly8gSWYgdGhlcmUgYW55IHRva2VuLCB0cnkgdG8gcmVwbGFjZVxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnNBcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRsZXQgb2JqZWN0VG9rZW4gPVxyXG5cdFx0XHRcdGxPYmplY3RUb2tlbnNbdG9rZW5zQXJyYXlbaV0ua2V5XSAhPT0gdW5kZWZpbmVkXHJcblx0XHRcdFx0XHQ/IGxPYmplY3RUb2tlbnNbdG9rZW5zQXJyYXlbaV0ua2V5XVxyXG5cdFx0XHRcdFx0OiBudWxsO1xyXG5cdFx0XHRsZXQgY2xlYXJLZXk7XHJcblx0XHRcdGlmIChvYmplY3RUb2tlbiA9PSBudWxsKSB7XHJcblx0XHRcdFx0Y2xlYXJLZXkgPSB0b2tlbnNBcnJheVtpXS5rZXkucmVwbGFjZSgnJHsnLCAnJykucmVwbGFjZSgnfScsICcnKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdG9iamVjdFRva2VuID1cclxuXHRcdFx0XHRcdGxPYmplY3RUb2tlbnNbY2xlYXJLZXldICE9PSB1bmRlZmluZWQgPyBsT2JqZWN0VG9rZW5zW2NsZWFyS2V5XSA6IG51bGw7XHJcblxyXG5cdFx0XHRcdGlmIChvYmplY3RUb2tlbiA9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRjbGVhcktleSA9IHRva2Vuc0FycmF5W2ldLmtleVxyXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgneycsICcnKVxyXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgnfScsICcnKVxyXG5cdFx0XHRcdFx0XHQuc3BsaXQoJ18nKVsxXVxyXG5cdFx0XHRcdFx0XHQudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRcdG9iamVjdFRva2VuID1cclxuXHRcdFx0XHRcdFx0bE9iamVjdFRva2Vuc1tjbGVhcktleV0gIT09IHVuZGVmaW5lZCA/IGxPYmplY3RUb2tlbnNbY2xlYXJLZXldIDogbnVsbDtcclxuXHRcdFx0XHRcdGlmIChvYmplY3RUb2tlbiA9PT0gbnVsbCB8fCBvYmplY3RUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGFycmF5S2V5ID0gdG9rZW5zQXJyYXlbaV0ua2V5XHJcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoJ3snLCAnJylcclxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZSgnfScsICcnKVxyXG5cdFx0XHRcdFx0XHRcdC5zcGxpdCgnXycpWzFdXHJcblx0XHRcdFx0XHRcdFx0LnNwbGl0KCcuJyk7XHJcblx0XHRcdFx0XHRcdGlmIChhcnJheUtleS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHZhbHVlID0gbE9iamVjdFRva2VucztcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlLZXkubGVuZ3RoOyBpbmRleCsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgZWxlbWVudCA9IGFycmF5S2V5W2luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChpbmRleCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW2VsZW1lbnRdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRvYmplY3RUb2tlbiA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChvYmplY3RUb2tlbiA9PSBudWxsKSB7XHJcblx0XHRcdFx0Ly8gSWYgbm90IGZpbmQgdGhlIHRva2VuLCBieSBkZWZhdWx0IHB1dCBhbiBlbXB0eSBzdHJpbmdcclxuXHRcdFx0XHQvKmlmIChUb2tlblNlcnZpY2UuZXhjbHVkZWRUb2tlbi5pbmRleE9mKGNsZWFyS2V5KSA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXHJcblx0XHRcdFx0XHRcdCdFbCB0b2tlbiAnICsgdG9rZW5zQXJyYXlbaV0udmFsdWUgKyAnIG5vIGZ1ZSBlbmNvbnRyYWRvLicsXHJcblx0XHRcdFx0XHRcdGxPYmplY3RUb2tlbnMsXHJcblx0XHRcdFx0XHRcdHRva2Vuc0FycmF5XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH0qL1xyXG5cdFx0XHRcdG9iamVjdFRva2VuID0gJyc7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG9iamVjdFRva2VuICE9IG51bGwpIHtcclxuXHRcdFx0XHRsZXQgdmFsdWU6IGFueSA9IE51bWJlcihvYmplY3RUb2tlbilcclxuXHRcdFx0XHRcdD8gb2JqZWN0VG9rZW5cclxuXHRcdFx0XHRcdDogQXJyYXkuaXNBcnJheShvYmplY3RUb2tlbilcclxuXHRcdFx0XHRcdD8gSlNPTi5zdHJpbmdpZnkob2JqZWN0VG9rZW4pXHJcblx0XHRcdFx0XHQ6IFwiJ1wiICsgb2JqZWN0VG9rZW4gKyBcIidcIjtcclxuXHRcdFx0XHRyZXBsYWNlZFRva2VucyA9IHRoaXMucmVwbGFjZVRva2VuKHJlcGxhY2VkVG9rZW5zLCB0b2tlbnNBcnJheVtpXS52YWx1ZSwgdmFsdWUpO1xyXG5cdFx0XHRcdC8vIH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gICBjb25zb2xlLmVycm9yKGxPYmplY3RUb2tlbnMsIHRva2Vuc0FycmF5KTtcclxuXHRcdFx0XHQvLyAgIHRocm93IHtcclxuXHRcdFx0XHQvLyAgICAgbWVzc2FnZTogXCJObyBzZSBlbmNvbnRyw7MgdmFsb3IgcGFyYSB1biB0b2tlblwiLFxyXG5cdFx0XHRcdC8vICAgICB0aXRsZTogXCJBbGVydGEhXCIsXHJcblx0XHRcdFx0Ly8gICAgIGVycm9yOiBcIkVsIHRva2VuIFwiICsgdG9rZW5zQXJyYXlbaV0udmFsdWUgKyBcIiBubyBmdWUgZW5jb250cmFkby5cIlxyXG5cdFx0XHRcdC8vICAgfTtcclxuXHRcdFx0XHQvL1xyXG5cdFx0XHRcdC8vIFNpIGVzIGxhIHVsdGltYSBpdGVyYWNpb24geSBsYSBmb3JtdWxhIHRpZW5lIFsgZXMgcG9ycXVlIHRpZW5lIHVuIGFycmF5IGVuIGVsIHZhbG9yIHF1ZSByZXNvbHZpbyBlbCB0b2tlblxyXG5cdFx0XHRcdGlmIChpID09IHRva2Vuc0FycmF5Lmxlbmd0aCAtIDEgJiYgcmVwbGFjZWRUb2tlbnMuaW5jbHVkZXMoJ1snKSkge1xyXG5cdFx0XHRcdFx0Ly8gU2UgcG9uZW4gdG9kb3MgbG9zIG9wZXJhbmRvcyBjb21vIGVsZW1lbnRvcyBlbiB1biBhcnJheSBbJ2V4cHJlc2lvbiBhJywgJyYmJywgJ0V4cHJlc2lvbiBCJ11cclxuXHRcdFx0XHRcdGxldCBmb3JtRXhwcmVzc2lvbnM6IHN0cmluZ1tdID0gcmVwbGFjZWRUb2tlbnMuc3BsaXQoLyAoXFx8XFx8fCYmKSAvKTtcclxuXHRcdFx0XHRcdGxldCBsQXV4Zm9ybUV4cHJlc3Npb246IHN0cmluZ1tdID0gW107XHJcblx0XHRcdFx0XHRmb3JtRXhwcmVzc2lvbnMuZm9yRWFjaCgoZXhwcmVzc2lvbjogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChleHByZXNzaW9uLmNoYXJBdCgwKSA9PSAnWycpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgaXNUYWdGb3VuZDogc3RyaW5nID0gJyc7XHJcblx0XHRcdFx0XHRcdFx0aXNUYWdGb3VuZCA9IHRoaXMuZmluZFRhZyhleHByZXNzaW9uKTtcclxuXHRcdFx0XHRcdFx0XHRsQXV4Zm9ybUV4cHJlc3Npb24ucHVzaChpc1RhZ0ZvdW5kKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRsQXV4Zm9ybUV4cHJlc3Npb24ucHVzaChleHByZXNzaW9uKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXBsYWNlZFRva2VucyA9IGxBdXhmb3JtRXhwcmVzc2lvbi5qb2luKCcgJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVwbGFjZWRUb2tlbnM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBNRXRvZG8gcXVlIHRlbmllbmRvIHVuYSBleHByZXNpb24gZGUgbGEgZm9ybWEgWyd0YWcxJywgJ3RhZzInXT09dGFnM1xyXG5cdCAqIGV2YWx1YSBzaSB0YWczIGhhY2UgcGFydGUgZGVsIGFycmF5IHNpIHRpZW5lIGVsIG9wZXJhZG9yID09LlxyXG5cdCAqIFNpIHRpZW5lIGVsIG9wZXJhZG9yICE9IGV4YW1pbmEgcXVlIHRhZzMgbm8gaGFnYSBwYXJ0ZSBkZWwgYXJyYXkrXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZXhwcmVzc2lvbiBPcGVyYW5kbyBxdWUgZXZhbHVhIHRhZy4gRXMgZGUgbGEgZm9ybWEgWyd0YWcxJywgJ3RhZzInXT09dGFnM1xyXG5cdCAqIEByZXR1cm5zIFJldG9ybmEgJ3RydWUnIG8gJ2ZhbHNlJyBlbiBzdHJpbmcgcXVlIGRlc3B1ZXMgc2VyYSBwYXNhZG8gYSB1biBldmFsKClcclxuXHQgKiBtYXMgYWRlbGFudGUgZW4gZWwgZmx1am9cclxuXHQgKi9cclxuXHRmaW5kVGFnKGV4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRsZXQgcmVnZXhPcGVyYXRvciA9IG5ldyBSZWdFeHAoJyg9PT18PT18IT09fCE9KScpO1xyXG5cdFx0Ly8gUmV0b3JuYSBlbCBvcGVyYWRvclxyXG5cdFx0bGV0IG9wZXJhdG9yOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24ubWF0Y2gocmVnZXhPcGVyYXRvcik7XHJcblx0XHQvLyBTaSBubyBlbmN1ZW50cmEgdW4gb3BlcmFkb3Igc2VndW4gZWwgcGF0cm9uIHJldG9ybmEgJ2ZhbHNlJ1xyXG5cdFx0Ly8gcGFyYSBldml0YXIgcmVzdWx0YWRvcyBpbmVzcGVyYWRvc1xyXG5cdFx0aWYgKG9wZXJhdG9yID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignTm8gc2UgZW5jb250cm8gdW4gb3BlcmFkb3IgcGVybWl0aWRvIHBhcmEgbGEgZXhwcmVzaW9uJyk7XHJcblx0XHRcdHJldHVybiAnZmFsc2UnO1xyXG5cdFx0fVxyXG5cdFx0Ly8gU2VwYXJhIGxhIHNlbnRlbmNpYSBwb3IgZWwgb3BlcmFkb3JcclxuXHRcdC8vIExhIHByaW1lcmEgcGFydGUgZXMgZWwgdmFsb3IgcG9yIGVsIGN1YWwgc2UgcmVtcGxhemEgZWwgdG9rZW4gcXVlIGVzIHVuIGFycmF5IGVuIHN0cmluZyBcIlsnYScsICdiJ11cIlxyXG5cdFx0Ly8gRWwgc2VndW5kbyBlcyBlbCB2YWxvciBjb24gZWwgY3VhbCBzZSB2YSBhIGNvbXBhcmFyXHJcblx0XHRsZXQgdmFsdWVUb2tlbiwgdmFsdWVUb0NvbXBhcmU7XHJcblx0XHRbdmFsdWVUb2tlbiwgdmFsdWVUb0NvbXBhcmVdID0gZXhwcmVzc2lvbi5zcGxpdChvcGVyYXRvclswXSk7XHJcblx0XHQvLyBTZSBsaW1waWEgZWwgc3RyaW5nIGNvcnJlc3BvbmRpZW50ZSBhbCBhcnJheSBwYXJhIHF1ZSBsb3MgZWxlbWVudG9zIHF1ZWRlbiBzZXBhcmFkb3MgcG9yIFwiLFwiXHJcblx0XHR2YWx1ZVRva2VuID0gdmFsdWVUb2tlbi5yZXBsYWNlKC9bXmEtekEtWjAtOSAsXS9nLCAnJyk7XHJcblx0XHQvLyBTaSBubyBoYXkgdGFncyBhc29jaWFkb3MgYWwgcmVnaXN0cm8gc2UgZGV2dWVsdmUgJ2ZhbHNlJ1xyXG5cdFx0aWYgKCF2YWx1ZVRva2VuKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ05vIGhheSB0YWdzIGFzb2NpYWRvcyBhIGVzdGEgYXBsaWNhY2nDs24nKTtcclxuXHRcdFx0cmV0dXJuICdmYWxzZSc7XHJcblx0XHR9XHJcblx0XHQvLyBTZSBsaW1waWEgZWwgc3RyaW5nIGNvcnJlc3BvbmRpZW50ZSBhbCB2YWxvciBwb3IgY29tcGFyYXJcclxuXHRcdHZhbHVlVG9Db21wYXJlID0gdmFsdWVUb0NvbXBhcmUucmVwbGFjZSgvW15hLXpBLVowLTkgXS9nLCAnJyk7XHJcblx0XHQvLyBFbCBzdHJpbmcgY29ycmVzcG9uZGllbnRlIGFsIGFycmF5IHBhc2EgYSBzZXIgdGlwbyBhcnJheVxyXG5cdFx0dmFsdWVUb2tlbiA9IHZhbHVlVG9rZW4uc3BsaXQoJywnKTtcclxuXHJcblx0XHQvLyBTZSB0cmF0YSBkZSBjb25zdGF0YXIgc2kgZWwgdmFsb3IgYSBjb21wYXJhciBzZSBlbmN1ZXRyYSBvIG5vIGRlbnRyb1xyXG5cdFx0Ly8gU2kgZWwgb3BlcmFkb3IgcXVlIHNlIGVuY29udHJvID09IHJldHVybmEgdHJ1ZSBzaSBsbyBlbmN1ZW50cmFcclxuXHRcdGxldCBpc1RhZ0ZvdW5kOiBib29sZWFuID0gdHJ1ZTtcclxuXHRcdHN3aXRjaCAob3BlcmF0b3JbMF0pIHtcclxuXHRcdFx0Y2FzZSAnPT0nOlxyXG5cdFx0XHRcdGlzVGFnRm91bmQgPSB2YWx1ZVRva2VuLnNvbWUoKHRhZykgPT4gdGFnID09IHZhbHVlVG9Db21wYXJlKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnPT09JzpcclxuXHRcdFx0XHRpc1RhZ0ZvdW5kID0gdmFsdWVUb2tlbi5zb21lKCh0YWcpID0+IHRhZyA9PT0gdmFsdWVUb0NvbXBhcmUpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICchPT0nOlxyXG5cdFx0XHRcdGlzVGFnRm91bmQgPSB2YWx1ZVRva2VuLnNvbWUoKHRhZykgPT4gdGFnICE9PSB2YWx1ZVRvQ29tcGFyZSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJyE9JzpcclxuXHRcdFx0XHRpc1RhZ0ZvdW5kID0gdmFsdWVUb2tlbi5zb21lKCh0YWcpID0+IHRhZyAhPSB2YWx1ZVRvQ29tcGFyZSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRleHByZXNzaW9uID0gaXNUYWdGb3VuZCA/ICd0cnVlJyA6ICdmYWxzZSc7XHJcblx0XHRyZXR1cm4gZXhwcmVzc2lvbjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRyeSB0byBldmFsIHRoZSBmb3JtdWxhIGRlcGVuZCBvZiB0aGUgdHlwZSBvZiBmaWVsZHMuXHJcblx0ICogQHBhcmFtIGxTdGF0aWNUb2tlblxyXG5cdCAqIEBwYXJhbSBmb3JtdWxhTmFtZVxyXG5cdCAqIEBwYXJhbSBmb3JtdWxhXHJcblx0ICovXHJcblx0dmFsaWRhdGVGb3JtdWxhKGxTdGF0aWNUb2tlbjogYW55LCBmb3JtdWxhTmFtZTogc3RyaW5nLCBmb3JtdWxhOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdGxldCBldmFsRm9ybXVsYTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0Ly8gVG8gdmFsaWRhdGUgdGhlIGZvcm11bGEsIGZpcnN0IG9yZ2FuaXplIHRoZSBpbmZvIHRvIGtleSAtIHZhbHVlIGFycmF5XHJcblx0XHRsZXQgb2JqZWN0VG9rZW5zOiBhbnlbXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgcGFuZWwgb2YgbFN0YXRpY1Rva2VuKSB7XHJcblx0XHRcdGZvciAobGV0IGdyb3VwVG9rZW4gb2YgcGFuZWwudmFsdWUpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBzdGF0aWNUb2tlbiBvZiBncm91cFRva2VuLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBhcnJheVRva2VuSW5mbyBvZiBzdGF0aWNUb2tlbikge1xyXG5cdFx0XHRcdFx0XHRvYmplY3RUb2tlbnNbYXJyYXlUb2tlbkluZm8ua2V5XSA9IGFycmF5VG9rZW5JbmZvLm9iamVjdFxyXG5cdFx0XHRcdFx0XHRcdD8gYXJyYXlUb2tlbkluZm8ub2JqZWN0LnR5cGUgPT0gJ251bWJlcidcclxuXHRcdFx0XHRcdFx0XHRcdD8gJzAnXHJcblx0XHRcdFx0XHRcdFx0XHQ6ICcnXHJcblx0XHRcdFx0XHRcdFx0OiAnJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHRyeSB7XHJcblx0XHRcdGZvcm11bGEgPSB0aGlzLnJlcGxhY2VUb2tlbnNGcm9tTGlzdE9iamVjdChmb3JtdWxhTmFtZSwgZm9ybXVsYSwgb2JqZWN0VG9rZW5zKTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdC8vY29uc29sZS5lcnJvcihlcnJvcik7XHJcblx0XHRcdHRocm93IGVycm9yO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZvcm11bGEgIT09IG51bGwpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gZm9ybXVsYS5zdGFydHNXaXRoKCdmaWxlOi8vJykgPyBmb3JtdWxhIDogZXZhbChmb3JtdWxhKTtcclxuXHRcdFx0XHRldmFsRm9ybXVsYSA9IHRydWU7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHQvL2NvbnNvbGUuZXJyb3IoXCJFcnJvciBldmFsdWF0aW5nIHRoZSBmb3JtdWxhXCIsIGUpO1xyXG5cdFx0XHRcdHRocm93IHtcclxuXHRcdFx0XHRcdG1lc3NhZ2U6ICdMYSBmb3JtdWxhIG5vIGZ1ZSBwb3NpYmxlIGV2YWx1YXInLFxyXG5cdFx0XHRcdFx0dGl0bGU6ICdBbGVydGEhJyxcclxuXHRcdFx0XHRcdGVycm9yOiBlXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGV2YWxGb3JtdWxhO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29uZmlnQ2xvbmluZ1Rva2VuTWFwKG9sZFBQUDogbnVtYmVyLCBuZXdQUFA6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcclxuXHRcdFx0dGhpcy5lbnZpcm9ubWVudC5ob3N0LmJhY2tlbmQuY29uZmlndXJhdGlvbiArICd0b2tlbi9nZXRDb25maWdDbG9uaW5nVG9rZW5NYXAnLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0cGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpXHJcblx0XHRcdFx0XHQuc2V0KCdvbGRQUFAnLCBvbGRQUFAudG9TdHJpbmcoKSlcclxuXHRcdFx0XHRcdC5zZXQoJ25ld1BQUCcsIG5ld1BQUC50b1N0cmluZygpKVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iXX0=
|