sliftutils 1.8.5 → 1.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/treeSummary.ts.cache +2 -2
- package/misc/dist/getSecret.ts.cache +2 -2
- package/package.json +1 -1
- package/render-utils/dist/LocalStorageParam.ts.cache +62 -0
- package/security/authorizedKeys/daemon/dist/revocation.ts.cache +6 -4
- package/security/authorizedKeys/daemon/revocation.ts +4 -2
- package/security/authorizedKeys/dist/unrevokeCli.ts.cache +6 -3
- package/security/authorizedKeys/unrevoke.ts +31 -8
- package/security/authorizedKeys/unrevokeCli.ts +17 -2
- package/security/machines/addMachine.ts +2 -2
- package/security/machines/dist/machines.ts.cache +13 -6
- package/security/machines/dist/printMachineId.ts.cache +6 -3
- package/security/machines/machines.ts +11 -4
- package/security/machines/printMachineId.ts +2 -1
- package/security/signedFiles/signFilesCli.ts +2 -1
- package/storage/dist/ArchivesDisk.ts.cache +2 -2
- package/storage/dist/IArchives.ts.cache +2 -2
- package/storage/dist/StreamingLogs.ts.cache +2 -2
- package/storage/dist/TransactionFile.ts.cache +2 -2
- package/storage/dist/archiveHelpers.ts.cache +2 -2
- package/storage/dist/backblaze.ts.cache +2 -2
- package/storage/proxydatabase/dist/ivfEmbeddingDatabase.ts.cache +19 -4
- package/storage/proxydatabase/ivfEmbeddingDatabase.ts +16 -2
- package/storage/remoteStorage/dist/ArchivesDelayed.ts.cache +2 -2
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -2
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
- package/storage/remoteStorage/dist/accessStats.ts.cache +2 -2
- package/storage/remoteStorage/dist/blobStore.ts.cache +2 -2
- package/storage/remoteStorage/dist/bucketDisk.ts.cache +2 -2
- package/storage/remoteStorage/dist/certTrustModal.tsx.cache +2 -2
- package/storage/remoteStorage/dist/chainStartup.ts.cache +2 -2
- package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
- package/storage/remoteStorage/dist/createArchives.ts.cache +2 -2
- package/storage/remoteStorage/dist/deployTakeover.ts.cache +2 -2
- package/storage/remoteStorage/dist/intermediateManagement.ts.cache +2 -2
- package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
- package/storage/remoteStorage/dist/remoteConfig.ts.cache +2 -2
- package/storage/remoteStorage/dist/serverConfig.ts.cache +2 -2
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +2 -2
- package/storage/remoteStorage/dist/sourcesList.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageController.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageLogs.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageServerState.ts.cache +2 -2
- package/storage/remoteStorage/dist/storeConfig.ts.cache +2 -2
- package/storage/remoteStorage/dist/storePlan.ts.cache +2 -2
- package/storage/remoteStorage/dist/storeSources.ts.cache +2 -2
- package/storage/remoteStorage/dist/storeSync.ts.cache +2 -2
- package/storage/remoteStorage/dist/validation.ts.cache +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.TreeSummary = void 0;
|
|
4
4
|
const misc_1 = require("socket-function/src/misc");
|
|
@@ -356,4 +356,4 @@ class TreeSummary {
|
|
|
356
356
|
}
|
|
357
357
|
exports.TreeSummary = TreeSummary;
|
|
358
358
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZVN1bW1hcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0cmVlU3VtbWFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBZ0Q7QUFFaEQsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUM7QUFDckMsTUFBTSxpQkFBaUIsR0FBRyxJQUFLLENBQUM7QUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxLQUFNLENBQUM7QUFDakMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDL0IsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUF3Q25DLE1BQWEsV0FBVztJQUtwQixZQUFvQixNQVFuQjtRQVJtQixXQUFNLEdBQU4sTUFBTSxDQVF6QjtRQVhPLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFZbEIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ2hGLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxvQkFBb0IsQ0FBQztRQUNyRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsd0JBQXdCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFTSxHQUFHLENBQUMsS0FBUTtRQUNmLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNULEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQzlGLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLEdBQUcsS0FBSyxDQUFDO2dCQUNiLE1BQU07WUFDVixDQUFDO1lBQ0QsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN4QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN0RCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixPQUFPLE1BQU0sR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNsRixNQUFNLEVBQUUsQ0FBQztZQUNiLENBQUM7WUFDRCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLElBQUksR0FBRyxLQUFLLENBQUM7WUFDYixHQUFHLElBQUksTUFBTSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNmLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7SUFFRCwwTUFBME07SUFDbE0sU0FBUyxDQUFDLElBQWlCLEVBQUUsUUFBZ0I7UUFDakQsSUFBSSxNQUFNLEdBQWdCO1lBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUMxQyxDQUFDO1FBQ0YsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxtQkFBbUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCw0WEFBNFg7SUFDclgsWUFBWSxDQUFDLFFBQWdCO1FBQ2hDLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pGLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksT0FBTyxHQUFzQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQUUsU0FBUztnQkFDNUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3BFLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDO2dCQUFFLE1BQU07WUFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3RCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxJQUFJLEdBQUcsQ0FBQztZQUNoQixDQUFDO1lBQ0QsT0FBTztnQkFDSCxJQUFJO2dCQUNKLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTthQUN2QixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFBLFdBQUksRUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFzQjtRQUN0QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3RFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ2pELE9BQU8sT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN6RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELHlGQUF5RjtJQUNqRixNQUFNLENBQUMsS0FBc0I7UUFDakMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5Qiw2SUFBNkk7WUFDN0ksSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsS0FBSyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxPQUFPO2dCQUNILEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDeEQsQ0FBQztRQUNOLENBQUM7UUFDRCxnSEFBZ0g7UUFDaEgsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzVDLElBQUksYUFBYSxHQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLE9BQU87Z0JBQ0gsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDbEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUM7YUFDN0QsQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLFVBQVUsQ0FBQyxRQUFrQyxFQUFFLE1BQVcsRUFBRSxJQUFZO1FBQzVFLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLFFBQWlDLENBQUM7UUFDdEMsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM5RixZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQixPQUFPO1lBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztTQUN6QyxDQUFDO0lBQ04sQ0FBQztJQUVPLGFBQWEsQ0FBQyxRQUFrQyxFQUFFLE1BQVcsRUFBRSxJQUFZO1FBQy9FLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdDLEtBQUssSUFBSSxLQUFLLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxLQUFLLElBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRU8sWUFBWSxDQUFDLElBQWlCLEVBQUUsSUFBWTtRQUNoRCx3U0FBd1M7UUFDeFMsSUFBSSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ25DLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDMUIsYUFBYSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFDRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDdEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QixhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUNELEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUN2QyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQztRQUNELDhGQUE4RjtRQUM5RixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUNwQixDQUFDO1FBQ0QsT0FBTztZQUNILElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSTtZQUNKLElBQUk7WUFDSixRQUFRO1lBQ1IsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGFBQWE7U0FDOUQsQ0FBQztJQUNOLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFzQjtRQUM3QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN2RCxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hCLEtBQUssSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO29CQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDeEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkUsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNoRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO1FBQ0QsS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsNlVBQTZVO0lBQ3JVLEtBQUs7UUFDVCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztRQUNyRSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUNuQyxJQUFJLElBQUksSUFBSSxDQUFDO1lBQUUsT0FBTztRQUN0QixJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztRQUM5QyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQWlCLEVBQWEsRUFBRTtZQUMzQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7WUFDYixLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4QixPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUM7UUFDRixJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFHLENBQUMsSUFBaUIsRUFBYSxFQUFFO1lBQzVDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBQ0YsOEtBQThLO1FBQzlLLElBQUksT0FBTyxHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUU7WUFDcEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQztvQkFBRSxPQUFPO2dCQUNyQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ2pDLEtBQUssSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDakMsT0FBTztnQkFDWCxDQUFDO2dCQUNELEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO29CQUN2QyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pCLENBQUM7WUFDTCxDQUFDLENBQUM7WUFDRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQUNGLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLHVCQUF1QixFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDL0MsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QixJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ2YsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDZCxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksYUFBYSxHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFO1lBQ3RDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQztnQkFBRSxPQUFPO1lBQ3JDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2IsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdEIsT0FBTztZQUNYLENBQUM7WUFDRCxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDdkMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQXBXRCxrQ0FvV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzb3J0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuXG5jb25zdCBERUZBVUxUX09VVFBVVF9DT1VOVCA9IDEwMDtcbmNvbnN0IFRSQUNLRURfTk9ERVNfUEVSX09VVFBVVCA9IDEwMDtcbmNvbnN0IE1JTl9UUkFDS0VEX05PREVTID0gMV8wMDA7XG5jb25zdCBNQVhfVFJBQ0tFRF9OT0RFUyA9IDEwXzAwMDtcbmNvbnN0IFBSVU5FX1RBUkdFVF9ESVZJU09SID0gMjtcbmNvbnN0IFBSVU5FX1NFQVJDSF9JVEVSQVRJT05TID0gMjA7XG5cbnR5cGUgVHJlZU5vZGU8Uz4gPSB7XG4gICAgLy8gVGhlIHBhdGggZnJhZ21lbnQgdGhpcyBub2RlIGNvdmVycywgaS5lLiB0aGUgZWRnZSBmcm9tIGl0cyBwYXJlbnQuIENoaWxkcmVuIGFyZSBrZXllZCBieSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZWlyIGxhYmVsLlxuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY2hpbGRyZW46IE1hcDxzdHJpbmcsIFRyZWVOb2RlPFM+PjtcbiAgICAvLyBBZ2dyZWdhdGUgb2YgZXZlcnkgdmFsdWUgd2hvc2UgcGF0aCBwYXNzZXMgdGhyb3VnaCAob3IgZW5kcyBhdCkgdGhpcyBub2RlLlxuICAgIHN1bW1hcnk6IFM7XG4gICAgLy8gQWdncmVnYXRlIG9mIG9ubHkgdGhlIHZhbHVlcyB3aG9zZSBwYXRoIGVuZHMgZXhhY3RseSBhdCB0aGlzIG5vZGUuXG4gICAgc2VsZlN1bW1hcnk/OiBTO1xuICAgIC8vIEFnZ3JlZ2F0ZSBvZiB2YWx1ZXMgdGhhdCB3ZXJlIGJlbG93IHRoaXMgbm9kZSBiZWZvcmUgcHJ1bmluZyBjb2xsYXBzZWQgdGhlaXIgYnJhbmNoZXMuIFRoZWlyIHBhdGggZGV0YWlsIGlzIGdvbmUsIGJ1dCB0aGVpciBkYXRhIGlzIHByZXNlcnZlZC5cbiAgICB0cnVuY2F0ZWRTdW1tYXJ5PzogUztcbn07XG5cbmV4cG9ydCB0eXBlIFN1bW1hcnlFbnRyeTxTPiA9IHtcbiAgICAvLyBFbmRzIHdpdGggXCIqXCIgdW5sZXNzIHRoZSBlbnRyeSBpcyBhIHNpbmdsZSBleGFjdCBwYXRoIHRoYXQgd2FzIGhlYXZ5IGVub3VnaCB0byBzdGFuZCBvbiBpdHMgb3duLlxuICAgIHBhdGg6IHN0cmluZztcbiAgICAvLyBcInNlbGZcIiA9IHZhbHVlcyB3aG9zZSBwYXRoIGlzIGV4YWN0bHkgcGF0aC4gXCJzdWJ0cmVlXCIgPSBldmVyeSB2YWx1ZSB3aG9zZSBwYXRoIHN0YXJ0cyB3aXRoIHBhdGguIFwiZ3JvdXBcIiA9IHZhbHVlcyB1bmRlciBwYXRoIGtlcHQgY29tYmluZWQgKGxpZ2h0IHNpYmxpbmcgYnJhbmNoZXMsIGNoYWluIGxlZnRvdmVycywgb3IgYm90aCkgYmVjYXVzZSBub25lIHdhcyBoZWF2eSBlbm91Z2ggdG8gZGVzZXJ2ZSBpdHMgb3duIGVudHJ5LiBcInRydW5jYXRlZFwiID0gdmFsdWVzIHVuZGVyIHBhdGggd2hvc2UgZGV0YWlsIHdhcyBwcnVuZWQgYXdheS5cbiAgICBraW5kOiBcInNlbGZcIiB8IFwic3VidHJlZVwiIHwgXCJncm91cFwiIHwgXCJ0cnVuY2F0ZWRcIjtcbiAgICBzdW1tYXJ5OiBTO1xuICAgIHdlaWdodDogbnVtYmVyO1xufTtcblxudHlwZSBQZW5kaW5nRW50cnk8Uz4gPSB7XG4gICAga2luZDogXCJzZWxmXCIgfCBcInN1YnRyZWVcIiB8IFwiZ3JvdXBcIiB8IFwidHJ1bmNhdGVkXCI7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIG5vZGU/OiBUcmVlTm9kZTxTPjtcbiAgICAvLyBXaGVyZSBub2RlIGFjdHVhbGx5IHNpdHMgd2hlbiBwYXRoIGNvbXByZXNzaW9uIGRlc2NlbmRlZCBhIHNpbmdsZS1jaGlsZCBjaGFpbiBwYXN0IGNhcnJpZWQgcmVzaWR1ZXM7IGVxdWFscyBwYXRoIHdoZW4gbm8gcmVzaWR1ZXMgd2VyZSBjYXJyaWVkLlxuICAgIG5vZGVQYXRoPzogc3RyaW5nO1xuICAgIG1lbWJlcnM/OiBNYXA8c3RyaW5nLCBUcmVlTm9kZTxTPj47XG4gICAgLy8gU2VsZi90cnVuY2F0ZWQgc3VtbWFyaWVzIHRoYXQgc2l0IGJldHdlZW4gcGF0aCBhbmQgbm9kZSAoZm9yIFwic3VidHJlZVwiKSwgb3IgdGhlIGxvb3NlIHN1bW1hcmllcyBvZiBhIGNvbWJpbmVkIGVudHJ5IChmb3IgXCJncm91cFwiL1widHJ1bmNhdGVkXCIpLlxuICAgIGV4dHJhcz86IFNbXTtcbiAgICB3ZWlnaHQ6IG51bWJlcjtcbn07XG5cbnR5cGUgTm9kZVN0YXRzID0ge1xuICAgIHNpemU6IG51bWJlcjtcbiAgICB3ZWlnaHQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjbGFzcyBUcmVlU3VtbWFyeTxULCBTPiB7XG4gICAgcHJpdmF0ZSByb290OiBUcmVlTm9kZTxTPjtcbiAgICBwcml2YXRlIG5vZGVDb3VudCA9IDE7XG4gICAgcHJpdmF0ZSBtYXhUcmFja2VkTm9kZXM6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiB7XG4gICAgICAgIGdldFBhdGg6ICh2YWx1ZTogVCkgPT4gc3RyaW5nO1xuICAgICAgICBjcmVhdGVTdW1tYXJ5OiAoKSA9PiBTO1xuICAgICAgICBhZGRUb1N1bW1hcnk6ICh2YWx1ZTogVCwgc3VtbWFyeTogUykgPT4gdm9pZDtcbiAgICAgICAgbWVyZ2VTdW1tYXJpZXM6ICh0YXJnZXQ6IFMsIHNvdXJjZTogUykgPT4gdm9pZDtcbiAgICAgICAgZ2V0V2VpZ2h0OiAoc3VtbWFyeTogUykgPT4gbnVtYmVyO1xuICAgICAgICAvLyBTaXplcyB0aGUgaW50ZXJuYWwgdHJlZSwgd2hpY2gga2VlcHMgcm91Z2hseSBUUkFDS0VEX05PREVTX1BFUl9PVVRQVVQgdGltZXMgdGhpcyBtYW55IG5vZGVzIHNvIG91dHB1dCBncmFudWxhcml0eSBkZWNpc2lvbnMgaGF2ZSBkZXRhaWwgdG8gd29yayB3aXRoLlxuICAgICAgICBleHBlY3RlZE91dHB1dENvdW50PzogbnVtYmVyO1xuICAgIH0pIHtcbiAgICAgICAgdGhpcy5yb290ID0geyBsYWJlbDogXCJcIiwgY2hpbGRyZW46IG5ldyBNYXAoKSwgc3VtbWFyeTogY29uZmlnLmNyZWF0ZVN1bW1hcnkoKSB9O1xuICAgICAgICBsZXQgb3V0cHV0Q291bnQgPSBjb25maWcuZXhwZWN0ZWRPdXRwdXRDb3VudCB8fCBERUZBVUxUX09VVFBVVF9DT1VOVDtcbiAgICAgICAgdGhpcy5tYXhUcmFja2VkTm9kZXMgPSBNYXRoLm1pbihNYXRoLm1heChvdXRwdXRDb3VudCAqIFRSQUNLRURfTk9ERVNfUEVSX09VVFBVVCwgTUlOX1RSQUNLRURfTk9ERVMpLCBNQVhfVFJBQ0tFRF9OT0RFUyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZCh2YWx1ZTogVCkge1xuICAgICAgICBsZXQgcGF0aCA9IHRoaXMuY29uZmlnLmdldFBhdGgodmFsdWUpO1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMucm9vdDtcbiAgICAgICAgdGhpcy5jb25maWcuYWRkVG9TdW1tYXJ5KHZhbHVlLCBub2RlLnN1bW1hcnkpO1xuICAgICAgICBsZXQgcG9zID0gMDtcbiAgICAgICAgd2hpbGUgKHBvcyA8IHBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGQgPSBub2RlLmNoaWxkcmVuLmdldChwYXRoW3Bvc10pO1xuICAgICAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgICAgIGNoaWxkID0geyBsYWJlbDogcGF0aC5zbGljZShwb3MpLCBjaGlsZHJlbjogbmV3IE1hcCgpLCBzdW1tYXJ5OiB0aGlzLmNvbmZpZy5jcmVhdGVTdW1tYXJ5KCkgfTtcbiAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnNldChwYXRoW3Bvc10sIGNoaWxkKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVDb3VudCsrO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmFkZFRvU3VtbWFyeSh2YWx1ZSwgY2hpbGQuc3VtbWFyeSk7XG4gICAgICAgICAgICAgICAgbm9kZSA9IGNoaWxkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxhYmVsID0gY2hpbGQubGFiZWw7XG4gICAgICAgICAgICBsZXQgbGltaXQgPSBNYXRoLm1pbihsYWJlbC5sZW5ndGgsIHBhdGgubGVuZ3RoIC0gcG9zKTtcbiAgICAgICAgICAgIGxldCBjb21tb24gPSAxO1xuICAgICAgICAgICAgd2hpbGUgKGNvbW1vbiA8IGxpbWl0ICYmIGxhYmVsLmNoYXJDb2RlQXQoY29tbW9uKSA9PT0gcGF0aC5jaGFyQ29kZUF0KHBvcyArIGNvbW1vbikpIHtcbiAgICAgICAgICAgICAgICBjb21tb24rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21tb24gPCBsYWJlbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0Tm9kZShjaGlsZCwgY29tbW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmFkZFRvU3VtbWFyeSh2YWx1ZSwgY2hpbGQuc3VtbWFyeSk7XG4gICAgICAgICAgICBub2RlID0gY2hpbGQ7XG4gICAgICAgICAgICBwb3MgKz0gY29tbW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZWxmU3VtbWFyeSA9IG5vZGUuc2VsZlN1bW1hcnk7XG4gICAgICAgIGlmICghc2VsZlN1bW1hcnkpIHtcbiAgICAgICAgICAgIHNlbGZTdW1tYXJ5ID0gdGhpcy5jb25maWcuY3JlYXRlU3VtbWFyeSgpO1xuICAgICAgICAgICAgbm9kZS5zZWxmU3VtbWFyeSA9IHNlbGZTdW1tYXJ5O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlnLmFkZFRvU3VtbWFyeSh2YWx1ZSwgc2VsZlN1bW1hcnkpO1xuICAgICAgICBpZiAodGhpcy5ub2RlQ291bnQgPiB0aGlzLm1heFRyYWNrZWROb2Rlcykge1xuICAgICAgICAgICAgdGhpcy5wcnVuZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BsaXRzIGEgbm9kZSdzIGVkZ2UgbGFiZWwgYXQgbGFiZWxQb3MsIGluc2VydGluZyBhIG5ldyBwYXJlbnQgY292ZXJpbmcgdGhlIHByZWZpeC4gVGhlIHByZWZpeCBub2RlJ3Mgc3VtbWFyeSBpcyBhIG1lcmdlLWNsb25lIG9mIHRoZSBvcmlnaW5hbCBhZ2dyZWdhdGUsIHNpbmNlIGl0IGNvdmVycyB0aGUgZXhhY3Qgc2FtZSBzZXQgb2YgdmFsdWVzLlxuICAgIHByaXZhdGUgc3BsaXROb2RlKG5vZGU6IFRyZWVOb2RlPFM+LCBsYWJlbFBvczogbnVtYmVyKSB7XG4gICAgICAgIGxldCBzdWZmaXg6IFRyZWVOb2RlPFM+ID0ge1xuICAgICAgICAgICAgbGFiZWw6IG5vZGUubGFiZWwuc2xpY2UobGFiZWxQb3MpLFxuICAgICAgICAgICAgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4sXG4gICAgICAgICAgICBzdW1tYXJ5OiBub2RlLnN1bW1hcnksXG4gICAgICAgICAgICBzZWxmU3VtbWFyeTogbm9kZS5zZWxmU3VtbWFyeSxcbiAgICAgICAgICAgIHRydW5jYXRlZFN1bW1hcnk6IG5vZGUudHJ1bmNhdGVkU3VtbWFyeSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHByZWZpeFN1bW1hcnkgPSB0aGlzLmNvbmZpZy5jcmVhdGVTdW1tYXJ5KCk7XG4gICAgICAgIHRoaXMuY29uZmlnLm1lcmdlU3VtbWFyaWVzKHByZWZpeFN1bW1hcnksIHN1ZmZpeC5zdW1tYXJ5KTtcbiAgICAgICAgbm9kZS5sYWJlbCA9IG5vZGUubGFiZWwuc2xpY2UoMCwgbGFiZWxQb3MpO1xuICAgICAgICBub2RlLnN1bW1hcnkgPSBwcmVmaXhTdW1tYXJ5O1xuICAgICAgICBub2RlLnNlbGZTdW1tYXJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICBub2RlLnRydW5jYXRlZFN1bW1hcnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIG5vZGUuY2hpbGRyZW4gPSBuZXcgTWFwKFtbc3VmZml4LmxhYmVsWzBdLCBzdWZmaXhdXSk7XG4gICAgICAgIHRoaXMubm9kZUNvdW50Kys7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRyYWNrZWROb2RlQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZUNvdW50O1xuICAgIH1cblxuICAgIC8vIFN0YXJ0cyBmdWxseSBjb2xsYXBzZWQgKG9uZSBlbnRyeSBmb3IgdGhlIHdob2xlIHRyZWUpIGFuZCByZXBlYXRlZGx5IHJlZmluZXMgdGhlIGhlYXZpZXN0IGVudHJ5LCBvbmUgc3BsaXQgYXQgYSB0aW1lLiBBIHNwbGl0IHB1bGxzIHRoZSBoZWF2aWVzdCBicmFuY2ggb3V0IGFzIGl0cyBvd24gZW50cnkgYW5kIGxlYXZlcyB0aGUgcmVtYWluaW5nIHNpYmxpbmdzIGNvbWJpbmVkIGluIGEgZ3JvdXAgZW50cnksIHNvIGVudHJpZXMgYXJlIG5ldmVyIHdhc3RlZCBvbiBsaWdodCBicmFuY2hlcy4gVGhpcyByZWNvbXB1dGVzIGZyb20gdGhlIGxpdmUgcGVyLW5vZGUgc3VtbWFyaWVzLCBzbyBpdCBhbHdheXMgcmVmbGVjdHMgZXZlcnl0aGluZyBhZGRlZCBzbyBmYXIuXG4gICAgcHVibGljIGdldFN1bW1hcmllcyhtYXhDb3VudDogbnVtYmVyKTogU3VtbWFyeUVudHJ5PFM+W10ge1xuICAgICAgICBpZiAobWF4Q291bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhDb3VudCBtdXN0IGJlIHBvc2l0aXZlLCB3YXMgJHttYXhDb3VudH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucm9vdC5zZWxmU3VtbWFyeSAmJiAhdGhpcy5yb290LnRydW5jYXRlZFN1bW1hcnkgJiYgdGhpcy5yb290LmNoaWxkcmVuLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW50cmllczogUGVuZGluZ0VudHJ5PFM+W10gPSBbdGhpcy5zdWJ0cmVlRW50cnkodGhpcy5yb290LCBcIlwiKV07XG4gICAgICAgIHdoaWxlIChlbnRyaWVzLmxlbmd0aCA8IG1heENvdW50KSB7XG4gICAgICAgICAgICBsZXQgYmVzdEluZGV4ID0gLTE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNSZWZpbmFibGUoZW50cmllc1tpXSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChiZXN0SW5kZXggPT09IC0xIHx8IGVudHJpZXNbaV0ud2VpZ2h0ID4gZW50cmllc1tiZXN0SW5kZXhdLndlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBiZXN0SW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiZXN0SW5kZXggPT09IC0xKSBicmVhaztcbiAgICAgICAgICAgIGxldCByZWZpbmVkID0gdGhpcy5yZWZpbmUoZW50cmllc1tiZXN0SW5kZXhdKTtcbiAgICAgICAgICAgIGVudHJpZXMuc3BsaWNlKGJlc3RJbmRleCwgMSwgLi4ucmVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG91dHB1dCA9IGVudHJpZXMubWFwKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZW50cnkucGF0aDtcbiAgICAgICAgICAgIGlmIChlbnRyeS5raW5kICE9PSBcInNlbGZcIikge1xuICAgICAgICAgICAgICAgIHBhdGggKz0gXCIqXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAga2luZDogZW50cnkua2luZCxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLmJ1aWxkT3V0cHV0U3VtbWFyeShlbnRyeSksXG4gICAgICAgICAgICAgICAgd2VpZ2h0OiBlbnRyeS53ZWlnaHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgc29ydChvdXRwdXQsIGVudHJ5ID0+IGVudHJ5LnBhdGgpO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZWZpbmFibGUoZW50cnk6IFBlbmRpbmdFbnRyeTxTPik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZW50cnkua2luZCA9PT0gXCJzZWxmXCIgfHwgZW50cnkua2luZCA9PT0gXCJ0cnVuY2F0ZWRcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZW50cnkua2luZCA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgICAgICBsZXQgbWVtYmVycyA9IGVudHJ5Lm1lbWJlcnM7XG4gICAgICAgICAgICBpZiAoIW1lbWJlcnMgfHwgbWVtYmVycy5zaXplID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gbWVtYmVycy5zaXplICsgKGVudHJ5LmV4dHJhcyAmJiBlbnRyeS5leHRyYXMubGVuZ3RoIHx8IDApID49IDI7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vZGUgPSBlbnRyeS5ub2RlO1xuICAgICAgICBpZiAoIW5vZGUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGVudHJ5LmV4dHJhcyAmJiBlbnRyeS5leHRyYXMubGVuZ3RoID4gMCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCBwYXJ0cyA9IG5vZGUuY2hpbGRyZW4uc2l6ZSArIChub2RlLnNlbGZTdW1tYXJ5ICYmIDEgfHwgMCkgKyAobm9kZS50cnVuY2F0ZWRTdW1tYXJ5ICYmIDEgfHwgMCk7XG4gICAgICAgIHJldHVybiBwYXJ0cyA+PSAyO1xuICAgIH1cblxuICAgIC8vIFJlcGxhY2VzIG9uZSBlbnRyeSB3aXRoIGV4YWN0bHkgdHdvLCBzbyBlYWNoIHJlZmluZW1lbnQgY29zdHMgZXhhY3RseSBvbmUgb3V0cHV0IHNsb3QuXG4gICAgcHJpdmF0ZSByZWZpbmUoZW50cnk6IFBlbmRpbmdFbnRyeTxTPik6IFBlbmRpbmdFbnRyeTxTPltdIHtcbiAgICAgICAgaWYgKGVudHJ5LmtpbmQgPT09IFwiZ3JvdXBcIikge1xuICAgICAgICAgICAgbGV0IG1lbWJlcnMgPSBlbnRyeS5tZW1iZXJzO1xuICAgICAgICAgICAgaWYgKCFtZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcm91cCBlbnRyeSBtaXNzaW5nIG1lbWJlcnMgYXQgJHtlbnRyeS5wYXRofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BsaXRQYXJ0cyhtZW1iZXJzLCBlbnRyeS5leHRyYXMgfHwgW10sIGVudHJ5LnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBub2RlID0gZW50cnkubm9kZTtcbiAgICAgICAgaWYgKGVudHJ5LmtpbmQgIT09IFwic3VidHJlZVwiIHx8ICFub2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudHJ5IGlzIG5vdCByZWZpbmFibGUgYXQgJHtlbnRyeS5wYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBleHRyYXMgPSBlbnRyeS5leHRyYXM7XG4gICAgICAgIGlmIChleHRyYXMgJiYgZXh0cmFzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIFNwbGl0IG9mZiB0aGUgY2hhaW4gcmVzaWR1ZXMgYXMgb25lIGNvbWJpbmVkIGVudHJ5LCBzbyBhIGxvbmcgY2hhaW4gb2YgcHJ1bmluZyBsZWZ0b3ZlcnMgY29zdHMgYSBzaW5nbGUgc2xvdCBpbnN0ZWFkIG9mIG9uZSBwZXIgY2hhcmFjdGVyLlxuICAgICAgICAgICAgbGV0IHdlaWdodCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBleHRyYSBvZiBleHRyYXMpIHtcbiAgICAgICAgICAgICAgICB3ZWlnaHQgKz0gdGhpcy5jb25maWcuZ2V0V2VpZ2h0KGV4dHJhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgeyBraW5kOiBcImdyb3VwXCIsIHBhdGg6IGVudHJ5LnBhdGgsIGV4dHJhcywgd2VpZ2h0IH0sXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmVlRW50cnkobm9kZSwgZW50cnkubm9kZVBhdGggfHwgZW50cnkucGF0aCksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoaWxkcmVuIGxpdmUgYmVsb3cgdGhlIG5vZGUsIHNvIHRoZWlyIHBhdGhzIG11c3QgZXh0ZW5kIG5vZGVQYXRoLCBuZXZlciB0aGUgKHBvc3NpYmx5IHNob3J0ZXIpIGRpc3BsYXkgcGF0aC5cbiAgICAgICAgbGV0IG5vZGVQYXRoID0gZW50cnkubm9kZVBhdGggfHwgZW50cnkucGF0aDtcbiAgICAgICAgbGV0IHRydW5jYXRlZExpc3Q6IFNbXSA9IFtdO1xuICAgICAgICBpZiAobm9kZS50cnVuY2F0ZWRTdW1tYXJ5KSB7XG4gICAgICAgICAgICB0cnVuY2F0ZWRMaXN0LnB1c2gobm9kZS50cnVuY2F0ZWRTdW1tYXJ5KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2VsZlN1bW1hcnkgPSBub2RlLnNlbGZTdW1tYXJ5O1xuICAgICAgICBpZiAoc2VsZlN1bW1hcnkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgeyBraW5kOiBcInNlbGZcIiwgcGF0aDogbm9kZVBhdGgsIG5vZGUsIHdlaWdodDogdGhpcy5jb25maWcuZ2V0V2VpZ2h0KHNlbGZTdW1tYXJ5KSB9LFxuICAgICAgICAgICAgICAgIHRoaXMuZW50cnlGb3JQYXJ0cyhub2RlLmNoaWxkcmVuLCB0cnVuY2F0ZWRMaXN0LCBub2RlUGF0aCksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNwbGl0UGFydHMobm9kZS5jaGlsZHJlbiwgdHJ1bmNhdGVkTGlzdCwgbm9kZVBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3BsaXRQYXJ0cyhjaGlsZHJlbjogTWFwPHN0cmluZywgVHJlZU5vZGU8Uz4+LCBleHRyYXM6IFNbXSwgcGF0aDogc3RyaW5nKTogUGVuZGluZ0VudHJ5PFM+W10ge1xuICAgICAgICBsZXQgaGVhdmllc3RDaGFyID0gXCJcIjtcbiAgICAgICAgbGV0IGhlYXZpZXN0OiBUcmVlTm9kZTxTPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChsZXQgW2NoYXIsIGNoaWxkXSBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKCFoZWF2aWVzdCB8fCB0aGlzLmNvbmZpZy5nZXRXZWlnaHQoY2hpbGQuc3VtbWFyeSkgPiB0aGlzLmNvbmZpZy5nZXRXZWlnaHQoaGVhdmllc3Quc3VtbWFyeSkpIHtcbiAgICAgICAgICAgICAgICBoZWF2aWVzdENoYXIgPSBjaGFyO1xuICAgICAgICAgICAgICAgIGhlYXZpZXN0ID0gY2hpbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoZWF2aWVzdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc3BsaXQgZW1wdHkgY2hpbGQgc2V0IGF0ICR7cGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdCA9IG5ldyBNYXAoY2hpbGRyZW4pO1xuICAgICAgICByZXN0LmRlbGV0ZShoZWF2aWVzdENoYXIpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5zdWJ0cmVlRW50cnkoaGVhdmllc3QsIHBhdGggKyBoZWF2aWVzdC5sYWJlbCksXG4gICAgICAgICAgICB0aGlzLmVudHJ5Rm9yUGFydHMocmVzdCwgZXh0cmFzLCBwYXRoKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVudHJ5Rm9yUGFydHMoY2hpbGRyZW46IE1hcDxzdHJpbmcsIFRyZWVOb2RlPFM+PiwgZXh0cmFzOiBTW10sIHBhdGg6IHN0cmluZyk6IFBlbmRpbmdFbnRyeTxTPiB7XG4gICAgICAgIGlmIChjaGlsZHJlbi5zaXplID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoZXh0cmFzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcGFydHMgdG8gbWFrZSBhbiBlbnRyeSBmcm9tIGF0ICR7cGF0aH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB3ZWlnaHQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgZXh0cmEgb2YgZXh0cmFzKSB7XG4gICAgICAgICAgICAgICAgd2VpZ2h0ICs9IHRoaXMuY29uZmlnLmdldFdlaWdodChleHRyYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBraW5kOiBcInRydW5jYXRlZFwiLCBwYXRoLCBleHRyYXMsIHdlaWdodCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZHJlbi5zaXplID09PSAxICYmIGV4dHJhcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIGNoaWxkcmVuLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VidHJlZUVudHJ5KGNoaWxkLCBwYXRoICsgY2hpbGQubGFiZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCB3ZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBleHRyYSBvZiBleHRyYXMpIHtcbiAgICAgICAgICAgIHdlaWdodCArPSB0aGlzLmNvbmZpZy5nZXRXZWlnaHQoZXh0cmEpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGNoaWxkIG9mIGNoaWxkcmVuLnZhbHVlcygpKSB7XG4gICAgICAgICAgICB3ZWlnaHQgKz0gdGhpcy5jb25maWcuZ2V0V2VpZ2h0KGNoaWxkLnN1bW1hcnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtpbmQ6IFwiZ3JvdXBcIiwgcGF0aCwgbWVtYmVyczogY2hpbGRyZW4sIGV4dHJhcywgd2VpZ2h0IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJ0cmVlRW50cnkobm9kZTogVHJlZU5vZGU8Uz4sIHBhdGg6IHN0cmluZyk6IFBlbmRpbmdFbnRyeTxTPiB7XG4gICAgICAgIC8vIEZvbGxvdyBzaW5nbGUtY2hpbGQgY2hhaW5zIHNvIHBhdGhzIGFyZSBtYXhpbWFsIHNoYXJlZCBwcmVmaXhlcyBpbnN0ZWFkIG9mIHNpbmdsZSBjaGFyYWN0ZXJzLiBTZWxmL3RydW5jYXRlZCBzdW1tYXJpZXMgZm91bmQgYWxvbmcgdGhlIGNoYWluIGFyZSBjYXJyaWVkIG9uIHRoZSBlbnRyeSBpbnN0ZWFkIG9mIHN0b3BwaW5nIHRoZSBkZXNjZW50LCBzbyBwcnVuaW5nIGxlZnRvdmVycyBzY2F0dGVyZWQgYWxvbmcgYSBjaGFpbiBlbmQgdXAgY29tYmluZWQgaW5zdGVhZCBvZiBlYWNoIGZvcmNpbmcgYW4gZW50cnkuXG4gICAgICAgIGxldCBjYXJyaWVkOiBTW10gPSBbXTtcbiAgICAgICAgbGV0IGNhcnJpZWRXZWlnaHQgPSAwO1xuICAgICAgICBsZXQgbm9kZVBhdGggPSBwYXRoO1xuICAgICAgICB3aGlsZSAobm9kZS5jaGlsZHJlbi5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBsZXQgc2VsZlN1bW1hcnkgPSBub2RlLnNlbGZTdW1tYXJ5O1xuICAgICAgICAgICAgaWYgKHNlbGZTdW1tYXJ5KSB7XG4gICAgICAgICAgICAgICAgY2FycmllZC5wdXNoKHNlbGZTdW1tYXJ5KTtcbiAgICAgICAgICAgICAgICBjYXJyaWVkV2VpZ2h0ICs9IHRoaXMuY29uZmlnLmdldFdlaWdodChzZWxmU3VtbWFyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdHJ1bmNhdGVkID0gbm9kZS50cnVuY2F0ZWRTdW1tYXJ5O1xuICAgICAgICAgICAgaWYgKHRydW5jYXRlZCkge1xuICAgICAgICAgICAgICAgIGNhcnJpZWQucHVzaCh0cnVuY2F0ZWQpO1xuICAgICAgICAgICAgICAgIGNhcnJpZWRXZWlnaHQgKz0gdGhpcy5jb25maWcuZ2V0V2VpZ2h0KHRydW5jYXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgbm9kZVBhdGggKz0gY2hpbGQubGFiZWw7XG4gICAgICAgICAgICAgICAgbm9kZSA9IGNoaWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdpdGggbm90aGluZyBjYXJyaWVkIHRoZSBlbnRyeSBpcyBqdXN0IHRoZSBkZWVwIG5vZGUsIHNvIGRpc3BsYXkgdGhlIGZ1bGwgZGVzY2VuZGVkIHByZWZpeC5cbiAgICAgICAgaWYgKGNhcnJpZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBwYXRoID0gbm9kZVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6IFwic3VidHJlZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBub2RlUGF0aCxcbiAgICAgICAgICAgIGV4dHJhczogY2FycmllZCxcbiAgICAgICAgICAgIHdlaWdodDogdGhpcy5jb25maWcuZ2V0V2VpZ2h0KG5vZGUuc3VtbWFyeSkgKyBjYXJyaWVkV2VpZ2h0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPdXRwdXRTdW1tYXJ5KGVudHJ5OiBQZW5kaW5nRW50cnk8Uz4pOiBTIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuY29uZmlnLmNyZWF0ZVN1bW1hcnkoKTtcbiAgICAgICAgaWYgKGVudHJ5LmtpbmQgPT09IFwiZ3JvdXBcIiB8fCBlbnRyeS5raW5kID09PSBcInRydW5jYXRlZFwiKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBleHRyYSBvZiBlbnRyeS5leHRyYXMgfHwgW10pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5tZXJnZVN1bW1hcmllcyhyZXN1bHQsIGV4dHJhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbnRyeS5tZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbWVtYmVyIG9mIGVudHJ5Lm1lbWJlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubWVyZ2VTdW1tYXJpZXMocmVzdWx0LCBtZW1iZXIuc3VtbWFyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbm9kZSA9IGVudHJ5Lm5vZGU7XG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnRyeSBtaXNzaW5nIG5vZGUgYXQgJHtlbnRyeS5wYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5raW5kID09PSBcInNlbGZcIikge1xuICAgICAgICAgICAgbGV0IHNlbGZTdW1tYXJ5ID0gbm9kZS5zZWxmU3VtbWFyeTtcbiAgICAgICAgICAgIGlmICghc2VsZlN1bW1hcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlbGYgZW50cnkgbWlzc2luZyBzZWxmU3VtbWFyeSBhdCAke2VudHJ5LnBhdGh9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5tZXJnZVN1bW1hcmllcyhyZXN1bHQsIHNlbGZTdW1tYXJ5KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgZXh0cmEgb2YgZW50cnkuZXh0cmFzIHx8IFtdKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5tZXJnZVN1bW1hcmllcyhyZXN1bHQsIGV4dHJhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZy5tZXJnZVN1bW1hcmllcyhyZXN1bHQsIG5vZGUuc3VtbWFyeSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gQ29sbGFwc2VzIHRoZSBsaWdodGVzdCBzdWJ0cmVlcyB1bnRpbCB0aGUgbm9kZSBjb3VudCBpcyBiYWNrIHVuZGVyIHRoZSB0YXJnZXQuIENvbGxhcHNpbmcgYSBub2RlIG1lcmdlcyBldmVyeXRoaW5nIGJlbG93IGl0IGludG8gaXRzIHRydW5jYXRlZFN1bW1hcnksIGtlZXBpbmcgdGhlIGRhdGEgYnV0IGRyb3BwaW5nIHRoZSBwYXRoIGRldGFpbC4gSWYgdGhvc2UgcHJlZml4ZXMgZ2V0IGhlYXZ5IGFnYWluIGxhdGVyLCBuZXcgYWRkcyByZWJ1aWxkIGJyYW5jaGVzIHRoZXJlIGFuZCB0aGUgbmV4dCBwcnVuZSB0YWtlcyBvdXQgd2hhdGV2ZXIgc3RheWVkIGxpZ2h0IGluc3RlYWQuXG4gICAgcHJpdmF0ZSBwcnVuZSgpIHtcbiAgICAgICAgbGV0IHRhcmdldCA9IE1hdGguZmxvb3IodGhpcy5tYXhUcmFja2VkTm9kZXMgLyBQUlVORV9UQVJHRVRfRElWSVNPUik7XG4gICAgICAgIGxldCBuZWVkID0gdGhpcy5ub2RlQ291bnQgLSB0YXJnZXQ7XG4gICAgICAgIGlmIChuZWVkIDw9IDApIHJldHVybjtcbiAgICAgICAgbGV0IHN0YXRzID0gbmV3IE1hcDxUcmVlTm9kZTxTPiwgTm9kZVN0YXRzPigpO1xuICAgICAgICBsZXQgbWVhc3VyZSA9IChub2RlOiBUcmVlTm9kZTxTPik6IE5vZGVTdGF0cyA9PiB7XG4gICAgICAgICAgICBsZXQgc2l6ZSA9IDE7XG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgc2l6ZSArPSBtZWFzdXJlKGNoaWxkKS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHsgc2l6ZSwgd2VpZ2h0OiB0aGlzLmNvbmZpZy5nZXRXZWlnaHQobm9kZS5zdW1tYXJ5KSB9O1xuICAgICAgICAgICAgc3RhdHMuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICBsZXQgcm9vdFN0YXRzID0gbWVhc3VyZSh0aGlzLnJvb3QpO1xuICAgICAgICBsZXQgZ2V0U3RhdHMgPSAobm9kZTogVHJlZU5vZGU8Uz4pOiBOb2RlU3RhdHMgPT4ge1xuICAgICAgICAgICAgbGV0IHN0YXQgPSBzdGF0cy5nZXQobm9kZSk7XG4gICAgICAgICAgICBpZiAoIXN0YXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgbm9kZSBzdGF0cyBkdXJpbmcgcHJ1bmVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGF0O1xuICAgICAgICB9O1xuICAgICAgICAvLyBDb2xsYXBzaW5nIGV2ZXJ5IG1heGltYWwgc3VidHJlZSB3aG9zZSB3ZWlnaHQgaXMgdW5kZXIgYSBsaW1pdCBmcmVlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBudW1iZXIgb2Ygbm9kZXMsIHNvIGJpbmFyeSBzZWFyY2ggZm9yIHRoZSBzbWFsbGVzdCBsaW1pdCB0aGF0IGZyZWVzIGVub3VnaC5cbiAgICAgICAgbGV0IGZyZWVkQXQgPSAobGltaXQ6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgICAgICAgICBsZXQgZnJlZWQgPSAwO1xuICAgICAgICAgICAgbGV0IHZpc2l0ID0gKG5vZGU6IFRyZWVOb2RlPFM+KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4uc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChnZXRTdGF0cyhub2RlKS53ZWlnaHQgPD0gbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJlZWQgKz0gZ2V0U3RhdHMobm9kZSkuc2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICB2aXNpdChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZpc2l0KHRoaXMucm9vdCk7XG4gICAgICAgICAgICByZXR1cm4gZnJlZWQ7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBsb3cgPSAwO1xuICAgICAgICBsZXQgaGlnaCA9IHJvb3RTdGF0cy53ZWlnaHQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgUFJVTkVfU0VBUkNIX0lURVJBVElPTlM7IGkrKykge1xuICAgICAgICAgICAgbGV0IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7XG4gICAgICAgICAgICBpZiAoZnJlZWRBdChtaWQpID49IG5lZWQpIHtcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb3cgPSBtaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbGxhcHNlVmlzaXQgPSAobm9kZTogVHJlZU5vZGU8Uz4pID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuLnNpemUgPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGlmIChnZXRTdGF0cyhub2RlKS53ZWlnaHQgPD0gaGlnaCkge1xuICAgICAgICAgICAgICAgIGxldCB0cnVuY2F0ZWQgPSBub2RlLnRydW5jYXRlZFN1bW1hcnk7XG4gICAgICAgICAgICAgICAgaWYgKCF0cnVuY2F0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVkID0gdGhpcy5jb25maWcuY3JlYXRlU3VtbWFyeSgpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnRydW5jYXRlZFN1bW1hcnkgPSB0cnVuY2F0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4udmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubWVyZ2VTdW1tYXJpZXModHJ1bmNhdGVkLCBjaGlsZC5zdW1tYXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlQ291bnQgLT0gZ2V0U3RhdHMobm9kZSkuc2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4udmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZVZpc2l0KGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29sbGFwc2VWaXNpdCh0aGlzLnJvb3QpO1xuICAgIH1cbn1cbiJdfQ==
|
|
359
|
-
/* _JS_SOURCE_HASH = "
|
|
359
|
+
/* _JS_SOURCE_HASH = "d29da12b01dbc51635c0d1cf2febe43e413eb96355bb5e6ae62bc8d273c31e0b"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -136,4 +136,4 @@ function setSecret(key, value) {
|
|
|
136
136
|
}
|
|
137
137
|
exports.setSecret = setSecret;
|
|
138
138
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2V0U2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EseURBQW9EO0FBQ3BELDZDQUFxQztBQUVyQyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUV0QyxTQUFTLGFBQWEsQ0FBQyxHQUFXO0lBQzlCLE9BQU8sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxHQUFXO0lBQ25DLElBQUksSUFBQSxvQkFBTSxHQUFFLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBTEQsa0NBS0M7QUFFWSxRQUFBLFNBQVMsR0FBRyxJQUFBLGVBQUssRUFBQyxLQUFLLFVBQVUsU0FBUyxDQUFDLEdBQVc7O0lBQy9ELElBQUksSUFBQSxvQkFBTSxHQUFFLEVBQUUsQ0FBQztRQUNYLE1BQU0sRUFBRSxHQUFHLHdEQUFhLElBQUksR0FBQyxDQUFDO1FBQzlCLE1BQU0sRUFBRSxHQUFHLHdEQUFhLElBQUksR0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLHdEQUFhLE1BQU0sR0FBQyxDQUFDO1FBRWxDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxnQkFBa0gsQ0FBQztRQUN2SCxJQUFJLENBQUM7WUFDRCxnQkFBZ0IsR0FBRyx5QkFBYSxjQUFjLHVDQUE0QixDQUFDO1FBQy9FLENBQUM7UUFBQyxXQUFNLENBQUM7WUFDTCxnRUFBZ0U7UUFDcEUsQ0FBQztRQUNELElBQUks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QUFDO2FBQ0osQ0FBQyxFQUNGLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUMzQixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtnQkFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDZCxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzlDLEtBQUssRUFBRSxDQUFDO3dCQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3pCLENBQUM7Z0JBQ0wsQ0FBQzthQUNKLEVBQUUsTUFBTSxDQUFDLENBQ2IsQ0FDSjtTQUNKLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFnQixTQUFTLENBQUMsR0FBVyxFQUFFLEtBQWE7SUFDaEQsSUFBSSxJQUFBLG9CQUFNLEdBQUUsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxxSEFBcUgsQ0FBQyxDQUFDO0lBQzNJLENBQUM7SUFDRCxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBTEQsOEJBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IGNhY2hlIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSBcInR5cGVzYWZlY3NzXCI7XG5cbmNvbnN0IHNlY3JldFN0b3JhZ2VQcmVmaXggPSBcInNlY3JldF9cIjtcblxuZnVuY3Rpb24gZ2V0U3RvcmFnZUtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBzZWNyZXRTdG9yYWdlUHJlZml4ICsga2V5LnJlcGxhY2UoL1tcXC9cXFxcXFwuXS9nLCBcIl9cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldFNlY3JldChrZXk6IHN0cmluZykge1xuICAgIGlmIChpc05vZGUoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNldFNlY3JldCBpcyBvbmx5IHN1cHBvcnRlZCBpbiB0aGUgYnJvd3NlclwiKTtcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZ2V0U3RvcmFnZUtleShrZXkpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFNlY3JldCA9IGNhY2hlKGFzeW5jIGZ1bmN0aW9uIGdldFNlY3JldChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgIGNvbnN0IG9zID0gYXdhaXQgaW1wb3J0KFwib3NcIik7XG4gICAgICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwiZnNcIik7XG4gICAgICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJwYXRoXCIpO1xuXG4gICAgICAgIGNvbnN0IGFwcFNlY3JldHNQYXRoID0gcGF0aC5yZXNvbHZlKFwiLi9hcHBTZWNyZXRzXCIpO1xuICAgICAgICBsZXQgYXBwU2VjcmV0c01vZHVsZTogeyBnZXRBcHBTZWNyZXQ/OiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB8IHN0cmluZyB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXBwU2VjcmV0c01vZHVsZSA9IGF3YWl0IGltcG9ydChhcHBTZWNyZXRzUGF0aCkgYXMgdHlwZW9mIGFwcFNlY3JldHNNb2R1bGU7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTW9kdWxlIGRvZXNuJ3QgZXhpc3QsIGZhbGwgdGhyb3VnaCB0byB0aGUgZmlsZS1iYXNlZCBhcHByb2FjaFxuICAgICAgICB9XG4gICAgICAgIGlmIChhcHBTZWNyZXRzTW9kdWxlPy5nZXRBcHBTZWNyZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcFNlY3JldHNNb2R1bGUuZ2V0QXBwU2VjcmV0KGtleSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYW4gYXBwIHNlY3JldCBuYW1lZCBcIiR7a2V5fVwiIGZyb20gZ2V0QXBwU2VjcmV0IGluICR7YXBwU2VjcmV0c1BhdGh9LCBidXQgaXQgcmV0dXJuZWQgbm8gcmVzdWx0YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QganNvbkluZGV4ID0ga2V5LmluZGV4T2YoXCIuanNvblwiKTtcbiAgICAgICAgbGV0IGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoanNvbkluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGZpbGVQYXRoID0gb3MuaG9tZWRpcigpICsgXCIvXCIgKyBrZXk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0ID0ga2V5LnNsaWNlKDAsIGpzb25JbmRleCArIFwiLmpzb25cIi5sZW5ndGgpO1xuICAgICAgICAgICAgZmlsZVBhdGggPSBvcy5ob21lZGlyKCkgKyBcIi9cIiArIHBhdGhQYXJ0O1xuICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmLThcIik7XG4gICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGtleVBhcnQgPSBrZXkuc2xpY2UoanNvbkluZGV4ICsgXCIuanNvbi5cIi5sZW5ndGgpO1xuICAgICAgICAgICAgaWYgKCFrZXlQYXJ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGpzb25ba2V5UGFydF07XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQga2V5IFwiJHtrZXlQYXJ0fVwiIGluICR7ZmlsZVBhdGh9LCB3YXMgdW5kZWZpbmVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBzZWNyZXQgXCIke2tleX1cIi4gRXhwZWN0ZWQgaXQgZWl0aGVyIGZyb20gZ2V0QXBwU2VjcmV0IGluIHRoZSBhcHAgc2VjcmV0IG1vZHVsZSBhdCAke2FwcFNlY3JldHNQYXRofSwgb3IgaW4gdGhlIGZpbGUgYXQgJHtvcy5ob21lZGlyKCkgKyBcIi9cIiArIGtleX0uIFVuZGVybHlpbmcgZXJyb3I6ICR7KGUgYXMgRXJyb3IpLnN0YWNrID8/IGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCcm93c2VyIGltcGxlbWVudGF0aW9uXG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IGdldFN0b3JhZ2VLZXkoa2V5KTtcbiAgICBjb25zdCBjYWNoZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgLy8gU2hvdyBtb2RhbCB0byBwcm9tcHQgdXNlciBmb3Igc2VjcmV0XG4gICAgY29uc3QgeyBzaG93RnVsbHNjcmVlbk1vZGFsLCBGdWxsc2NyZWVuTW9kYWwgfSA9IGF3YWl0IGltcG9ydChcIi4uL3JlbmRlci11dGlscy9GdWxsc2NyZWVuTW9kYWxcIik7XG4gICAgY29uc3QgeyBzaG93TW9kYWwgfSA9IGF3YWl0IGltcG9ydChcIi4uL3JlbmRlci11dGlscy9tb2RhbFwiKTtcbiAgICBjb25zdCB7IG9ic2VydmFibGUgfSA9IGF3YWl0IGltcG9ydChcIm1vYnhcIik7XG4gICAgY29uc3QgcHJlYWN0ID0gYXdhaXQgaW1wb3J0KFwicHJlYWN0XCIpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBvYnNlcnZhYmxlKHtcbiAgICAgICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7IGNsb3NlIH0gPSBzaG93TW9kYWwoe1xuICAgICAgICAgICAgY29udGVudHM6IHByZWFjdC5jcmVhdGVFbGVtZW50KEZ1bGxzY3JlZW5Nb2RhbCwge1xuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGNhbmNlbCB3aXRob3V0IGEgdmFsdWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwcmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBnYXA6IDEwIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgcHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBzdHlsZTogeyBmb250V2VpZ2h0OiBcImJvbGRcIiB9IH0sIGBFbnRlciBzZWNyZXQgZm9yOiAke2tleX1gKSxcbiAgICAgICAgICAgICAgICAgICAgcHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBwYWRkaW5nOiAxMCwgZm9udFNpemU6IDE2IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbklucHV0OiAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS52YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbktleURvd246IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gXCJFbnRlclwiICYmIHN0YXRlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXksIHN0YXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGF0ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHByZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHBhZGRpbmc6IDEwLCBmb250U2l6ZTogMTYsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgc3RhdGUudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LCBcIlNhdmVcIiksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZWNyZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoaXNOb2RlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0U2VjcmV0IGlzIG9ubHkgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyLiBXZSBkb24ndCB3YW50IHRvIGJyZWFrIHRoZSB1c2VyJ3MgZmlsZSBzeXN0ZW0gd2l0aCBzZXRTZWNyZXQgaW4gTm9kZUpTLlwiKTtcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oZ2V0U3RvcmFnZUtleShrZXkpLCB2YWx1ZSk7XG59XG4iXX0=
|
|
139
|
-
/* _JS_SOURCE_HASH = "
|
|
139
|
+
/* _JS_SOURCE_HASH = "43dfc5991cbc841376e1b832e2b30c17341058ed45b2accd36ec4e823580f05b"; */
|
package/package.json
CHANGED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
+
//exports.LocalStorageParamStr = void 0;
|
|
4
|
+
process.env.NODE_ENV = "production";
|
|
5
|
+
const typesafecss_1 = require("typesafecss");
|
|
6
|
+
const mobx_1 = require("mobx");
|
|
7
|
+
let allParams = [];
|
|
8
|
+
class LocalStorageParamStr {
|
|
9
|
+
constructor(storageKey, defaultValue = "") {
|
|
10
|
+
this.storageKey = storageKey;
|
|
11
|
+
this.defaultValue = defaultValue;
|
|
12
|
+
this.state = (0, mobx_1.observable)({
|
|
13
|
+
seqNum: 0
|
|
14
|
+
});
|
|
15
|
+
this.lastSetValue = "";
|
|
16
|
+
allParams.push(this);
|
|
17
|
+
}
|
|
18
|
+
forceUpdate() {
|
|
19
|
+
this.state.seqNum++;
|
|
20
|
+
}
|
|
21
|
+
get() {
|
|
22
|
+
this.state.seqNum;
|
|
23
|
+
if ((0, typesafecss_1.isNode)())
|
|
24
|
+
return "";
|
|
25
|
+
return localStorage.getItem(this.storageKey) || "";
|
|
26
|
+
}
|
|
27
|
+
set(value) {
|
|
28
|
+
let prev = this.get();
|
|
29
|
+
this.lastSetValue = value;
|
|
30
|
+
if (!(0, typesafecss_1.isNode)()) {
|
|
31
|
+
if (value === "") {
|
|
32
|
+
localStorage.removeItem(this.storageKey);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
localStorage.setItem(this.storageKey, value);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
let after = this.get();
|
|
39
|
+
if (prev !== after) {
|
|
40
|
+
this.state.seqNum++;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
get value() {
|
|
44
|
+
return this.get() || this.defaultValue;
|
|
45
|
+
}
|
|
46
|
+
set value(value) {
|
|
47
|
+
this.set(value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.LocalStorageParamStr = LocalStorageParamStr;
|
|
51
|
+
if (!(0, typesafecss_1.isNode)()) {
|
|
52
|
+
// Watch for storage events from other tabs/windows
|
|
53
|
+
window.addEventListener("storage", (e) => {
|
|
54
|
+
for (let param of allParams) {
|
|
55
|
+
if (e.key === param.storageKey) {
|
|
56
|
+
param.forceUpdate();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxTdG9yYWdlUGFyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJMb2NhbFN0b3JhZ2VQYXJhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUM7QUFFcEMsNkNBQXFDO0FBQ3JDLCtCQUFrQztBQUVsQyxJQUFJLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0FBRTNDLE1BQWEsb0JBQW9CO0lBSzdCLFlBQTRCLFVBQWtCLEVBQVUsZUFBdUIsRUFBRTtRQUFyRCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWE7UUFKekUsVUFBSyxHQUFHLElBQUEsaUJBQVUsRUFBQztZQUN2QixNQUFNLEVBQUUsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUNJLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRXJCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNNLFdBQVc7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxHQUFHO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDbEIsSUFBSSxJQUFBLG9CQUFNLEdBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN4QixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBQ00sR0FBRyxDQUFDLEtBQWE7UUFDcEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFBLG9CQUFNLEdBQUUsRUFBRSxDQUFDO1lBQ1osSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ2YsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFBVyxLQUFLLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQXZDRCxvREF1Q0M7QUFFRCxJQUFJLENBQUMsSUFBQSxvQkFBTSxHQUFFLEVBQUUsQ0FBQztJQUNaLG1EQUFtRDtJQUNuRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDckMsS0FBSyxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJwcm9jZXNzLmVudi5OT0RFX0VOViA9IFwicHJvZHVjdGlvblwiO1xuXG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwidHlwZXNhZmVjc3NcIjtcbmltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwibW9ieFwiO1xuXG5sZXQgYWxsUGFyYW1zOiBMb2NhbFN0b3JhZ2VQYXJhbVN0cltdID0gW107XG5cbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2VQYXJhbVN0ciB7XG4gICAgcHJpdmF0ZSBzdGF0ZSA9IG9ic2VydmFibGUoe1xuICAgICAgICBzZXFOdW06IDBcbiAgICB9KTtcbiAgICBwdWJsaWMgbGFzdFNldFZhbHVlID0gXCJcIjtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc3RvcmFnZUtleTogc3RyaW5nLCBwcml2YXRlIGRlZmF1bHRWYWx1ZTogc3RyaW5nID0gXCJcIikge1xuICAgICAgICBhbGxQYXJhbXMucHVzaCh0aGlzKTtcbiAgICB9XG4gICAgcHVibGljIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICB0aGlzLnN0YXRlLnNlcU51bSsrO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2VxTnVtO1xuICAgICAgICBpZiAoaXNOb2RlKCkpIHJldHVybiBcIlwiO1xuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KSB8fCBcIlwiO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHByZXYgPSB0aGlzLmdldCgpO1xuICAgICAgICB0aGlzLmxhc3RTZXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoIWlzTm9kZSgpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgYWZ0ZXIgPSB0aGlzLmdldCgpO1xuICAgICAgICBpZiAocHJldiAhPT0gYWZ0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc2VxTnVtKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoKSB8fCB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgICB9XG59XG5cbmlmICghaXNOb2RlKCkpIHtcbiAgICAvLyBXYXRjaCBmb3Igc3RvcmFnZSBldmVudHMgZnJvbSBvdGhlciB0YWJzL3dpbmRvd3NcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInN0b3JhZ2VcIiwgKGUpID0+IHtcbiAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgYWxsUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IHBhcmFtLnN0b3JhZ2VLZXkpIHtcbiAgICAgICAgICAgICAgICBwYXJhbS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
62
|
+
/* _JS_SOURCE_HASH = "03278904af59362b290f72cfb231971a3e53e50185dbd467364de254d3c4f05a"; */
|
|
@@ -9,6 +9,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
9
9
|
const crypto_1 = require("crypto");
|
|
10
10
|
const authorizedKeys_1 = require("../authorizedKeys");
|
|
11
11
|
const revokeSource_1 = require("../revokeSource");
|
|
12
|
+
const sources_1 = require("../sources");
|
|
12
13
|
const git_1 = require("./git");
|
|
13
14
|
const repoFiles_1 = require("./repoFiles");
|
|
14
15
|
const discord_1 = require("../../notifications/discord");
|
|
@@ -193,8 +194,9 @@ async function recordRevocation(config) {
|
|
|
193
194
|
+ ` addresses changed.`
|
|
194
195
|
+ `\n\nThe key is frozen on every machine now, and works nowhere.${ended}`
|
|
195
196
|
+ `\n\nIf this was an attack, remove that key from \`${sourceURL}\` now.`
|
|
196
|
-
+ `\nIf it was you, run
|
|
197
|
-
+
|
|
197
|
+
+ `\nIf it was you, run:`
|
|
198
|
+
+ `\n\`\`\`\ncd ${(0, sources_1.sourceRepoPath)(sourceURL)}\nyarn unrevoke git\n\`\`\``
|
|
199
|
+
+ `\nIt allows ${attempt.ip} on that key, and takes an hour to reach every machine.`
|
|
198
200
|
+ `\n\nkey: \`${keyLine && (0, authorizedKeys_1.summarizeKey)(keyLine) || fingerprint}\``
|
|
199
201
|
+ `\ntried to log in as: \`${attempt.user}\``
|
|
200
202
|
+ `\nallowed only from: \`${attempt.required}\``,
|
|
@@ -317,5 +319,5 @@ async function reportRevokedKeys() {
|
|
|
317
319
|
}
|
|
318
320
|
}
|
|
319
321
|
exports.reportRevokedKeys = reportRevokedKeys;
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2b2NhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJldm9jYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkRBQTZCO0FBQzdCLGdEQUF3QjtBQUN4QixtQ0FBcUM7QUFDckMsc0RBQThFO0FBQzlFLGtEQUFnRTtBQUNoRSwrQkFBK0I7QUFDL0IsMkNBQWdIO0FBQ2hILHlEQUErRDtBQUMvRCx1Q0FBb0U7QUFDcEUseUNBQWlFO0FBQ2pFLG1DQUE4QztBQUU5QyxtR0FBbUc7QUFDbkcsbUdBQW1HO0FBQ25HLGdHQUFnRztBQUNoRywwRkFBMEY7QUFDMUYsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQ3RDLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQztBQUNsQyxNQUFNLGlCQUFpQixHQUFHLDRDQUE0QyxDQUFDO0FBVXZFO3NDQUNzQztBQUN0QyxTQUFnQixPQUFPLENBQUMsTUFBMkM7SUFDL0QsT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hELENBQUM7QUFGRCwwQkFFQztBQUVELDZGQUE2RjtBQUM3RixTQUFnQixlQUFlLENBQUMsV0FBbUI7SUFDL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNELE9BQU8sR0FBRyxLQUFLLElBQUksSUFBQSxvQkFBVyxFQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pJLENBQUM7QUFIRCwwQ0FHQztBQUVELHlGQUF5RjtBQUN6RixT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TUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckQsU0FBUztRQUNiLENBQUM7UUFDRCxVQUFVLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUNsQyxNQUFNLElBQUEsaUJBQVMsR0FBRSxDQUFDO1FBQ2xCLDRGQUE0RjtRQUM1RiwwREFBMEQ7UUFDMUQsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFBLCtCQUFjLEVBQUMsT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNQLFNBQVM7UUFDYixDQUFDO1FBQ0Qsa0RBQWtEO1FBQ2xELElBQUksS0FBSyxHQUFHLElBQUEsMkJBQWdCLEVBQUMsTUFBTSxJQUFBLDRCQUFpQixHQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFBLGdDQUFzQixFQUFDO1lBQ25CLFFBQVEsRUFBRSxpQkFBaUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxTQUFTLGNBQWMsSUFBQSw0QkFBVyxFQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JGLElBQUksRUFDQSwrRUFBK0U7a0JBQzdFLG1FQUFtRSxLQUFLLEVBQUU7a0JBQzFFLGNBQWMsSUFBQSw2QkFBWSxFQUFDLEdBQUcsQ0FBQyxJQUFJO2tCQUNuQyxLQUFLLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1NBQzlDLENBQUMsQ0FBQztJQUNQLENBQUM7QUFDTCxDQUFDO0FBekJELDhDQXlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGtleUZpbmdlcnByaW50LCBrZXlOaWNlTmFtZSwgc3VtbWFyaXplS2V5IH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzXCI7XG5pbXBvcnQgeyByZXZva2VSZXBvUGF0aCwgcmV2b2tlUmVwb1VSTCB9IGZyb20gXCIuLi9yZXZva2VTb3VyY2VcIjtcbmltcG9ydCB7IHJ1bkdpdCB9IGZyb20gXCIuL2dpdFwiO1xuaW1wb3J0IHsgZW5zdXJlUmV2b2tlS2V5LCBsaXN0UmVwb0RpciwgcmVhZFJlcG9GaWxlLCByZXZva2VSZXBvLCBzb3VyY2VSZXBvLCBzeW5jUmVwb0ZpbGVzIH0gZnJvbSBcIi4vcmVwb0ZpbGVzXCI7XG5pbXBvcnQgeyBtZXNzYWdlVGltZXN0YW1wIH0gZnJvbSBcIi4uLy4uL25vdGlmaWNhdGlvbnMvZGlzY29yZFwiO1xuaW1wb3J0IHsgYWRkQ2hhbmdlUmVhc29uLCBhZGRMZWFkaW5nQ2hhbmdlUmVhc29uIH0gZnJvbSBcIi4vY2hhbmdlc1wiO1xuaW1wb3J0IHsgZGVzY3JpYmVBbGxFbmRlZCwgZW5kQWxsU1NIU2Vzc2lvbnMgfSBmcm9tIFwiLi9zZXNzaW9uc1wiO1xuaW1wb3J0IHsgZ2V0U3RhdGUsIHNhdmVTdGF0ZSB9IGZyb20gXCIuL3N0YXRlXCI7XG5cbi8vIEEgcmV2b2NhdGlvbiBzYXlzOiB0aGlzIGtleSwgdXNlZCBmcm9tIHRoaXMgYWRkcmVzcywgaXMgbm8gbG9uZ2VyIGFjY2VwdGVkLiBBbiB1bnJldm9rZSBzYXlzIHRoZVxuLy8gb3Bwb3NpdGUgYWJvdXQgb25lIHBhaXI6IHRoaXMga2V5IGlzIGFsbG93ZWQgZnJvbSB0aGlzIGFkZHJlc3MuIFRoZXkgY2FuY2VsIG91dCB3aGVuIGJvdGggaGFsdmVzXG4vLyBtYXRjaCwgd2hpY2ggaXMgd2h5IGEgcmV2b2NhdGlvbiBpcyBvbmUgZXZlbnQgd2l0aCBhbiBpZCBvZiBpdHMgb3duLCBhbmQgbmV2ZXIgYSBuYW1lIGRlcml2ZWRcbi8vIGZyb20gdGhlIGtleSAtIGZvcmdpdmluZyBhIGtleSBmb3Igb25lIGFkZHJlc3MgbXVzdCBub3QgbWFrZSBpdCB1bnJldm9rYWJsZSBldmVyeXdoZXJlLlxuY29uc3QgUkVWT0NBVElPTlNfRElSID0gXCJyZXZvY2F0aW9uc1wiO1xuY29uc3QgVU5SRVZPS0VTX0RJUiA9IFwidW5yZXZva2VkXCI7XG5jb25zdCBSRVZPQ0FUSU9OX1JFQVNPTiA9IFwiYXV0aGVudGljYXRlZCBhY2Nlc3MgZnJvbSBhbiB1bmFwcHJvdmVkIElQXCI7XG5cbmV4cG9ydCB0eXBlIEF0dGVtcHQgPSB7XG4gICAgaXA6IHN0cmluZztcbiAgICB1c2VyOiBzdHJpbmc7XG4gICAgcG9ydDogc3RyaW5nO1xuICAgIHJlcXVpcmVkOiBzdHJpbmc7XG4gICAgbGluZTogc3RyaW5nO1xufTtcblxuLyoqIFdoYXQgYW4gdW5yZXZva2UgaGFzIHRvIG5hbWUgdG8gdW5kbyBhIHJldm9jYXRpb24sIGFuZCB3aGF0IHN0b3BzIGEgc2Vjb25kIHJldm9jYXRpb24gb2YgdGhlXG4gICAgc2FtZSBrZXkgZnJvbSB0aGUgc2FtZSBhZGRyZXNzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhaXJLZXkoY29uZmlnOiB7IGZpbmdlcnByaW50OiBzdHJpbmc7IGlwOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiBgJHtjb25maWcuZmluZ2VycHJpbnR9ICR7Y29uZmlnLmlwfWA7XG59XG5cbi8qKiBVbmlxdWUgdG8gdGhlIGV2ZW50LiBUaGUgdGltZSBpcyB0aGVyZSB0byByZWFkLCB0aGUgcmFuZG9tIGhhbGYgaXMgdGhlcmUgdG8gYmUgdW5pcXVlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ld1Jldm9jYXRpb25JZChmaW5nZXJwcmludDogc3RyaW5nKSB7XG4gICAgbGV0IHN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6Ll0vZywgXCItXCIpO1xuICAgIHJldHVybiBgJHtzdGFtcH0tJHtyYW5kb21CeXRlcyg4KS50b1N0cmluZyhcImhleFwiKX0tJHtmaW5nZXJwcmludC5yZXBsYWNlKC9eU0hBMjU2Oi8sIFwiXCIpLnNsaWNlKDAsIDgpLnJlcGxhY2UoL1teQS1aYS16MC05XSsvZywgXCJcIil9YDtcbn1cblxuLyoqIFdoeSBhIGtleSBzdG9wcGVkIGJlaW5nIGFjY2VwdGVkLCBpbiB0aGUgd29yZHMgb2Ygd2hpY2hldmVyIG1hY2hpbmUgc2F3IGl0IGhhcHBlbi4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlUmV2b2NhdGlvbihyZXZvY2F0aW9uOiB7IHJldm9rZWRBdDogc3RyaW5nOyByZXZva2VkQnk6IHN0cmluZzsgcmVhc29uOiBzdHJpbmc7IGlwOiBzdHJpbmcgfSkge1xuICAgIGxldCB3aGVuID0gRGF0ZS5wYXJzZShyZXZvY2F0aW9uLnJldm9rZWRBdCk7XG4gICAgbGV0IHBhcnRzID0gW1xuICAgICAgICBOdW1iZXIuaXNGaW5pdGUod2hlbikgPyBgcmV2b2tlZCAke21lc3NhZ2VUaW1lc3RhbXAobmV3IERhdGUod2hlbikpfWAgOiBgcmV2b2tlZCBhdCBhbiB1bnJlY29yZGVkIHRpbWVgLFxuICAgICAgICByZXZvY2F0aW9uLnJldm9rZWRCeSAmJiBgYnkgXFxgJHtyZXZvY2F0aW9uLnJldm9rZWRCeX1cXGBgIHx8IFwiXCIsXG4gICAgICAgIHJldm9jYXRpb24ucmVhc29uIHx8IFwiXCIsXG4gICAgICAgIHJldm9jYXRpb24uaXAgJiYgYGZyb20gXFxgJHtyZXZvY2F0aW9uLmlwfVxcYGAgfHwgXCJcIixcbiAgICBdO1xuICAgIHJldHVybiBwYXJ0cy5maWx0ZXIocGFydCA9PiBwYXJ0KS5qb2luKFwiLCBcIik7XG59XG5cbmV4cG9ydCB0eXBlIFJldm9jYXRpb25GaWxlID0ge1xuICAgIHJldm9jYXRpb25JZDogc3RyaW5nO1xuICAgIGZpbmdlcnByaW50OiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICByZXZva2VkQXQ6IHN0cmluZztcbiAgICByZXZva2VkQnk6IHN0cmluZztcbiAgICByZWFzb246IHN0cmluZztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmV2b2NhdGlvbkZpbGVzKHNvdXJjZVVSTDogc3RyaW5nKTogUHJvbWlzZTxSZXZvY2F0aW9uRmlsZVtdPiB7XG4gICAgbGV0IHJlcG8gPSByZXZva2VSZXBvKHNvdXJjZVVSTCk7XG4gICAgbGV0IHJldm9jYXRpb25zOiBSZXZvY2F0aW9uRmlsZVtdID0gW107XG4gICAgZm9yIChsZXQgbmFtZSBvZiBhd2FpdCBsaXN0UmVwb0RpcihyZXBvLCBSRVZPQ0FUSU9OU19ESVIpKSB7XG4gICAgICAgIGlmICghbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZCA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZFJlcG9GaWxlKHJlcG8sIHBhdGguam9pbihSRVZPQ0FUSU9OU19ESVIsIG5hbWUpKSB8fCBcIlwiKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQuZmluZ2VycHJpbnQpIHtcbiAgICAgICAgICAgICAgICByZXZvY2F0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcmV2b2NhdGlvbklkOiBwYXJzZWQucmV2b2NhdGlvbklkIHx8IG5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQ6IHBhcnNlZC5maW5nZXJwcmludCxcbiAgICAgICAgICAgICAgICAgICAgaXA6IHBhcnNlZC5pcCB8fCBwYXJzZWQuYXR0ZW1wdD8uaXAgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgcmV2b2tlZEF0OiBwYXJzZWQucmV2b2tlZEF0IHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIHJldm9rZWRCeTogcGFyc2VkLnJldm9rZWRCeSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246IHBhcnNlZC5yZWFzb24gfHwgXCJcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIHVucmVhZGFibGUgcmV2b2NhdGlvbiAke25hbWV9LiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldm9jYXRpb25zO1xufVxuXG4vKiogV2hpY2gga2V5IGlzIGFsbG93ZWQgZnJvbSB3aGljaCBhZGRyZXNzLiBVbnJldm9rZXMgbGl2ZSBpbiB0aGUgc291cmNlIHJlcG8sIHNvIHRoZXkgYXJlIGNvdmVyZWRcbiAgICBieSBpdHMgc2lnbmF0dXJlLCBhbmQgbm90aGluZyBpcyByZWFkIG91dCBvZiB0aGVtIGJ1dCB0aGUgcGFpcnMgdGhleSBhbGxvdyBhbmQsIGZvciBmaWxlc1xuICAgIHdyaXR0ZW4gYmVmb3JlIHBhaXJzIGV4aXN0ZWQsIHRoZSByZXZvY2F0aW9uIGlkcyB0aGV5IG5hbWUuICovXG5leHBvcnQgdHlwZSBVbnJldm9rZXMgPSB7XG4gICAgLy8gZmluZ2VycHJpbnQgYW5kIGlwLCB0byBldmVyeSB1bnJldm9rZSB0aGF0IGFsbG93cyB0aGVtLiBFdmVyeSBvbmUgcmF0aGVyIHRoYW4gdGhlIGxhc3QsXG4gICAgLy8gYmVjYXVzZSB0aGUgc2FtZSBwYWlyIGlzIG9mdGVuIG5hbWVkIGFnYWluIGJ5IGEgbGF0ZXIgdW5yZXZva2UgYW5kIHRoZXJlIGlzIG5vIHJlYXNvbiB0b1xuICAgIC8vIHByZWZlciBvbmUgb3ZlciBhbm90aGVyLlxuICAgIHBhaXJzOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT47XG4gICAgLy8gUmV2b2NhdGlvbiBpZCB0byB0aGUgdW5yZXZva2VzIG5hbWluZyBpdC4gT25seSBmb3IgdW5yZXZva2VzIHdyaXR0ZW4gYmVmb3JlIHRoaXMgd2FzIGFib3V0XG4gICAgLy8gcGFpcnMgYXQgYWxsLCBzbyBhIG1hY2hpbmUgcmVhZGluZyBvbmUgYWxyZWFkeSBpbiBhIHJlcG8gc3RpbGwgaG9ub3VycyBpdC5cbiAgICBsZWdhY3lJZHM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkVW5yZXZva2VzKHNvdXJjZVVSTDogc3RyaW5nKTogUHJvbWlzZTxVbnJldm9rZXM+IHtcbiAgICBsZXQgcmVwbyA9IHNvdXJjZVJlcG8oc291cmNlVVJMKTtcbiAgICBsZXQgcGFpcnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgbGV0IGxlZ2FjeUlkcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgICBsZXQgYWRkID0gKGludG86IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiwga2V5OiBzdHJpbmcsIHVucmV2b2tlSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpbnRvLnNldChrZXksIFsuLi4oaW50by5nZXQoa2V5KSB8fCBbXSksIHVucmV2b2tlSWRdKTtcbiAgICB9O1xuICAgIGZvciAobGV0IG5hbWUgb2YgYXdhaXQgbGlzdFJlcG9EaXIocmVwbywgVU5SRVZPS0VTX0RJUikpIHtcbiAgICAgICAgaWYgKCFuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCB1bnJldm9rZUlkID0gbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZCA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZFJlcG9GaWxlKHJlcG8sIHBhdGguam9pbihVTlJFVk9LRVNfRElSLCBuYW1lKSkgfHwgXCJcIik7XG4gICAgICAgICAgICBmb3IgKGxldCBhbGxvd2VkIG9mIHBhcnNlZC5hbGxvd2VkIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgLy8gRWl0aGVyIGtpbmQgb2YgaWRlbnRpdHk6IGFuIHNzaCBrZXkgbmFtZXMgYSBmaW5nZXJwcmludCwgYSBtYWNoaW5lIGEgbWFjaGluZUlkLlxuICAgICAgICAgICAgICAgIGxldCBpZGVudGl0eSA9IGFsbG93ZWQuZmluZ2VycHJpbnQgfHwgYWxsb3dlZC5tYWNoaW5lSWQ7XG4gICAgICAgICAgICAgICAgaWYgKGlkZW50aXR5ICYmIGFsbG93ZWQuaXApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKHBhaXJzLCBwYWlyS2V5KHsgZmluZ2VycHJpbnQ6IGlkZW50aXR5LCBpcDogYWxsb3dlZC5pcCB9KSwgdW5yZXZva2VJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgcmV2b2NhdGlvbklkIG9mIHBhcnNlZC5yZXZvY2F0aW9uSWRzIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgYWRkKGxlZ2FjeUlkcywgcmV2b2NhdGlvbklkLCB1bnJldm9rZUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIHVucmVhZGFibGUgdW5yZXZva2UgJHtuYW1lfS4gJHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHBhaXJzLCBsZWdhY3lJZHMgfTtcbn1cblxuLyoqIEV2ZXJ5IHVucmV2b2tlIGNvdmVyaW5nIG9uZSByZXZvY2F0aW9uOiBieSB0aGUgcGFpciBpdCBpcyBhYm91dCwgYW5kIGJ5IGl0cyBpZCBmb3IgdGhlIGZpbGVzXG4gICAgd3JpdHRlbiBiZWZvcmUgcGFpcnMgZXhpc3RlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJldm9rZXNGb3IodW5yZXZva2VzOiBVbnJldm9rZXMsIHJldm9jYXRpb246IHsgcmV2b2NhdGlvbklkOiBzdHJpbmc7IGZpbmdlcnByaW50OiBzdHJpbmc7IGlwOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiBbXG4gICAgICAgIC4uLnVucmV2b2tlcy5wYWlycy5nZXQocGFpcktleShyZXZvY2F0aW9uKSkgfHwgW10sXG4gICAgICAgIC4uLnVucmV2b2tlcy5sZWdhY3lJZHMuZ2V0KHJldm9jYXRpb24ucmV2b2NhdGlvbklkKSB8fCBbXSxcbiAgICBdO1xufVxuXG4vKiogV3JpdGVzIGEgcmV2b2NhdGlvbiwgdW5sZXNzIHRoaXMga2V5IGlzIGFscmVhZHkgcmV2b2tlZCBmb3IgdGhpcyBhZGRyZXNzLiBDaGVja2VkIHR3aWNlOlxuICAgIGFnYWluc3Qgd2hhdCB0aGlzIG1hY2hpbmUgYWxyZWFkeSBrbm93cywgd2hpY2ggbmVlZHMgbm8gbmV0d29yaywgYW5kIGFnYWluIGFnYWluc3QgdGhlIHJlcG9cbiAgICBhZnRlciBwdWxsaW5nIGl0LCBzbyBhIGZsb29kIG9mIHVua25vd24ga2V5cyBjYW5ub3QgdHVybiBpbnRvIGEgZmxvb2Qgb2YgY29tbWl0cy5cblxuICAgIERlZHVwbGljYXRpb24gaXMgb24gdGhlIHBhaXIuIFRoZSBzYW1lIGtleSBmcm9tIGEgc2Vjb25kIGFkZHJlc3MgaXMgYSBzZWNvbmQgZXZlbnQgYW5kIGdldHMgaXRzXG4gICAgb3duIHJldm9jYXRpb24sIGJlY2F1c2UgYW4gdW5yZXZva2Ugb25seSBldmVyIGZvcmdpdmVzIHRoZSBwYWlyIGl0IG5hbWVzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY29yZFJldm9jYXRpb24oY29uZmlnOiB7XG4gICAgc291cmNlVVJMOiBzdHJpbmc7XG4gICAgZmluZ2VycHJpbnQ6IHN0cmluZztcbiAgICBrZXlMaW5lOiBzdHJpbmc7XG4gICAgYXR0ZW1wdDogQXR0ZW1wdDtcbiAgICBob3N0TGFiZWw6IHN0cmluZztcbn0pIHtcbiAgICBsZXQgeyBzb3VyY2VVUkwsIGZpbmdlcnByaW50LCBrZXlMaW5lLCBhdHRlbXB0LCBob3N0TGFiZWwgfSA9IGNvbmZpZztcbiAgICBsZXQgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGxldCBwYWlyID0gcGFpcktleSh7IGZpbmdlcnByaW50LCBpcDogYXR0ZW1wdC5pcCB9KTtcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5yZXZvY2F0aW9ucykuc29tZShlbnRyeSA9PiBwYWlyS2V5KGVudHJ5KSA9PT0gcGFpcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBzeW5jUmVwb0ZpbGVzKHJldm9rZVJlcG8oc291cmNlVVJMKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgcmVjb3JkIHRoZSByZXZvY2F0aW9uIG9mICR7ZmluZ2VycHJpbnR9LCAke3Jldm9rZVJlcG9VUkwoc291cmNlVVJMKX0gY291bGQgbm90IGJlIHJlYWQuICR7ZX1gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgcmV2b2NhdGlvbklkID0gbmV3UmV2b2NhdGlvbklkKGZpbmdlcnByaW50KTtcbiAgICBsZXQgZXhpc3RpbmcgPSAoYXdhaXQgcmVhZFJldm9jYXRpb25GaWxlcyhzb3VyY2VVUkwpKS5maW5kKGVudHJ5ID0+IHBhaXJLZXkoZW50cnkpID09PSBwYWlyKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgLy8gQW5vdGhlciBtYWNoaW5lIGdvdCB0aGVyZSBmaXJzdCwgd2hpY2ggaXMgdGhlIG5vcm1hbCBvdXRjb21lIHdoZW4gc2V2ZXJhbCBzZWUgdGhlIHNhbWVcbiAgICAgICAgLy8gYXR0ZW1wdC4gUmVjb3JkIGl0IGxvY2FsbHkgc28gd2UgbmV2ZXIgbG9vayBhZ2Fpbi5cbiAgICAgICAgc3RhdGUucmV2b2NhdGlvbnNbZXhpc3RpbmcucmV2b2NhdGlvbklkXSA9IHtcbiAgICAgICAgICAgIHJldm9jYXRpb25JZDogZXhpc3RpbmcucmV2b2NhdGlvbklkLFxuICAgICAgICAgICAgZmluZ2VycHJpbnQ6IGV4aXN0aW5nLmZpbmdlcnByaW50LCBpcDogZXhpc3RpbmcuaXAsXG4gICAgICAgICAgICByZXZva2VkQXQ6IGV4aXN0aW5nLnJldm9rZWRBdCwgcmV2b2tlZEJ5OiBleGlzdGluZy5yZXZva2VkQnksXG4gICAgICAgICAgICByZWFzb246IGV4aXN0aW5nLnJlYXNvbixcbiAgICAgICAgICAgIHVucmV2b2tlSWQ6IFwiXCIsIHVucmV2b2tlZDogZmFsc2UsXG4gICAgICAgICAgICByZXBvcnRlZFJlbW92ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBzYXZlU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCByZXBvUGF0aCA9IHJldm9rZVJlcG9QYXRoKHNvdXJjZVVSTCk7XG4gICAgbGV0IGtleVBhdGggPSBhd2FpdCBlbnN1cmVSZXZva2VLZXkoc291cmNlVVJMKTtcbiAgICBsZXQgZGlyZWN0b3J5ID0gcGF0aC5qb2luKHJlcG9QYXRoLCBSRVZPQ0FUSU9OU19ESVIpO1xuICAgIGF3YWl0IGZzLm1rZGlyKGRpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgbGV0IHJldm9rZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGRpcmVjdG9yeSwgYCR7cmV2b2NhdGlvbklkfS5qc29uYCksIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcmV2b2NhdGlvbklkLFxuICAgICAgICBmaW5nZXJwcmludCxcbiAgICAgICAgLy8gVGhlIHR3byBoYWx2ZXMgb2Ygd2hhdCBoYXBwZW5lZC4gQW4gdW5yZXZva2UgbmFtaW5nIGJvdGggaXMgd2hhdCB1bmRvZXMgdGhpcy5cbiAgICAgICAgaXA6IGF0dGVtcHQuaXAsXG4gICAgICAgIGtleToga2V5TGluZSxcbiAgICAgICAgcmV2b2tlZEF0LFxuICAgICAgICByZXZva2VkQnk6IGhvc3RMYWJlbCxcbiAgICAgICAgcmVhc29uOiBSRVZPQ0FUSU9OX1JFQVNPTixcbiAgICAgICAgYXR0ZW1wdCxcbiAgICB9LCB1bmRlZmluZWQsIDQpICsgXCJcXG5cIik7XG5cbiAgICBhd2FpdCBydW5HaXQoeyBhcmdzOiBbXCJhZGRcIiwgXCItQVwiXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCB9KTtcbiAgICBhd2FpdCBydW5HaXQoeyBhcmdzOiBbXCItY1wiLCBcInVzZXIuZW1haWw9cG9ydHNlY3VyZUBsb2NhbGhvc3RcIiwgXCItY1wiLCBcInVzZXIubmFtZT1wb3J0c2VjdXJlXCIsIFwiY29tbWl0XCIsIFwiLW1cIiwgYHJldm9rZSAke3Jldm9jYXRpb25JZH1gXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCB9KTtcbiAgICBsZXQgcHVzaCA9IGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInB1c2hcIiwgXCJvcmlnaW5cIiwgXCJIRUFEXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoLCBhbGxvd0ZhaWx1cmU6IHRydWUgfSk7XG4gICAgaWYgKHB1c2guc3RhdHVzICE9PSAwKSB7XG4gICAgICAgIC8vIE1vc3QgbGlrZWx5IGFub3RoZXIgbWFjaGluZSBwdXNoZWQgdGhlIHNhbWUgcmV2b2NhdGlvbiBmaXJzdC4gVGhlIG5leHQgY2hlY2sgd2lsbCBwdWxsXG4gICAgICAgIC8vIGl0IGFuZCByZWNvcmQgaXQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV0cnkgaGVyZS5cbiAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCBwdXNoIHRoZSByZXZvY2F0aW9uIG9mICR7ZmluZ2VycHJpbnR9LCB3aWxsIHBpY2sgaXQgdXAgb24gdGhlIG5leHQgY2hlY2suICR7KHB1c2guc3Rkb3V0ICsgcHVzaC5zdGRlcnIpLnRyaW0oKX1gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzdGF0ZS5yZXZvY2F0aW9uc1tyZXZvY2F0aW9uSWRdID0ge1xuICAgICAgICByZXZvY2F0aW9uSWQsIGZpbmdlcnByaW50LCBpcDogYXR0ZW1wdC5pcCxcbiAgICAgICAgcmV2b2tlZEF0LCByZXZva2VkQnk6IGhvc3RMYWJlbCwgcmVhc29uOiBSRVZPQ0FUSU9OX1JFQVNPTixcbiAgICAgICAgdW5yZXZva2VJZDogXCJcIiwgdW5yZXZva2VkOiBmYWxzZSxcbiAgICAgICAgLy8gVGhlIG1lc3NhZ2UgYmVsb3cgYWxyZWFkeSBzYXlzIHRoaXMgbWFjaGluZSBoYXMgc3RvcHBlZCBhY2NlcHRpbmcgdGhlIGtleSwgc28gdGhlIG9uZVxuICAgICAgICAvLyBhYm91dCBub3RpY2luZyBhIHJldm9jYXRpb24gd291bGQgb25seSByZXBlYXQgaXQuXG4gICAgICAgIHJlcG9ydGVkUmVtb3ZlZDogdHJ1ZSxcbiAgICB9O1xuICAgIGF3YWl0IHNhdmVTdGF0ZSgpO1xuICAgIGxldCBlbmRlZCA9IGRlc2NyaWJlQWxsRW5kZWQoYXdhaXQgZW5kQWxsU1NIU2Vzc2lvbnMoKSk7XG4gICAgLy8gU2FpZCB3aGVuIHRoZSBmaWxlIGlzIHdyaXR0ZW4sIG5vdCBoZXJlLCBzbyBvbmUgZXZlbnQgcHJvZHVjZXMgb25lIG1lc3NhZ2UuXG4gICAgYWRkTGVhZGluZ0NoYW5nZVJlYXNvbih7XG4gICAgICAgIGhlYWRsaW5lOiBgU1VTUElDSU9VUyBJUCAke2F0dGVtcHQuaXB9IEZST1pFIEtFWSAke2tleUxpbmUgJiYga2V5TmljZU5hbWUoa2V5TGluZSkgfHwgZmluZ2VycHJpbnR9YCxcbiAgICAgICAgYm9keTpcbiAgICAgICAgICAgIGBTb21lb25lIGxvZ2dlZCBpbiBmcm9tICR7YXR0ZW1wdC5pcH0gdXNpbmcgYSBrZXkgdGhhdCBpcyBub3QgYWxsb3dlZCBmcm9tIHRoZXJlLiBUaGVgXG4gICAgICAgICAgICArIGAga2V5IGl0c2VsZiB3YXMgY29ycmVjdCwgc28gZWl0aGVyIHNvbWVvbmUgZWxzZSBoYXMgYSBjb3B5IG9mIGl0LCBvciBvbmUgb2YgeW91ciBvd25gXG4gICAgICAgICAgICArIGAgYWRkcmVzc2VzIGNoYW5nZWQuYFxuICAgICAgICAgICAgKyBgXFxuXFxuVGhlIGtleSBpcyBmcm96ZW4gb24gZXZlcnkgbWFjaGluZSBub3csIGFuZCB3b3JrcyBub3doZXJlLiR7ZW5kZWR9YFxuICAgICAgICAgICAgKyBgXFxuXFxuSWYgdGhpcyB3YXMgYW4gYXR0YWNrLCByZW1vdmUgdGhhdCBrZXkgZnJvbSBcXGAke3NvdXJjZVVSTH1cXGAgbm93LmBcbiAgICAgICAgICAgICsgYFxcbklmIGl0IHdhcyB5b3UsIHJ1biBcXGB5YXJuIHVucmV2b2tlIGdpdFxcYCBpbiB0aGF0IHJlcG8uIEl0IGFsbG93cyAke2F0dGVtcHQuaXB9IG9uYFxuICAgICAgICAgICAgKyBgIHRoYXQga2V5LCBhbmQgdGFrZXMgYW4gaG91ciB0byByZWFjaCBldmVyeSBtYWNoaW5lLmBcbiAgICAgICAgICAgICsgYFxcblxcbmtleTogXFxgJHtrZXlMaW5lICYmIHN1bW1hcml6ZUtleShrZXlMaW5lKSB8fCBmaW5nZXJwcmludH1cXGBgXG4gICAgICAgICAgICArIGBcXG50cmllZCB0byBsb2cgaW4gYXM6IFxcYCR7YXR0ZW1wdC51c2VyfVxcYGBcbiAgICAgICAgICAgICsgYFxcbmFsbG93ZWQgb25seSBmcm9tOiBcXGAke2F0dGVtcHQucmVxdWlyZWR9XFxgYCxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIFRha2VzIGV2ZXJ5dGhpbmcgdGhlIHJldm9rZSByZXBvcyBsaXN0IGludG8gbG9jYWwgc3RhdGUuIE9uY2UgaGVyZSBhIHJldm9jYXRpb24gbmV2ZXIgbGVhdmVzLFxuICAgIGV2ZW4gaWYgdGhlIGZpbGUgaXMgZGVsZXRlZDogdGhlIGtleSB0aGF0IHdyaXRlcyByZXZvY2F0aW9ucyBpcyBvbiBldmVyeSBzZXJ2ZXIsIHNvIGFuIGF0dGFja2VyXG4gICAgaG9sZGluZyBpdCBjb3VsZCBvdGhlcndpc2UgZXJhc2UgdGhlIHJlY29yZCB0aGF0IGxvY2tlZCB0aGVtIG91dC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhYnNvcmJSZXZvY2F0aW9ucyhzb3VyY2VVUkxzOiBzdHJpbmdbXSkge1xuICAgIGxldCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBzb3VyY2VVUkwgb2Ygc291cmNlVVJMcykge1xuICAgICAgICBsZXQgZW50cmllcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVudHJpZXMgPSBhd2FpdCByZWFkUmV2b2NhdGlvbkZpbGVzKHNvdXJjZVVSTCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIFVucmVhZGFibGUgaXMgbm90IGVtcHR5LiBXaGF0ZXZlciB3ZSBhbHJlYWR5IGtuZXcgc3RheXMgZXhhY3RseSBhcyBpdCBpcy5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFNraXBwaW5nIHRoZSByZXZvY2F0aW9ucyBvZiAke3Jldm9rZVJlcG9VUkwoc291cmNlVVJMKX0sIHRoZXkgY291bGQgbm90IGJlIHJlYWQuICR7ZX1gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXZvY2F0aW9uc1tlbnRyeS5yZXZvY2F0aW9uSWRdKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5yZXZvY2F0aW9uc1tlbnRyeS5yZXZvY2F0aW9uSWRdID0ge1xuICAgICAgICAgICAgICAgIHJldm9jYXRpb25JZDogZW50cnkucmV2b2NhdGlvbklkLFxuICAgICAgICAgICAgICAgIGZpbmdlcnByaW50OiBlbnRyeS5maW5nZXJwcmludCxcbiAgICAgICAgICAgICAgICBpcDogZW50cnkuaXAsXG4gICAgICAgICAgICAgICAgcmV2b2tlZEF0OiBlbnRyeS5yZXZva2VkQXQsXG4gICAgICAgICAgICAgICAgcmV2b2tlZEJ5OiBlbnRyeS5yZXZva2VkQnksXG4gICAgICAgICAgICAgICAgcmVhc29uOiBlbnRyeS5yZWFzb24sXG4gICAgICAgICAgICAgICAgdW5yZXZva2VJZDogXCJcIixcbiAgICAgICAgICAgICAgICB1bnJldm9rZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlcG9ydGVkUmVtb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgYXdhaXQgc2F2ZVN0YXRlKCk7XG4gICAgfVxufVxuXG4vKiogQW4gdW5yZXZva2UgY291bnRzIHRoZSBtb21lbnQgaXQgaXMgc2Vlbi5cblxuICAgIFRoZXJlIHVzZWQgdG8gYmUgYW4gaG91cidzIHdhaXQgYmVmb3JlIGhvbm91cmluZyBvbmUsIGFnYWluc3QgYSBzaWduaW5nIGtleSB0aGF0IGhhZCBpdHNlbGZcbiAgICBiZWVuIHN0b2xlbi4gSXQgd2FzIG5ldmVyIHdvcnRoIGl0OiBhbiB1bnJldm9rZSBoYXMgdG8gYmUgc2lnbmVkLCBzbyB3cml0aW5nIG9uZSBhbHJlYWR5IHRha2VzXG4gICAgdGhlIGhhcmR3YXJlIGtleSwgYW5kIGFueW9uZSBob2xkaW5nIHRoYXQgY2FuIHNpZ24gYSBuZXcgYXV0aG9yaXplZF9rZXlzIG5hbWluZyB3aGF0ZXZlciB0aGV5XG4gICAgbGlrZSAtIHRoZXkgaGF2ZSBubyByZWFzb24gdG8gZ28gbmVhciBhbiB1bnJldm9rZS4gTWVhbndoaWxlIHRoZSB3YWl0IGNvc3QgcmVhbCBhY2Nlc3MsIGFuZCBhXG4gICAgbWFjaGluZSBkZXBsb3llZCBhZnRlciBhbiBpbmNpZGVudCB3b3VsZCBmcmVlemUga2V5cyBpdCBoYWQgbmV2ZXIgaGFkIGEgcHJvYmxlbSB3aXRoLCBmb3IgYW5cbiAgICBob3VyLCBiZWNhdXNlIGl0IHdhcyBzZWVpbmcgdGhlIHVucmV2b2tlIGZvciB0aGUgZmlyc3QgdGltZS5cblxuICAgIFdoYXQgc3RpbGwgcHJvdGVjdHMgYSBzdG9sZW4gc2lnbmluZyBrZXkgaXMgdGhlIDI0IGhvdXJzIGJlZm9yZSBhIE5FVyBzaWduZXIgaXMgYWNjZXB0ZWQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlVbnJldm9rZXMoc291cmNlVVJMczogc3RyaW5nW10pIHtcbiAgICBsZXQgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGxldCB1bnJldm9rZXM6IFVucmV2b2tlcyA9IHsgcGFpcnM6IG5ldyBNYXAoKSwgbGVnYWN5SWRzOiBuZXcgTWFwKCkgfTtcbiAgICBmb3IgKGxldCBzb3VyY2VVUkwgb2Ygc291cmNlVVJMcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHNvdXJjZSA9IGF3YWl0IHJlYWRVbnJldm9rZXMoc291cmNlVVJMKTtcbiAgICAgICAgICAgIGZvciAobGV0IFtwYWlyLCBpZHNdIG9mIHNvdXJjZS5wYWlycykge1xuICAgICAgICAgICAgICAgIHVucmV2b2tlcy5wYWlycy5zZXQocGFpciwgWy4uLih1bnJldm9rZXMucGFpcnMuZ2V0KHBhaXIpIHx8IFtdKSwgLi4uaWRzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBbcmV2b2NhdGlvbklkLCBpZHNdIG9mIHNvdXJjZS5sZWdhY3lJZHMpIHtcbiAgICAgICAgICAgICAgICB1bnJldm9rZXMubGVnYWN5SWRzLnNldChyZXZvY2F0aW9uSWQsIFsuLi4odW5yZXZva2VzLmxlZ2FjeUlkcy5nZXQocmV2b2NhdGlvbklkKSB8fCBbXSksIC4uLmlkc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBVbnJlYWRhYmxlIGlzIG5vdCBcInRoZXJlIGFyZSBubyB1bnJldm9rZXNcIi4gVGhlIHJldm9jYXRpb25zIHNpbXBseSBzdGFuZC5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFNraXBwaW5nIHRoZSB1bnJldm9rZXMgb2YgJHtzb3VyY2VVUkx9LCB0aGV5IGNvdWxkIG5vdCBiZSByZWFkLiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgcmV2b2NhdGlvbiBvZiBPYmplY3QudmFsdWVzKHN0YXRlLnJldm9jYXRpb25zKSkge1xuICAgICAgICBpZiAocmV2b2NhdGlvbi51bnJldm9rZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3ZlcmluZyA9IHVucmV2b2tlc0Zvcih1bnJldm9rZXMsIHJldm9jYXRpb24pO1xuICAgICAgICBpZiAoIWNvdmVyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVucmV2b2tlSWQgPSBjb3ZlcmluZ1swXTtcbiAgICAgICAgcmV2b2NhdGlvbi51bnJldm9rZUlkID0gdW5yZXZva2VJZDtcbiAgICAgICAgcmV2b2NhdGlvbi51bnJldm9rZWQgPSB0cnVlO1xuICAgICAgICByZXZvY2F0aW9uLnJlcG9ydGVkUmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICBhd2FpdCBzYXZlU3RhdGUoKTtcbiAgICAgICAgLy8gT25seSBtZWFucyBhbnl0aGluZyBpZiB0aGUga2V5IGNvbWVzIGJhY2sgaW50byB0aGUgZmlsZSwgc28gaXQgaXMgc2FpZCB0aGVyZS5cbiAgICAgICAgYWRkQ2hhbmdlUmVhc29uKFxuICAgICAgICAgICAgYFVuZnJvemUgYSBrZXkgZm9yIFxcYCR7cmV2b2NhdGlvbi5pcH1cXGAuIEl0IHdhcyBmcm96ZW4gZm9yIGJlaW5nIHVzZWQgZnJvbSB0aGVyZSwgYW5kYFxuICAgICAgICAgICAgKyBgICR7dW5yZXZva2VJZH0gc2F5cyB0aGF0IGFkZHJlc3MgaXMgYWxsb3dlZCBhZnRlciBhbGwuYFxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIFJlcG9ydHMgZWFjaCByZXZvY2F0aW9uIHRoZSBmaXJzdCB0aW1lIGl0IGFjdHVhbGx5IHRha2VzIGEga2V5IG91dCBvZiB0aGlzIG1hY2hpbmUncyBmaWxlLiBUaGVcbiAgICBkcm9wcGluZyBpdHNlbGYgaGFwcGVucyBpbiByZWFkU2lnbmVkUmVwbywgd2hpY2ggc3RyaXBzIHJldm9rZWQga2V5cyBiZWZvcmUgYW55dGhpbmcgcmVhZHMgdGhlbVxuICAgIC0gdGhpcyBvbmx5IHNheXMgc28sIGFuZCBraWxscyB3aGF0ZXZlciBzZXNzaW9ucyB0aGUga2V5IHdhcyBob2xkaW5nIG9wZW4uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwb3J0UmV2b2tlZEtleXMoKSB7XG4gICAgbGV0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBmb3IgKGxldCByZXZvY2F0aW9uIG9mIE9iamVjdC52YWx1ZXMoc3RhdGUucmV2b2NhdGlvbnMpKSB7XG4gICAgICAgIGlmIChyZXZvY2F0aW9uLnVucmV2b2tlZCB8fCByZXZvY2F0aW9uLnJlcG9ydGVkUmVtb3ZlZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV2b2NhdGlvbi5yZXBvcnRlZFJlbW92ZWQgPSB0cnVlO1xuICAgICAgICBhd2FpdCBzYXZlU3RhdGUoKTtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBpZiB0aGUga2V5IGlzIG5vdCBpbiB0aGUgZmlsZS4gSXQgbGVmdCBsb25nIGFnbywgYW5kIHRoaXMgaXMgYSBtYWNoaW5lIHRoYXRcbiAgICAgICAgLy8gcmVzdGFydGVkIGFuZCByZWFkIHRoZSByZXZvY2F0aW9uIGJhY2sgb3V0IG9mIHRoZSByZXBvLlxuICAgICAgICBsZXQga2V5ID0gc3RhdGUuYXBwbGllZEtleXMuZmluZChhcHBsaWVkID0+IGtleUZpbmdlcnByaW50KGFwcGxpZWQpID09PSByZXZvY2F0aW9uLmZpbmdlcnByaW50KTtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoYXRldmVyIHRoYXQga2V5IGlzIGhvbGRpbmcgb3BlbiBnb2VzIHdpdGggaXQuXG4gICAgICAgIGxldCBlbmRlZCA9IGRlc2NyaWJlQWxsRW5kZWQoYXdhaXQgZW5kQWxsU1NIU2Vzc2lvbnMoKSk7XG4gICAgICAgIGFkZExlYWRpbmdDaGFuZ2VSZWFzb24oe1xuICAgICAgICAgICAgaGVhZGxpbmU6IGBTVVNQSUNJT1VTIElQICR7cmV2b2NhdGlvbi5pcCB8fCBcInVua25vd25cIn0gRlJPWkUgS0VZICR7a2V5TmljZU5hbWUoa2V5KX1gLFxuICAgICAgICAgICAgYm9keTpcbiAgICAgICAgICAgICAgICBgQW5vdGhlciBtYWNoaW5lIHNhdyB0aGlzIGtleSB1c2VkIGZyb20gYW4gYWRkcmVzcyBpdCBpcyBub3QgYWxsb3dlZCBmcm9tLCBhbmRgXG4gICAgICAgICAgICAgICAgKyBgIGZyb3plIGl0IGV2ZXJ5d2hlcmUuIFRoaXMgbWFjaGluZSBoYXMgc3RvcHBlZCBhY2NlcHRpbmcgaXQgdG9vLiR7ZW5kZWR9YFxuICAgICAgICAgICAgICAgICsgYFxcblxcbmtleTogXFxgJHtzdW1tYXJpemVLZXkoa2V5KX1cXGBgXG4gICAgICAgICAgICAgICAgKyBgXFxuJHtkZXNjcmliZVJldm9jYXRpb24ocmV2b2NhdGlvbil9YCxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
321
|
-
/* _JS_SOURCE_HASH = "
|
|
322
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2b2NhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJldm9jYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkRBQTZCO0FBQzdCLGdEQUF3QjtBQUN4QixtQ0FBcUM7QUFDckMsc0RBQThFO0FBQzlFLGtEQUFnRTtBQUNoRSx3Q0FBNEM7QUFDNUMsK0JBQStCO0FBQy9CLDJDQUFnSDtBQUNoSCx5REFBK0Q7QUFDL0QsdUNBQW9FO0FBQ3BFLHlDQUFpRTtBQUNqRSxtQ0FBOEM7QUFFOUMsbUdBQW1HO0FBQ25HLG1HQUFtRztBQUNuRyxnR0FBZ0c7QUFDaEcsMEZBQTBGO0FBQzFGLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFDbEMsTUFBTSxpQkFBaUIsR0FBRyw0Q0FBNEMsQ0FBQztBQVV2RTtzQ0FDc0M7QUFDdEMsU0FBZ0IsT0FBTyxDQUFDLE1BQTJDO0lBQy9ELE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoRCxDQUFDO0FBRkQsMEJBRUM7QUFFRCw2RkFBNkY7QUFDN0YsU0FBZ0IsZUFBZSxDQUFDLFdBQW1CO0lBQy9DLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRCxPQUFPLEdBQUcsS0FBSyxJQUFJLElBQUEsb0JBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6SSxDQUFDO0FBSEQsMENBR0M7QUFFRCx5RkFBeUY7QUFDekYsU0FBUyxrQkFBa0IsQ0FBQyxVQUFnRjtJQUN4RyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxJQUFJLEtBQUssR0FBRztRQUNSLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBQSwwQkFBZ0IsRUFBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUN2RyxVQUFVLENBQUMsU0FBUyxJQUFJLFFBQVEsVUFBVSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7UUFDOUQsVUFBVSxDQUFDLE1BQU0sSUFBSSxFQUFFO1FBQ3ZCLFVBQVUsQ0FBQyxFQUFFLElBQUksVUFBVSxVQUFVLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRTtLQUNyRCxDQUFDO0lBQ0YsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFXTSxLQUFLLFVBQVUsbUJBQW1CLENBQUMsU0FBaUI7O0lBQ3ZELElBQUksSUFBSSxHQUFHLElBQUEsc0JBQVUsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxJQUFJLFdBQVcsR0FBcUIsRUFBRSxDQUFDO0lBQ3ZDLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxJQUFBLHVCQUFXLEVBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxQixTQUFTO1FBQ2IsQ0FBQztRQUNELElBQUksQ0FBQztZQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFBLHdCQUFZLEVBQUMsSUFBSSxFQUFFLGNBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDMUYsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ2IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO29CQUNoRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7b0JBQy9CLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFJLE1BQUEsTUFBTSxDQUFDLE9BQU8sMENBQUUsRUFBRSxDQUFBLElBQUksRUFBRTtvQkFDekMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDakMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDakMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRTtpQkFDOUIsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUN2QixDQUFDO0FBeEJELGtEQXdCQztBQWVNLEtBQUssVUFBVSxhQUFhLENBQUMsU0FBaUI7SUFDakQsSUFBSSxJQUFJLEdBQUcsSUFBQSxzQkFBVSxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO0lBQ3hDLElBQUksU0FBUyxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO0lBQzVDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBMkIsRUFBRSxHQUFXLEVBQUUsVUFBa0IsRUFBRSxFQUFFO1FBQ3ZFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUM7SUFDRixLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBQSx1QkFBVyxFQUFDLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDMUIsU0FBUztRQUNiLENBQUM7UUFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUM7WUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBQSx3QkFBWSxFQUFDLElBQUksRUFBRSxjQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLEtBQUssSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDdkMsa0ZBQWtGO2dCQUNsRixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUM7Z0JBQ3hELElBQUksUUFBUSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDekIsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDL0UsQ0FBQztZQUNMLENBQUM7WUFDRCxLQUFLLElBQUksWUFBWSxJQUFJLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ2xELEdBQUcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNoQyxDQUFDO0FBN0JELHNDQTZCQztBQUVEO29DQUNvQztBQUNwQyxTQUFnQixZQUFZLENBQUMsU0FBb0IsRUFBRSxVQUFxRTtJQUNwSCxPQUFPO1FBQ0gsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFO1FBQ2pELEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7S0FDNUQsQ0FBQztBQUNOLENBQUM7QUFMRCxvQ0FLQztBQUVEOzs7OztnRkFLZ0Y7QUFDekUsS0FBSyxVQUFVLGdCQUFnQixDQUFDLE1BTXRDO0lBQ0csSUFBSSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDckUsSUFBSSxLQUFLLEdBQUcsSUFBQSxnQkFBUSxHQUFFLENBQUM7SUFDdkIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzFFLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDRCxNQUFNLElBQUEseUJBQWEsRUFBQyxJQUFBLHNCQUFVLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLFdBQVcsS0FBSyxJQUFBLDRCQUFhLEVBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFJLFlBQVksR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxNQUFNLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzdGLElBQUksUUFBUSxFQUFFLENBQUM7UUFDWCx5RkFBeUY7UUFDekYscURBQXFEO1FBQ3JELEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHO1lBQ3ZDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDbEQsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO1lBQzVELE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtZQUN2QixVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLO1lBQ2hDLGVBQWUsRUFBRSxLQUFLO1NBQ3pCLENBQUM7UUFDRixNQUFNLElBQUEsaUJBQVMsR0FBRSxDQUFDO1FBQ2xCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJLFFBQVEsR0FBRyxJQUFBLDZCQUFjLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDekMsSUFBSSxPQUFPLEdBQUcsTUFBTSxJQUFBLDJCQUFlLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsSUFBSSxTQUFTLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckQsTUFBTSxrQkFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUFJLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sa0JBQUUsQ0FBQyxTQUFTLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxZQUFZLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDNUUsWUFBWTtRQUNaLFdBQVc7UUFDWCxnRkFBZ0Y7UUFDaEYsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ2QsR0FBRyxFQUFFLE9BQU87UUFDWixTQUFTO1FBQ1QsU0FBUyxFQUFFLFNBQVM7UUFDcEIsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixPQUFPO0tBQ1YsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFFekIsTUFBTSxJQUFBLFlBQU0sRUFBQyxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxJQUFBLFlBQU0sRUFBQyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxpQ0FBaUMsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLFlBQVksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xLLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBQSxZQUFNLEVBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFHLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQix5RkFBeUY7UUFDekYsdURBQXVEO1FBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLFdBQVcsd0NBQXdDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pJLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxLQUFLLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHO1FBQzlCLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ3pDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxpQkFBaUI7UUFDMUQsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSztRQUNoQyx3RkFBd0Y7UUFDeEYsb0RBQW9EO1FBQ3BELGVBQWUsRUFBRSxJQUFJO0tBQ3hCLENBQUM7SUFDRixNQUFNLElBQUEsaUJBQVMsR0FBRSxDQUFDO0lBQ2xCLElBQUksS0FBSyxHQUFHLElBQUEsMkJBQWdCLEVBQUMsTUFBTSxJQUFBLDRCQUFpQixHQUFFLENBQUMsQ0FBQztJQUN4RCw4RUFBOEU7SUFDOUUsSUFBQSxnQ0FBc0IsRUFBQztRQUNuQixRQUFRLEVBQUUsaUJBQWlCLE9BQU8sQ0FBQyxFQUFFLGNBQWMsT0FBTyxJQUFJLElBQUEsNEJBQVcsRUFBQyxPQUFPLENBQUMsSUFBSSxXQUFXLEVBQUU7UUFDbkcsSUFBSSxFQUNBLDBCQUEwQixPQUFPLENBQUMsRUFBRSxrREFBa0Q7Y0FDcEYsc0ZBQXNGO2NBQ3RGLHFCQUFxQjtjQUNyQixpRUFBaUUsS0FBSyxFQUFFO2NBQ3hFLHFEQUFxRCxTQUFTLFNBQVM7Y0FDdkUsdUJBQXVCO2NBQ3ZCLGdCQUFnQixJQUFBLHdCQUFjLEVBQUMsU0FBUyxDQUFDLDZCQUE2QjtjQUN0RSxlQUFlLE9BQU8sQ0FBQyxFQUFFLHlEQUF5RDtjQUNsRixjQUFjLE9BQU8sSUFBSSxJQUFBLDZCQUFZLEVBQUMsT0FBTyxDQUFDLElBQUksV0FBVyxJQUFJO2NBQ2pFLDJCQUEyQixPQUFPLENBQUMsSUFBSSxJQUFJO2NBQzNDLDBCQUEwQixPQUFPLENBQUMsUUFBUSxJQUFJO0tBQ3ZELENBQUMsQ0FBQztJQUNILE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUF6RkQsNENBeUZDO0FBRUQ7O3dFQUV3RTtBQUNqRSxLQUFLLFVBQVUsaUJBQWlCLENBQUMsVUFBb0I7SUFDeEQsSUFBSSxLQUFLLEdBQUcsSUFBQSxnQkFBUSxHQUFFLENBQUM7SUFDdkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLEtBQUssSUFBSSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLENBQUM7WUFDRCxPQUFPLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULDRFQUE0RTtZQUM1RSxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixJQUFBLDRCQUFhLEVBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZHLFNBQVM7UUFDYixDQUFDO1FBQ0QsS0FBSyxJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUN4QixJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLFNBQVM7WUFDYixDQUFDO1lBQ0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUc7Z0JBQ3BDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtnQkFDaEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1osU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2dCQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7Z0JBQzFCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLGVBQWUsRUFBRSxLQUFLO2FBQ3pCLENBQUM7WUFDRixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBQSxpQkFBUyxHQUFFLENBQUM7SUFDdEIsQ0FBQztBQUNMLENBQUM7QUFqQ0QsOENBaUNDO0FBRUQ7Ozs7Ozs7OztnR0FTZ0c7QUFDekYsS0FBSyxVQUFVLGNBQWMsQ0FBQyxVQUFvQjtJQUNyRCxJQUFJLEtBQUssR0FBRyxJQUFBLGdCQUFRLEdBQUUsQ0FBQztJQUN2QixJQUFJLFNBQVMsR0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDdEUsS0FBSyxJQUFJLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUM7WUFDRCxJQUFJLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QyxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFDRCxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMvQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RHLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULDRFQUE0RTtZQUM1RSxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixTQUFTLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLFNBQVM7UUFDYixDQUFDO1FBQ0QsSUFBSSxRQUFRLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLFNBQVM7UUFDYixDQUFDO1FBQ0QsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ25DLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ25DLE1BQU0sSUFBQSxpQkFBUyxHQUFFLENBQUM7UUFDbEIsZ0ZBQWdGO1FBQ2hGLElBQUEseUJBQWUsRUFDWCx1QkFBdUIsVUFBVSxDQUFDLEVBQUUsa0RBQWtEO2NBQ3BGLElBQUksVUFBVSwwQ0FBMEMsQ0FDN0QsQ0FBQztJQUNOLENBQUM7QUFDTCxDQUFDO0FBcENELHdDQW9DQztBQUVEOztpRkFFaUY7QUFDMUUsS0FBSyxVQUFVLGlCQUFpQjtJQUNuQyxJQUFJLEtBQUssR0FBRyxJQUFBLGdCQUFRLEdBQUUsQ0FBQztJQUN2QixLQUFLLElBQUksVUFBVSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyRCxTQUFTO1FBQ2IsQ0FBQztRQUNELFVBQVUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLE1BQU0sSUFBQSxpQkFBUyxHQUFFLENBQUM7UUFDbEIsNEZBQTRGO1FBQzVGLDBEQUEwRDtRQUMxRCxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUEsK0JBQWMsRUFBQyxPQUFPLENBQUMsS0FBSyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1AsU0FBUztRQUNiLENBQUM7UUFDRCxrREFBa0Q7UUFDbEQsSUFBSSxLQUFLLEdBQUcsSUFBQSwyQkFBZ0IsRUFBQyxNQUFNLElBQUEsNEJBQWlCLEdBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUEsZ0NBQXNCLEVBQUM7WUFDbkIsUUFBUSxFQUFFLGlCQUFpQixVQUFVLENBQUMsRUFBRSxJQUFJLFNBQVMsY0FBYyxJQUFBLDRCQUFXLEVBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckYsSUFBSSxFQUNBLCtFQUErRTtrQkFDN0UsbUVBQW1FLEtBQUssRUFBRTtrQkFDMUUsY0FBYyxJQUFBLDZCQUFZLEVBQUMsR0FBRyxDQUFDLElBQUk7a0JBQ25DLEtBQUssa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUU7U0FDOUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztBQUNMLENBQUM7QUF6QkQsOENBeUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsga2V5RmluZ2VycHJpbnQsIGtleU5pY2VOYW1lLCBzdW1tYXJpemVLZXkgfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXNcIjtcbmltcG9ydCB7IHJldm9rZVJlcG9QYXRoLCByZXZva2VSZXBvVVJMIH0gZnJvbSBcIi4uL3Jldm9rZVNvdXJjZVwiO1xuaW1wb3J0IHsgc291cmNlUmVwb1BhdGggfSBmcm9tIFwiLi4vc291cmNlc1wiO1xuaW1wb3J0IHsgcnVuR2l0IH0gZnJvbSBcIi4vZ2l0XCI7XG5pbXBvcnQgeyBlbnN1cmVSZXZva2VLZXksIGxpc3RSZXBvRGlyLCByZWFkUmVwb0ZpbGUsIHJldm9rZVJlcG8sIHNvdXJjZVJlcG8sIHN5bmNSZXBvRmlsZXMgfSBmcm9tIFwiLi9yZXBvRmlsZXNcIjtcbmltcG9ydCB7IG1lc3NhZ2VUaW1lc3RhbXAgfSBmcm9tIFwiLi4vLi4vbm90aWZpY2F0aW9ucy9kaXNjb3JkXCI7XG5pbXBvcnQgeyBhZGRDaGFuZ2VSZWFzb24sIGFkZExlYWRpbmdDaGFuZ2VSZWFzb24gfSBmcm9tIFwiLi9jaGFuZ2VzXCI7XG5pbXBvcnQgeyBkZXNjcmliZUFsbEVuZGVkLCBlbmRBbGxTU0hTZXNzaW9ucyB9IGZyb20gXCIuL3Nlc3Npb25zXCI7XG5pbXBvcnQgeyBnZXRTdGF0ZSwgc2F2ZVN0YXRlIH0gZnJvbSBcIi4vc3RhdGVcIjtcblxuLy8gQSByZXZvY2F0aW9uIHNheXM6IHRoaXMga2V5LCB1c2VkIGZyb20gdGhpcyBhZGRyZXNzLCBpcyBubyBsb25nZXIgYWNjZXB0ZWQuIEFuIHVucmV2b2tlIHNheXMgdGhlXG4vLyBvcHBvc2l0ZSBhYm91dCBvbmUgcGFpcjogdGhpcyBrZXkgaXMgYWxsb3dlZCBmcm9tIHRoaXMgYWRkcmVzcy4gVGhleSBjYW5jZWwgb3V0IHdoZW4gYm90aCBoYWx2ZXNcbi8vIG1hdGNoLCB3aGljaCBpcyB3aHkgYSByZXZvY2F0aW9uIGlzIG9uZSBldmVudCB3aXRoIGFuIGlkIG9mIGl0cyBvd24sIGFuZCBuZXZlciBhIG5hbWUgZGVyaXZlZFxuLy8gZnJvbSB0aGUga2V5IC0gZm9yZ2l2aW5nIGEga2V5IGZvciBvbmUgYWRkcmVzcyBtdXN0IG5vdCBtYWtlIGl0IHVucmV2b2thYmxlIGV2ZXJ5d2hlcmUuXG5jb25zdCBSRVZPQ0FUSU9OU19ESVIgPSBcInJldm9jYXRpb25zXCI7XG5jb25zdCBVTlJFVk9LRVNfRElSID0gXCJ1bnJldm9rZWRcIjtcbmNvbnN0IFJFVk9DQVRJT05fUkVBU09OID0gXCJhdXRoZW50aWNhdGVkIGFjY2VzcyBmcm9tIGFuIHVuYXBwcm92ZWQgSVBcIjtcblxuZXhwb3J0IHR5cGUgQXR0ZW1wdCA9IHtcbiAgICBpcDogc3RyaW5nO1xuICAgIHVzZXI6IHN0cmluZztcbiAgICBwb3J0OiBzdHJpbmc7XG4gICAgcmVxdWlyZWQ6IHN0cmluZztcbiAgICBsaW5lOiBzdHJpbmc7XG59O1xuXG4vKiogV2hhdCBhbiB1bnJldm9rZSBoYXMgdG8gbmFtZSB0byB1bmRvIGEgcmV2b2NhdGlvbiwgYW5kIHdoYXQgc3RvcHMgYSBzZWNvbmQgcmV2b2NhdGlvbiBvZiB0aGVcbiAgICBzYW1lIGtleSBmcm9tIHRoZSBzYW1lIGFkZHJlc3MuICovXG5leHBvcnQgZnVuY3Rpb24gcGFpcktleShjb25maWc6IHsgZmluZ2VycHJpbnQ6IHN0cmluZzsgaXA6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIGAke2NvbmZpZy5maW5nZXJwcmludH0gJHtjb25maWcuaXB9YDtcbn1cblxuLyoqIFVuaXF1ZSB0byB0aGUgZXZlbnQuIFRoZSB0aW1lIGlzIHRoZXJlIHRvIHJlYWQsIHRoZSByYW5kb20gaGFsZiBpcyB0aGVyZSB0byBiZSB1bmlxdWUuICovXG5leHBvcnQgZnVuY3Rpb24gbmV3UmV2b2NhdGlvbklkKGZpbmdlcnByaW50OiBzdHJpbmcpIHtcbiAgICBsZXQgc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCBcIi1cIik7XG4gICAgcmV0dXJuIGAke3N0YW1wfS0ke3JhbmRvbUJ5dGVzKDgpLnRvU3RyaW5nKFwiaGV4XCIpfS0ke2ZpbmdlcnByaW50LnJlcGxhY2UoL15TSEEyNTY6LywgXCJcIikuc2xpY2UoMCwgOCkucmVwbGFjZSgvW15BLVphLXowLTldKy9nLCBcIlwiKX1gO1xufVxuXG4vKiogV2h5IGEga2V5IHN0b3BwZWQgYmVpbmcgYWNjZXB0ZWQsIGluIHRoZSB3b3JkcyBvZiB3aGljaGV2ZXIgbWFjaGluZSBzYXcgaXQgaGFwcGVuLiAqL1xuZnVuY3Rpb24gZGVzY3JpYmVSZXZvY2F0aW9uKHJldm9jYXRpb246IHsgcmV2b2tlZEF0OiBzdHJpbmc7IHJldm9rZWRCeTogc3RyaW5nOyByZWFzb246IHN0cmluZzsgaXA6IHN0cmluZyB9KSB7XG4gICAgbGV0IHdoZW4gPSBEYXRlLnBhcnNlKHJldm9jYXRpb24ucmV2b2tlZEF0KTtcbiAgICBsZXQgcGFydHMgPSBbXG4gICAgICAgIE51bWJlci5pc0Zpbml0ZSh3aGVuKSA/IGByZXZva2VkICR7bWVzc2FnZVRpbWVzdGFtcChuZXcgRGF0ZSh3aGVuKSl9YCA6IGByZXZva2VkIGF0IGFuIHVucmVjb3JkZWQgdGltZWAsXG4gICAgICAgIHJldm9jYXRpb24ucmV2b2tlZEJ5ICYmIGBieSBcXGAke3Jldm9jYXRpb24ucmV2b2tlZEJ5fVxcYGAgfHwgXCJcIixcbiAgICAgICAgcmV2b2NhdGlvbi5yZWFzb24gfHwgXCJcIixcbiAgICAgICAgcmV2b2NhdGlvbi5pcCAmJiBgZnJvbSBcXGAke3Jldm9jYXRpb24uaXB9XFxgYCB8fCBcIlwiLFxuICAgIF07XG4gICAgcmV0dXJuIHBhcnRzLmZpbHRlcihwYXJ0ID0+IHBhcnQpLmpvaW4oXCIsIFwiKTtcbn1cblxuZXhwb3J0IHR5cGUgUmV2b2NhdGlvbkZpbGUgPSB7XG4gICAgcmV2b2NhdGlvbklkOiBzdHJpbmc7XG4gICAgZmluZ2VycHJpbnQ6IHN0cmluZztcbiAgICBpcDogc3RyaW5nO1xuICAgIHJldm9rZWRBdDogc3RyaW5nO1xuICAgIHJldm9rZWRCeTogc3RyaW5nO1xuICAgIHJlYXNvbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXZvY2F0aW9uRmlsZXMoc291cmNlVVJMOiBzdHJpbmcpOiBQcm9taXNlPFJldm9jYXRpb25GaWxlW10+IHtcbiAgICBsZXQgcmVwbyA9IHJldm9rZVJlcG8oc291cmNlVVJMKTtcbiAgICBsZXQgcmV2b2NhdGlvbnM6IFJldm9jYXRpb25GaWxlW10gPSBbXTtcbiAgICBmb3IgKGxldCBuYW1lIG9mIGF3YWl0IGxpc3RSZXBvRGlyKHJlcG8sIFJFVk9DQVRJT05TX0RJUikpIHtcbiAgICAgICAgaWYgKCFuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkID0gSlNPTi5wYXJzZShhd2FpdCByZWFkUmVwb0ZpbGUocmVwbywgcGF0aC5qb2luKFJFVk9DQVRJT05TX0RJUiwgbmFtZSkpIHx8IFwiXCIpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZC5maW5nZXJwcmludCkge1xuICAgICAgICAgICAgICAgIHJldm9jYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICByZXZvY2F0aW9uSWQ6IHBhcnNlZC5yZXZvY2F0aW9uSWQgfHwgbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludDogcGFyc2VkLmZpbmdlcnByaW50LFxuICAgICAgICAgICAgICAgICAgICBpcDogcGFyc2VkLmlwIHx8IHBhcnNlZC5hdHRlbXB0Py5pcCB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICByZXZva2VkQXQ6IHBhcnNlZC5yZXZva2VkQXQgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgcmV2b2tlZEJ5OiBwYXJzZWQucmV2b2tlZEJ5IHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcGFyc2VkLnJlYXNvbiB8fCBcIlwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgdW5yZWFkYWJsZSByZXZvY2F0aW9uICR7bmFtZX0uICR7ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV2b2NhdGlvbnM7XG59XG5cbi8qKiBXaGljaCBrZXkgaXMgYWxsb3dlZCBmcm9tIHdoaWNoIGFkZHJlc3MuIFVucmV2b2tlcyBsaXZlIGluIHRoZSBzb3VyY2UgcmVwbywgc28gdGhleSBhcmUgY292ZXJlZFxuICAgIGJ5IGl0cyBzaWduYXR1cmUsIGFuZCBub3RoaW5nIGlzIHJlYWQgb3V0IG9mIHRoZW0gYnV0IHRoZSBwYWlycyB0aGV5IGFsbG93IGFuZCwgZm9yIGZpbGVzXG4gICAgd3JpdHRlbiBiZWZvcmUgcGFpcnMgZXhpc3RlZCwgdGhlIHJldm9jYXRpb24gaWRzIHRoZXkgbmFtZS4gKi9cbmV4cG9ydCB0eXBlIFVucmV2b2tlcyA9IHtcbiAgICAvLyBmaW5nZXJwcmludCBhbmQgaXAsIHRvIGV2ZXJ5IHVucmV2b2tlIHRoYXQgYWxsb3dzIHRoZW0uIEV2ZXJ5IG9uZSByYXRoZXIgdGhhbiB0aGUgbGFzdCxcbiAgICAvLyBiZWNhdXNlIHRoZSBzYW1lIHBhaXIgaXMgb2Z0ZW4gbmFtZWQgYWdhaW4gYnkgYSBsYXRlciB1bnJldm9rZSBhbmQgdGhlcmUgaXMgbm8gcmVhc29uIHRvXG4gICAgLy8gcHJlZmVyIG9uZSBvdmVyIGFub3RoZXIuXG4gICAgcGFpcnM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgICAvLyBSZXZvY2F0aW9uIGlkIHRvIHRoZSB1bnJldm9rZXMgbmFtaW5nIGl0LiBPbmx5IGZvciB1bnJldm9rZXMgd3JpdHRlbiBiZWZvcmUgdGhpcyB3YXMgYWJvdXRcbiAgICAvLyBwYWlycyBhdCBhbGwsIHNvIGEgbWFjaGluZSByZWFkaW5nIG9uZSBhbHJlYWR5IGluIGEgcmVwbyBzdGlsbCBob25vdXJzIGl0LlxuICAgIGxlZ2FjeUlkczogTWFwPHN0cmluZywgc3RyaW5nW10+O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRVbnJldm9rZXMoc291cmNlVVJMOiBzdHJpbmcpOiBQcm9taXNlPFVucmV2b2tlcz4ge1xuICAgIGxldCByZXBvID0gc291cmNlUmVwbyhzb3VyY2VVUkwpO1xuICAgIGxldCBwYWlycyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgICBsZXQgbGVnYWN5SWRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgIGxldCBhZGQgPSAoaW50bzogTWFwPHN0cmluZywgc3RyaW5nW10+LCBrZXk6IHN0cmluZywgdW5yZXZva2VJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGludG8uc2V0KGtleSwgWy4uLihpbnRvLmdldChrZXkpIHx8IFtdKSwgdW5yZXZva2VJZF0pO1xuICAgIH07XG4gICAgZm9yIChsZXQgbmFtZSBvZiBhd2FpdCBsaXN0UmVwb0RpcihyZXBvLCBVTlJFVk9LRVNfRElSKSkge1xuICAgICAgICBpZiAoIW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVucmV2b2tlSWQgPSBuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkID0gSlNPTi5wYXJzZShhd2FpdCByZWFkUmVwb0ZpbGUocmVwbywgcGF0aC5qb2luKFVOUkVWT0tFU19ESVIsIG5hbWUpKSB8fCBcIlwiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGFsbG93ZWQgb2YgcGFyc2VkLmFsbG93ZWQgfHwgW10pIHtcbiAgICAgICAgICAgICAgICAvLyBFaXRoZXIga2luZCBvZiBpZGVudGl0eTogYW4gc3NoIGtleSBuYW1lcyBhIGZpbmdlcnByaW50LCBhIG1hY2hpbmUgYSBtYWNoaW5lSWQuXG4gICAgICAgICAgICAgICAgbGV0IGlkZW50aXR5ID0gYWxsb3dlZC5maW5nZXJwcmludCB8fCBhbGxvd2VkLm1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkgJiYgYWxsb3dlZC5pcCkge1xuICAgICAgICAgICAgICAgICAgICBhZGQocGFpcnMsIHBhaXJLZXkoeyBmaW5nZXJwcmludDogaWRlbnRpdHksIGlwOiBhbGxvd2VkLmlwIH0pLCB1bnJldm9rZUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCByZXZvY2F0aW9uSWQgb2YgcGFyc2VkLnJldm9jYXRpb25JZHMgfHwgW10pIHtcbiAgICAgICAgICAgICAgICBhZGQobGVnYWN5SWRzLCByZXZvY2F0aW9uSWQsIHVucmV2b2tlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgdW5yZWFkYWJsZSB1bnJldm9rZSAke25hbWV9LiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcGFpcnMsIGxlZ2FjeUlkcyB9O1xufVxuXG4vKiogRXZlcnkgdW5yZXZva2UgY292ZXJpbmcgb25lIHJldm9jYXRpb246IGJ5IHRoZSBwYWlyIGl0IGlzIGFib3V0LCBhbmQgYnkgaXRzIGlkIGZvciB0aGUgZmlsZXNcbiAgICB3cml0dGVuIGJlZm9yZSBwYWlycyBleGlzdGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmV2b2tlc0Zvcih1bnJldm9rZXM6IFVucmV2b2tlcywgcmV2b2NhdGlvbjogeyByZXZvY2F0aW9uSWQ6IHN0cmluZzsgZmluZ2VycHJpbnQ6IHN0cmluZzsgaXA6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4udW5yZXZva2VzLnBhaXJzLmdldChwYWlyS2V5KHJldm9jYXRpb24pKSB8fCBbXSxcbiAgICAgICAgLi4udW5yZXZva2VzLmxlZ2FjeUlkcy5nZXQocmV2b2NhdGlvbi5yZXZvY2F0aW9uSWQpIHx8IFtdLFxuICAgIF07XG59XG5cbi8qKiBXcml0ZXMgYSByZXZvY2F0aW9uLCB1bmxlc3MgdGhpcyBrZXkgaXMgYWxyZWFkeSByZXZva2VkIGZvciB0aGlzIGFkZHJlc3MuIENoZWNrZWQgdHdpY2U6XG4gICAgYWdhaW5zdCB3aGF0IHRoaXMgbWFjaGluZSBhbHJlYWR5IGtub3dzLCB3aGljaCBuZWVkcyBubyBuZXR3b3JrLCBhbmQgYWdhaW4gYWdhaW5zdCB0aGUgcmVwb1xuICAgIGFmdGVyIHB1bGxpbmcgaXQsIHNvIGEgZmxvb2Qgb2YgdW5rbm93biBrZXlzIGNhbm5vdCB0dXJuIGludG8gYSBmbG9vZCBvZiBjb21taXRzLlxuXG4gICAgRGVkdXBsaWNhdGlvbiBpcyBvbiB0aGUgcGFpci4gVGhlIHNhbWUga2V5IGZyb20gYSBzZWNvbmQgYWRkcmVzcyBpcyBhIHNlY29uZCBldmVudCBhbmQgZ2V0cyBpdHNcbiAgICBvd24gcmV2b2NhdGlvbiwgYmVjYXVzZSBhbiB1bnJldm9rZSBvbmx5IGV2ZXIgZm9yZ2l2ZXMgdGhlIHBhaXIgaXQgbmFtZXMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3JkUmV2b2NhdGlvbihjb25maWc6IHtcbiAgICBzb3VyY2VVUkw6IHN0cmluZztcbiAgICBmaW5nZXJwcmludDogc3RyaW5nO1xuICAgIGtleUxpbmU6IHN0cmluZztcbiAgICBhdHRlbXB0OiBBdHRlbXB0O1xuICAgIGhvc3RMYWJlbDogc3RyaW5nO1xufSkge1xuICAgIGxldCB7IHNvdXJjZVVSTCwgZmluZ2VycHJpbnQsIGtleUxpbmUsIGF0dGVtcHQsIGhvc3RMYWJlbCB9ID0gY29uZmlnO1xuICAgIGxldCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgbGV0IHBhaXIgPSBwYWlyS2V5KHsgZmluZ2VycHJpbnQsIGlwOiBhdHRlbXB0LmlwIH0pO1xuICAgIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLnJldm9jYXRpb25zKS5zb21lKGVudHJ5ID0+IHBhaXJLZXkoZW50cnkpID09PSBwYWlyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN5bmNSZXBvRmlsZXMocmV2b2tlUmVwbyhzb3VyY2VVUkwpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCByZWNvcmQgdGhlIHJldm9jYXRpb24gb2YgJHtmaW5nZXJwcmludH0sICR7cmV2b2tlUmVwb1VSTChzb3VyY2VVUkwpfSBjb3VsZCBub3QgYmUgcmVhZC4gJHtlfWApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCByZXZvY2F0aW9uSWQgPSBuZXdSZXZvY2F0aW9uSWQoZmluZ2VycHJpbnQpO1xuICAgIGxldCBleGlzdGluZyA9IChhd2FpdCByZWFkUmV2b2NhdGlvbkZpbGVzKHNvdXJjZVVSTCkpLmZpbmQoZW50cnkgPT4gcGFpcktleShlbnRyeSkgPT09IHBhaXIpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAvLyBBbm90aGVyIG1hY2hpbmUgZ290IHRoZXJlIGZpcnN0LCB3aGljaCBpcyB0aGUgbm9ybWFsIG91dGNvbWUgd2hlbiBzZXZlcmFsIHNlZSB0aGUgc2FtZVxuICAgICAgICAvLyBhdHRlbXB0LiBSZWNvcmQgaXQgbG9jYWxseSBzbyB3ZSBuZXZlciBsb29rIGFnYWluLlxuICAgICAgICBzdGF0ZS5yZXZvY2F0aW9uc1tleGlzdGluZy5yZXZvY2F0aW9uSWRdID0ge1xuICAgICAgICAgICAgcmV2b2NhdGlvbklkOiBleGlzdGluZy5yZXZvY2F0aW9uSWQsXG4gICAgICAgICAgICBmaW5nZXJwcmludDogZXhpc3RpbmcuZmluZ2VycHJpbnQsIGlwOiBleGlzdGluZy5pcCxcbiAgICAgICAgICAgIHJldm9rZWRBdDogZXhpc3RpbmcucmV2b2tlZEF0LCByZXZva2VkQnk6IGV4aXN0aW5nLnJldm9rZWRCeSxcbiAgICAgICAgICAgIHJlYXNvbjogZXhpc3RpbmcucmVhc29uLFxuICAgICAgICAgICAgdW5yZXZva2VJZDogXCJcIiwgdW5yZXZva2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHJlcG9ydGVkUmVtb3ZlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHNhdmVTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IHJlcG9QYXRoID0gcmV2b2tlUmVwb1BhdGgoc291cmNlVVJMKTtcbiAgICBsZXQga2V5UGF0aCA9IGF3YWl0IGVuc3VyZVJldm9rZUtleShzb3VyY2VVUkwpO1xuICAgIGxldCBkaXJlY3RvcnkgPSBwYXRoLmpvaW4ocmVwb1BhdGgsIFJFVk9DQVRJT05TX0RJUik7XG4gICAgYXdhaXQgZnMubWtkaXIoZGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBsZXQgcmV2b2tlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4oZGlyZWN0b3J5LCBgJHtyZXZvY2F0aW9uSWR9Lmpzb25gKSwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICByZXZvY2F0aW9uSWQsXG4gICAgICAgIGZpbmdlcnByaW50LFxuICAgICAgICAvLyBUaGUgdHdvIGhhbHZlcyBvZiB3aGF0IGhhcHBlbmVkLiBBbiB1bnJldm9rZSBuYW1pbmcgYm90aCBpcyB3aGF0IHVuZG9lcyB0aGlzLlxuICAgICAgICBpcDogYXR0ZW1wdC5pcCxcbiAgICAgICAga2V5OiBrZXlMaW5lLFxuICAgICAgICByZXZva2VkQXQsXG4gICAgICAgIHJldm9rZWRCeTogaG9zdExhYmVsLFxuICAgICAgICByZWFzb246IFJFVk9DQVRJT05fUkVBU09OLFxuICAgICAgICBhdHRlbXB0LFxuICAgIH0sIHVuZGVmaW5lZCwgNCkgKyBcIlxcblwiKTtcblxuICAgIGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcImFkZFwiLCBcIi1BXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoIH0pO1xuICAgIGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcIi1jXCIsIFwidXNlci5lbWFpbD1wb3J0c2VjdXJlQGxvY2FsaG9zdFwiLCBcIi1jXCIsIFwidXNlci5uYW1lPXBvcnRzZWN1cmVcIiwgXCJjb21taXRcIiwgXCItbVwiLCBgcmV2b2tlICR7cmV2b2NhdGlvbklkfWBdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoIH0pO1xuICAgIGxldCBwdXNoID0gYXdhaXQgcnVuR2l0KHsgYXJnczogW1wicHVzaFwiLCBcIm9yaWdpblwiLCBcIkhFQURcIl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGgsIGFsbG93RmFpbHVyZTogdHJ1ZSB9KTtcbiAgICBpZiAocHVzaC5zdGF0dXMgIT09IDApIHtcbiAgICAgICAgLy8gTW9zdCBsaWtlbHkgYW5vdGhlciBtYWNoaW5lIHB1c2hlZCB0aGUgc2FtZSByZXZvY2F0aW9uIGZpcnN0LiBUaGUgbmV4dCBjaGVjayB3aWxsIHB1bGxcbiAgICAgICAgLy8gaXQgYW5kIHJlY29yZCBpdCwgc28gdGhlcmUgaXMgbm90aGluZyB0byByZXRyeSBoZXJlLlxuICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IHB1c2ggdGhlIHJldm9jYXRpb24gb2YgJHtmaW5nZXJwcmludH0sIHdpbGwgcGljayBpdCB1cCBvbiB0aGUgbmV4dCBjaGVjay4gJHsocHVzaC5zdGRvdXQgKyBwdXNoLnN0ZGVycikudHJpbSgpfWApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHN0YXRlLnJldm9jYXRpb25zW3Jldm9jYXRpb25JZF0gPSB7XG4gICAgICAgIHJldm9jYXRpb25JZCwgZmluZ2VycHJpbnQsIGlwOiBhdHRlbXB0LmlwLFxuICAgICAgICByZXZva2VkQXQsIHJldm9rZWRCeTogaG9zdExhYmVsLCByZWFzb246IFJFVk9DQVRJT05fUkVBU09OLFxuICAgICAgICB1bnJldm9rZUlkOiBcIlwiLCB1bnJldm9rZWQ6IGZhbHNlLFxuICAgICAgICAvLyBUaGUgbWVzc2FnZSBiZWxvdyBhbHJlYWR5IHNheXMgdGhpcyBtYWNoaW5lIGhhcyBzdG9wcGVkIGFjY2VwdGluZyB0aGUga2V5LCBzbyB0aGUgb25lXG4gICAgICAgIC8vIGFib3V0IG5vdGljaW5nIGEgcmV2b2NhdGlvbiB3b3VsZCBvbmx5IHJlcGVhdCBpdC5cbiAgICAgICAgcmVwb3J0ZWRSZW1vdmVkOiB0cnVlLFxuICAgIH07XG4gICAgYXdhaXQgc2F2ZVN0YXRlKCk7XG4gICAgbGV0IGVuZGVkID0gZGVzY3JpYmVBbGxFbmRlZChhd2FpdCBlbmRBbGxTU0hTZXNzaW9ucygpKTtcbiAgICAvLyBTYWlkIHdoZW4gdGhlIGZpbGUgaXMgd3JpdHRlbiwgbm90IGhlcmUsIHNvIG9uZSBldmVudCBwcm9kdWNlcyBvbmUgbWVzc2FnZS5cbiAgICBhZGRMZWFkaW5nQ2hhbmdlUmVhc29uKHtcbiAgICAgICAgaGVhZGxpbmU6IGBTVVNQSUNJT1VTIElQICR7YXR0ZW1wdC5pcH0gRlJPWkUgS0VZICR7a2V5TGluZSAmJiBrZXlOaWNlTmFtZShrZXlMaW5lKSB8fCBmaW5nZXJwcmludH1gLFxuICAgICAgICBib2R5OlxuICAgICAgICAgICAgYFNvbWVvbmUgbG9nZ2VkIGluIGZyb20gJHthdHRlbXB0LmlwfSB1c2luZyBhIGtleSB0aGF0IGlzIG5vdCBhbGxvd2VkIGZyb20gdGhlcmUuIFRoZWBcbiAgICAgICAgICAgICsgYCBrZXkgaXRzZWxmIHdhcyBjb3JyZWN0LCBzbyBlaXRoZXIgc29tZW9uZSBlbHNlIGhhcyBhIGNvcHkgb2YgaXQsIG9yIG9uZSBvZiB5b3VyIG93bmBcbiAgICAgICAgICAgICsgYCBhZGRyZXNzZXMgY2hhbmdlZC5gXG4gICAgICAgICAgICArIGBcXG5cXG5UaGUga2V5IGlzIGZyb3plbiBvbiBldmVyeSBtYWNoaW5lIG5vdywgYW5kIHdvcmtzIG5vd2hlcmUuJHtlbmRlZH1gXG4gICAgICAgICAgICArIGBcXG5cXG5JZiB0aGlzIHdhcyBhbiBhdHRhY2ssIHJlbW92ZSB0aGF0IGtleSBmcm9tIFxcYCR7c291cmNlVVJMfVxcYCBub3cuYFxuICAgICAgICAgICAgKyBgXFxuSWYgaXQgd2FzIHlvdSwgcnVuOmBcbiAgICAgICAgICAgICsgYFxcblxcYFxcYFxcYFxcbmNkICR7c291cmNlUmVwb1BhdGgoc291cmNlVVJMKX1cXG55YXJuIHVucmV2b2tlIGdpdFxcblxcYFxcYFxcYGBcbiAgICAgICAgICAgICsgYFxcbkl0IGFsbG93cyAke2F0dGVtcHQuaXB9IG9uIHRoYXQga2V5LCBhbmQgdGFrZXMgYW4gaG91ciB0byByZWFjaCBldmVyeSBtYWNoaW5lLmBcbiAgICAgICAgICAgICsgYFxcblxcbmtleTogXFxgJHtrZXlMaW5lICYmIHN1bW1hcml6ZUtleShrZXlMaW5lKSB8fCBmaW5nZXJwcmludH1cXGBgXG4gICAgICAgICAgICArIGBcXG50cmllZCB0byBsb2cgaW4gYXM6IFxcYCR7YXR0ZW1wdC51c2VyfVxcYGBcbiAgICAgICAgICAgICsgYFxcbmFsbG93ZWQgb25seSBmcm9tOiBcXGAke2F0dGVtcHQucmVxdWlyZWR9XFxgYCxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIFRha2VzIGV2ZXJ5dGhpbmcgdGhlIHJldm9rZSByZXBvcyBsaXN0IGludG8gbG9jYWwgc3RhdGUuIE9uY2UgaGVyZSBhIHJldm9jYXRpb24gbmV2ZXIgbGVhdmVzLFxuICAgIGV2ZW4gaWYgdGhlIGZpbGUgaXMgZGVsZXRlZDogdGhlIGtleSB0aGF0IHdyaXRlcyByZXZvY2F0aW9ucyBpcyBvbiBldmVyeSBzZXJ2ZXIsIHNvIGFuIGF0dGFja2VyXG4gICAgaG9sZGluZyBpdCBjb3VsZCBvdGhlcndpc2UgZXJhc2UgdGhlIHJlY29yZCB0aGF0IGxvY2tlZCB0aGVtIG91dC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhYnNvcmJSZXZvY2F0aW9ucyhzb3VyY2VVUkxzOiBzdHJpbmdbXSkge1xuICAgIGxldCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBzb3VyY2VVUkwgb2Ygc291cmNlVVJMcykge1xuICAgICAgICBsZXQgZW50cmllcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVudHJpZXMgPSBhd2FpdCByZWFkUmV2b2NhdGlvbkZpbGVzKHNvdXJjZVVSTCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIFVucmVhZGFibGUgaXMgbm90IGVtcHR5LiBXaGF0ZXZlciB3ZSBhbHJlYWR5IGtuZXcgc3RheXMgZXhhY3RseSBhcyBpdCBpcy5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFNraXBwaW5nIHRoZSByZXZvY2F0aW9ucyBvZiAke3Jldm9rZVJlcG9VUkwoc291cmNlVVJMKX0sIHRoZXkgY291bGQgbm90IGJlIHJlYWQuICR7ZX1gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXZvY2F0aW9uc1tlbnRyeS5yZXZvY2F0aW9uSWRdKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5yZXZvY2F0aW9uc1tlbnRyeS5yZXZvY2F0aW9uSWRdID0ge1xuICAgICAgICAgICAgICAgIHJldm9jYXRpb25JZDogZW50cnkucmV2b2NhdGlvbklkLFxuICAgICAgICAgICAgICAgIGZpbmdlcnByaW50OiBlbnRyeS5maW5nZXJwcmludCxcbiAgICAgICAgICAgICAgICBpcDogZW50cnkuaXAsXG4gICAgICAgICAgICAgICAgcmV2b2tlZEF0OiBlbnRyeS5yZXZva2VkQXQsXG4gICAgICAgICAgICAgICAgcmV2b2tlZEJ5OiBlbnRyeS5yZXZva2VkQnksXG4gICAgICAgICAgICAgICAgcmVhc29uOiBlbnRyeS5yZWFzb24sXG4gICAgICAgICAgICAgICAgdW5yZXZva2VJZDogXCJcIixcbiAgICAgICAgICAgICAgICB1bnJldm9rZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlcG9ydGVkUmVtb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgYXdhaXQgc2F2ZVN0YXRlKCk7XG4gICAgfVxufVxuXG4vKiogQW4gdW5yZXZva2UgY291bnRzIHRoZSBtb21lbnQgaXQgaXMgc2Vlbi5cblxuICAgIFRoZXJlIHVzZWQgdG8gYmUgYW4gaG91cidzIHdhaXQgYmVmb3JlIGhvbm91cmluZyBvbmUsIGFnYWluc3QgYSBzaWduaW5nIGtleSB0aGF0IGhhZCBpdHNlbGZcbiAgICBiZWVuIHN0b2xlbi4gSXQgd2FzIG5ldmVyIHdvcnRoIGl0OiBhbiB1bnJldm9rZSBoYXMgdG8gYmUgc2lnbmVkLCBzbyB3cml0aW5nIG9uZSBhbHJlYWR5IHRha2VzXG4gICAgdGhlIGhhcmR3YXJlIGtleSwgYW5kIGFueW9uZSBob2xkaW5nIHRoYXQgY2FuIHNpZ24gYSBuZXcgYXV0aG9yaXplZF9rZXlzIG5hbWluZyB3aGF0ZXZlciB0aGV5XG4gICAgbGlrZSAtIHRoZXkgaGF2ZSBubyByZWFzb24gdG8gZ28gbmVhciBhbiB1bnJldm9rZS4gTWVhbndoaWxlIHRoZSB3YWl0IGNvc3QgcmVhbCBhY2Nlc3MsIGFuZCBhXG4gICAgbWFjaGluZSBkZXBsb3llZCBhZnRlciBhbiBpbmNpZGVudCB3b3VsZCBmcmVlemUga2V5cyBpdCBoYWQgbmV2ZXIgaGFkIGEgcHJvYmxlbSB3aXRoLCBmb3IgYW5cbiAgICBob3VyLCBiZWNhdXNlIGl0IHdhcyBzZWVpbmcgdGhlIHVucmV2b2tlIGZvciB0aGUgZmlyc3QgdGltZS5cblxuICAgIFdoYXQgc3RpbGwgcHJvdGVjdHMgYSBzdG9sZW4gc2lnbmluZyBrZXkgaXMgdGhlIDI0IGhvdXJzIGJlZm9yZSBhIE5FVyBzaWduZXIgaXMgYWNjZXB0ZWQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlVbnJldm9rZXMoc291cmNlVVJMczogc3RyaW5nW10pIHtcbiAgICBsZXQgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgIGxldCB1bnJldm9rZXM6IFVucmV2b2tlcyA9IHsgcGFpcnM6IG5ldyBNYXAoKSwgbGVnYWN5SWRzOiBuZXcgTWFwKCkgfTtcbiAgICBmb3IgKGxldCBzb3VyY2VVUkwgb2Ygc291cmNlVVJMcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHNvdXJjZSA9IGF3YWl0IHJlYWRVbnJldm9rZXMoc291cmNlVVJMKTtcbiAgICAgICAgICAgIGZvciAobGV0IFtwYWlyLCBpZHNdIG9mIHNvdXJjZS5wYWlycykge1xuICAgICAgICAgICAgICAgIHVucmV2b2tlcy5wYWlycy5zZXQocGFpciwgWy4uLih1bnJldm9rZXMucGFpcnMuZ2V0KHBhaXIpIHx8IFtdKSwgLi4uaWRzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBbcmV2b2NhdGlvbklkLCBpZHNdIG9mIHNvdXJjZS5sZWdhY3lJZHMpIHtcbiAgICAgICAgICAgICAgICB1bnJldm9rZXMubGVnYWN5SWRzLnNldChyZXZvY2F0aW9uSWQsIFsuLi4odW5yZXZva2VzLmxlZ2FjeUlkcy5nZXQocmV2b2NhdGlvbklkKSB8fCBbXSksIC4uLmlkc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBVbnJlYWRhYmxlIGlzIG5vdCBcInRoZXJlIGFyZSBubyB1bnJldm9rZXNcIi4gVGhlIHJldm9jYXRpb25zIHNpbXBseSBzdGFuZC5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFNraXBwaW5nIHRoZSB1bnJldm9rZXMgb2YgJHtzb3VyY2VVUkx9LCB0aGV5IGNvdWxkIG5vdCBiZSByZWFkLiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgcmV2b2NhdGlvbiBvZiBPYmplY3QudmFsdWVzKHN0YXRlLnJldm9jYXRpb25zKSkge1xuICAgICAgICBpZiAocmV2b2NhdGlvbi51bnJldm9rZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3ZlcmluZyA9IHVucmV2b2tlc0Zvcih1bnJldm9rZXMsIHJldm9jYXRpb24pO1xuICAgICAgICBpZiAoIWNvdmVyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVucmV2b2tlSWQgPSBjb3ZlcmluZ1swXTtcbiAgICAgICAgcmV2b2NhdGlvbi51bnJldm9rZUlkID0gdW5yZXZva2VJZDtcbiAgICAgICAgcmV2b2NhdGlvbi51bnJldm9rZWQgPSB0cnVlO1xuICAgICAgICByZXZvY2F0aW9uLnJlcG9ydGVkUmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICBhd2FpdCBzYXZlU3RhdGUoKTtcbiAgICAgICAgLy8gT25seSBtZWFucyBhbnl0aGluZyBpZiB0aGUga2V5IGNvbWVzIGJhY2sgaW50byB0aGUgZmlsZSwgc28gaXQgaXMgc2FpZCB0aGVyZS5cbiAgICAgICAgYWRkQ2hhbmdlUmVhc29uKFxuICAgICAgICAgICAgYFVuZnJvemUgYSBrZXkgZm9yIFxcYCR7cmV2b2NhdGlvbi5pcH1cXGAuIEl0IHdhcyBmcm96ZW4gZm9yIGJlaW5nIHVzZWQgZnJvbSB0aGVyZSwgYW5kYFxuICAgICAgICAgICAgKyBgICR7dW5yZXZva2VJZH0gc2F5cyB0aGF0IGFkZHJlc3MgaXMgYWxsb3dlZCBhZnRlciBhbGwuYFxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIFJlcG9ydHMgZWFjaCByZXZvY2F0aW9uIHRoZSBmaXJzdCB0aW1lIGl0IGFjdHVhbGx5IHRha2VzIGEga2V5IG91dCBvZiB0aGlzIG1hY2hpbmUncyBmaWxlLiBUaGVcbiAgICBkcm9wcGluZyBpdHNlbGYgaGFwcGVucyBpbiByZWFkU2lnbmVkUmVwbywgd2hpY2ggc3RyaXBzIHJldm9rZWQga2V5cyBiZWZvcmUgYW55dGhpbmcgcmVhZHMgdGhlbVxuICAgIC0gdGhpcyBvbmx5IHNheXMgc28sIGFuZCBraWxscyB3aGF0ZXZlciBzZXNzaW9ucyB0aGUga2V5IHdhcyBob2xkaW5nIG9wZW4uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwb3J0UmV2b2tlZEtleXMoKSB7XG4gICAgbGV0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBmb3IgKGxldCByZXZvY2F0aW9uIG9mIE9iamVjdC52YWx1ZXMoc3RhdGUucmV2b2NhdGlvbnMpKSB7XG4gICAgICAgIGlmIChyZXZvY2F0aW9uLnVucmV2b2tlZCB8fCByZXZvY2F0aW9uLnJlcG9ydGVkUmVtb3ZlZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV2b2NhdGlvbi5yZXBvcnRlZFJlbW92ZWQgPSB0cnVlO1xuICAgICAgICBhd2FpdCBzYXZlU3RhdGUoKTtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBpZiB0aGUga2V5IGlzIG5vdCBpbiB0aGUgZmlsZS4gSXQgbGVmdCBsb25nIGFnbywgYW5kIHRoaXMgaXMgYSBtYWNoaW5lIHRoYXRcbiAgICAgICAgLy8gcmVzdGFydGVkIGFuZCByZWFkIHRoZSByZXZvY2F0aW9uIGJhY2sgb3V0IG9mIHRoZSByZXBvLlxuICAgICAgICBsZXQga2V5ID0gc3RhdGUuYXBwbGllZEtleXMuZmluZChhcHBsaWVkID0+IGtleUZpbmdlcnByaW50KGFwcGxpZWQpID09PSByZXZvY2F0aW9uLmZpbmdlcnByaW50KTtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoYXRldmVyIHRoYXQga2V5IGlzIGhvbGRpbmcgb3BlbiBnb2VzIHdpdGggaXQuXG4gICAgICAgIGxldCBlbmRlZCA9IGRlc2NyaWJlQWxsRW5kZWQoYXdhaXQgZW5kQWxsU1NIU2Vzc2lvbnMoKSk7XG4gICAgICAgIGFkZExlYWRpbmdDaGFuZ2VSZWFzb24oe1xuICAgICAgICAgICAgaGVhZGxpbmU6IGBTVVNQSUNJT1VTIElQICR7cmV2b2NhdGlvbi5pcCB8fCBcInVua25vd25cIn0gRlJPWkUgS0VZICR7a2V5TmljZU5hbWUoa2V5KX1gLFxuICAgICAgICAgICAgYm9keTpcbiAgICAgICAgICAgICAgICBgQW5vdGhlciBtYWNoaW5lIHNhdyB0aGlzIGtleSB1c2VkIGZyb20gYW4gYWRkcmVzcyBpdCBpcyBub3QgYWxsb3dlZCBmcm9tLCBhbmRgXG4gICAgICAgICAgICAgICAgKyBgIGZyb3plIGl0IGV2ZXJ5d2hlcmUuIFRoaXMgbWFjaGluZSBoYXMgc3RvcHBlZCBhY2NlcHRpbmcgaXQgdG9vLiR7ZW5kZWR9YFxuICAgICAgICAgICAgICAgICsgYFxcblxcbmtleTogXFxgJHtzdW1tYXJpemVLZXkoa2V5KX1cXGBgXG4gICAgICAgICAgICAgICAgKyBgXFxuJHtkZXNjcmliZVJldm9jYXRpb24ocmV2b2NhdGlvbil9YCxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
323
|
+
/* _JS_SOURCE_HASH = "a4209df94bbfce0817a7b2ba2eb5c9c155514fcb8be4d09cde798255565361e5"; */
|
|
@@ -3,6 +3,7 @@ import path from "path";
|
|
|
3
3
|
import { randomBytes } from "crypto";
|
|
4
4
|
import { keyFingerprint, keyNiceName, summarizeKey } from "../authorizedKeys";
|
|
5
5
|
import { revokeRepoPath, revokeRepoURL } from "../revokeSource";
|
|
6
|
+
import { sourceRepoPath } from "../sources";
|
|
6
7
|
import { runGit } from "./git";
|
|
7
8
|
import { ensureRevokeKey, listRepoDir, readRepoFile, revokeRepo, sourceRepo, syncRepoFiles } from "./repoFiles";
|
|
8
9
|
import { messageTimestamp } from "../../notifications/discord";
|
|
@@ -225,8 +226,9 @@ export async function recordRevocation(config: {
|
|
|
225
226
|
+ ` addresses changed.`
|
|
226
227
|
+ `\n\nThe key is frozen on every machine now, and works nowhere.${ended}`
|
|
227
228
|
+ `\n\nIf this was an attack, remove that key from \`${sourceURL}\` now.`
|
|
228
|
-
+ `\nIf it was you, run
|
|
229
|
-
+
|
|
229
|
+
+ `\nIf it was you, run:`
|
|
230
|
+
+ `\n\`\`\`\ncd ${sourceRepoPath(sourceURL)}\nyarn unrevoke git\n\`\`\``
|
|
231
|
+
+ `\nIt allows ${attempt.ip} on that key, and takes an hour to reach every machine.`
|
|
230
232
|
+ `\n\nkey: \`${keyLine && summarizeKey(keyLine) || fingerprint}\``
|
|
231
233
|
+ `\ntried to log in as: \`${attempt.user}\``
|
|
232
234
|
+ `\nallowed only from: \`${attempt.required}\``,
|
|
@@ -179,7 +179,10 @@ async function main() {
|
|
|
179
179
|
await (0, signFiles_1.signRepo)({ repoPath });
|
|
180
180
|
if (!pushToGit) {
|
|
181
181
|
console.log(`\nCommit and push it, and those keys work again as each machine picks it up:`);
|
|
182
|
-
|
|
182
|
+
// The cd is part of the block on purpose. These commands only do the right thing inside
|
|
183
|
+
// the keys repo, and whoever reads this is almost never sitting in it - pasting the git
|
|
184
|
+
// lines alone commits whatever repo their terminal happened to be in, or nothing at all.
|
|
185
|
+
console.log(`\`\`\`\ncd ${repoPath}\ngit add -A\ngit commit -m "${COMMIT_MESSAGE}"\ngit push\n\`\`\``);
|
|
183
186
|
return;
|
|
184
187
|
}
|
|
185
188
|
await (0, runPromise_1.runPromise)(`git add -A`, { cwd: repoPath });
|
|
@@ -191,5 +194,5 @@ main().catch(e => {
|
|
|
191
194
|
console.error(`${e}`);
|
|
192
195
|
process.exitCode = 1;
|
|
193
196
|
}).finally(() => process.exit());
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5yZXZva2VDbGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1bnJldm9rZUNsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJEQUE2QjtBQUM3QixnREFBd0I7QUFDeEIsK0RBQTREO0FBQzVELHFEQUE4RjtBQUM5RixpREFBK0M7QUFDL0Msd0RBQW9EO0FBQ3BELG1EQUFnRTtBQUNoRSx5Q0FBNkM7QUFDN0MseUNBQWdIO0FBRWhILE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQztBQUMxQixNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUM7QUFDdkMsTUFBTSxLQUFLLEdBQUcscUNBQXFDLFdBQVc7Ozs7dUJBSXZDLFdBQVc7OzswQkFHUixDQUFDO0FBRTNCOzt3RUFFd0U7QUFDeEUsS0FBSyxVQUFVLG9CQUFvQixDQUFDLE1BR25DO0lBQ0csSUFBSSxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNsRCxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUN4QyxJQUFJLFFBQVEsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxDQUFDO1FBQ0QsUUFBUSxHQUFHLE1BQU0sa0JBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsdUZBQXVGO1FBQ3ZGLGlEQUFpRDtRQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixRQUFRLCtDQUErQyxDQUFDLENBQUM7UUFDOUYsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUs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LEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QixPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcnVuUHJvbWlzZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL3J1blByb21pc2VcIjtcbmltcG9ydCB7IGFsbG93QWRkcmVzc2VzLCBrZXlGaW5nZXJwcmludCwgcmVhZFJlcG9LZXlzLCBzdW1tYXJpemVLZXkgfSBmcm9tIFwiLi9hdXRob3JpemVkS2V5c1wiO1xuaW1wb3J0IHsgcmV2b2tlUmVwb1VSTCB9IGZyb20gXCIuL3Jldm9rZVNvdXJjZVwiO1xuaW1wb3J0IHsgc2lnblJlcG8gfSBmcm9tIFwiLi4vc2lnbmVkRmlsZXMvc2lnbkZpbGVzXCI7XG5pbXBvcnQgeyBnZXRNYWNoaW5lcywgc2V0TWFjaGluZXMgfSBmcm9tIFwiLi4vbWFjaGluZXMvbWFjaGluZXNcIjtcbmltcG9ydCB7IHJlc29sdmVLZXlzUmVwbyB9IGZyb20gXCIuL2tleXNSZXBvXCI7XG5pbXBvcnQgeyByZWFkUmVtb3RlUmV2b2NhdGlvbnMsIFJldm9jYXRpb24sIHJldm9jYXRpb25JZGVudGl0eSwgcmV2b2NhdGlvbklQLCBVTlJFVk9LRVNfRElSIH0gZnJvbSBcIi4vdW5yZXZva2VcIjtcblxuY29uc3QgR0lUX0tFWVdPUkQgPSBcImdpdFwiO1xuY29uc3QgQ09NTUlUX01FU1NBR0UgPSBcInVucmV2b2tlIGtleXNcIjtcbmNvbnN0IFVTQUdFID0gYFVzYWdlOiB5YXJuIHVucmV2b2tlIFtrZXlzLXJlcG9dIFske0dJVF9LRVlXT1JEfV1cblxuUnVuIHRoaXMgaW4gYSBrZXlzIHJlcG8sIG9yIG5hbWUgb25lLiBJdCByZWFkcyB0aGF0IHJlcG8ncyByZXZva2UgcmVwbyBhbmQgd3JpdGVzIG9uZSB1bnJldm9rZSBmaWxlXG5uYW1pbmcgZXZlcnkgcmV2b2NhdGlvbiBpbiBpdCwgc28gdGhlIGtleXMgYXJlIGFjY2VwdGVkIGFnYWluIGFzIGVhY2ggbWFjaGluZSBwaWNrcyBpdCB1cC4gSXQgc2lnbnNcbnRoZSByZXN1bHQsIGFuZCB3aXRoICR7R0lUX0tFWVdPUkR9IGl0IGNvbW1pdHMgYW5kIHB1c2hlcyBpdCB0b28uXG5cbktleXMgdGhhdCB3ZXJlIHJldm9rZWQgc2hvdWxkIG5vcm1hbGx5IGJlIGRlbGV0ZWQgZnJvbSB0aGUgcmVwbyBpbnN0ZWFkLiBVbnJldm9raW5nIG9ubHkgbWF0dGVyc1xuZm9yIGEga2V5IHlvdSBzdGlsbCB3YW50LmA7XG5cbi8qKiBXcml0ZXMgdGhlIGFkZHJlc3NlcyBpbnRvIHRoZSBmcm9tPSBsaXN0IG9mIGVhY2gga2V5IGluIHRoZSByZXBvJ3MgYXV0aG9yaXplZF9rZXlzLCBhbmQgc2F5c1xuICAgIHdoaWNoIG9uZXMgd2VyZSBhY3R1YWxseSBuZXcuIE9ubHkgdGhlIGxpbmVzIGJlaW5nIGNoYW5nZWQgYXJlIHRvdWNoZWQsIHNvIGNvbW1lbnRzLCBvcmRlcmluZ1xuICAgIGFuZCBhbnkga2V5IG5vdCBpbnZvbHZlZCBjb21lIG91dCBvZiB0aGlzIGJ5dGUgZm9yIGJ5dGUgdGhlIHNhbWUuICovXG5hc3luYyBmdW5jdGlvbiBhbGxvd0FkZHJlc3Nlc0luUmVwbyhjb25maWc6IHtcbiAgICByZXBvUGF0aDogc3RyaW5nO1xuICAgIGFkZHJlc3Nlc0J5RmluZ2VycHJpbnQ6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPjtcbn0pIHtcbiAgICBsZXQgeyByZXBvUGF0aCwgYWRkcmVzc2VzQnlGaW5nZXJwcmludCB9ID0gY29uZmlnO1xuICAgIGxldCBhZGRlZCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgICBsZXQgZmlsZVBhdGggPSBwYXRoLmpvaW4ocmVwb1BhdGgsIFwiYXV0aG9yaXplZF9rZXlzXCIpO1xuICAgIGxldCBjb250ZW50cztcbiAgICB0cnkge1xuICAgICAgICBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCBcInV0ZjhcIik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBBIHJlcG8gaG9sZGluZyBpdHMga2V5cyBhcyBzZXBhcmF0ZSAucHViIGZpbGVzLiBOb3RoaW5nIHRvIGVkaXQgaW4gb25lIHBsYWNlLCBzbyB0aGVcbiAgICAgICAgLy8gY2FsbGVyJ3MgbGlzdGluZyBpcyBhbGwgd2hvZXZlciByYW4gdGhpcyBnZXRzLlxuICAgICAgICBjb25zb2xlLmxvZyhgTm8gYXV0aG9yaXplZF9rZXlzIGluICR7cmVwb1BhdGh9LCBzbyB0aGUgYWRkcmVzc2VzIHdlcmUgbm90IGFkZGVkIHRvIGFueSBrZXkuYCk7XG4gICAgICAgIHJldHVybiBhZGRlZDtcbiAgICB9XG4gICAgbGV0IGxpbmVzID0gY29udGVudHMuc3BsaXQoXCJcXG5cIik7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBsZXQgZmluZ2VycHJpbnQgPSBrZXlGaW5nZXJwcmludChsaW5lc1tpbmRleF0pO1xuICAgICAgICBsZXQgYWRkcmVzc2VzID0gZmluZ2VycHJpbnQgJiYgYWRkcmVzc2VzQnlGaW5nZXJwcmludC5nZXQoZmluZ2VycHJpbnQpO1xuICAgICAgICBpZiAoIWFkZHJlc3NlcyB8fCAhYWRkcmVzc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdCA9IGFsbG93QWRkcmVzc2VzKGxpbmVzW2luZGV4XSwgYWRkcmVzc2VzKTtcbiAgICAgICAgbGluZXNbaW5kZXhdID0gcmVzdWx0LmtleUxpbmU7XG4gICAgICAgIGFkZGVkLnNldChmaW5nZXJwcmludCwgWy4uLihhZGRlZC5nZXQoZmluZ2VycHJpbnQpIHx8IFtdKSwgLi4ucmVzdWx0LmFkZGVkXSk7XG4gICAgfVxuICAgIGlmIChbLi4uYWRkZWQudmFsdWVzKCldLnNvbWUobGlzdCA9PiBsaXN0Lmxlbmd0aCkpIHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKFwiXFxuXCIpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZGVkO1xufVxuXG4vKiogUHV0cyBlYWNoIG1hY2hpbmUncyBhZGRyZXNzZXMgYmFjayBpbnRvIGl0cyBvd24gZmlsZSwgd2hpY2ggaXMgdGhlIG1hY2hpbmUgZXF1aXZhbGVudCBvZiBhZGRpbmdcbiAgICBhbiBhZGRyZXNzIHRvIGEga2V5J3MgZnJvbT0gbGlzdDogd2l0aG91dCBpdCB0aGUgbWFjaGluZSBpcyBhbGxvd2VkIGFnYWluIGluIHByaW5jaXBsZSBhbmRcbiAgICBzdGlsbCByZWplY3RlZCBvbiBzaWdodCwgd2hpY2ggcmV2b2tlcyBpdCBvbmNlIG1vcmUuICovXG5hc3luYyBmdW5jdGlvbiBhbGxvd0FkZHJlc3Nlc0Zvck1hY2hpbmVzKGNvbmZpZzogeyByZXBvUGF0aDogc3RyaW5nOyByZXZvY2F0aW9uczogUmV2b2NhdGlvbltdIH0pIHtcbiAgICBsZXQgeyByZXBvUGF0aCwgcmV2b2NhdGlvbnMgfSA9IGNvbmZpZztcbiAgICBsZXQgYWRkZWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgLy8gUmVhZCB0aGUgd2hvbGUgbGlzdCwgY2hhbmdlIHdoYXQgdGhlc2UgcmV2b2NhdGlvbnMgYXJlIGFib3V0LCB3cml0ZSBpdCBiYWNrLiBTZXR0aW5nIGlzIGJ5XG4gICAgLy8gdGhlIHdob2xlIHNldCwgc28gd3JpdGluZyBvbmUgbWFjaGluZSBhdCBhIHRpbWUgd291bGQgZGVsZXRlIGV2ZXJ5IG90aGVyIG1hY2hpbmUuXG4gICAgbGV0IG1hY2hpbmVzID0gYXdhaXQgZ2V0TWFjaGluZXMocmVwb1BhdGgpO1xuICAgIGZvciAobGV0IHJldm9jYXRpb24gb2YgcmV2b2NhdGlvbnMpIHtcbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IHJldm9jYXRpb24ubWFjaGluZUlkO1xuICAgICAgICBsZXQgaXAgPSByZXZvY2F0aW9uSVAocmV2b2NhdGlvbik7XG4gICAgICAgIGlmICghbWFjaGluZUlkIHx8ICFpcCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGV4aXN0aW5nID0gbWFjaGluZXMuZmluZChtYWNoaW5lID0+IG1hY2hpbmUubWFjaGluZUlkID09PSBtYWNoaW5lSWQpO1xuICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmVkIGZyb20gdGhlIHJlcG8gc2luY2UgaXQgd2FzIHJldm9rZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gYWxsb3cuIERlbGV0aW5nIGFcbiAgICAgICAgICAgIC8vIG1hY2hpbmUgaXMgdGhlIHN0cm9uZ2VyIHN0YXRlbWVudCBhbmQgaXQgc3RhbmRzLlxuICAgICAgICAgICAgY29uc29sZS5sb2coYG1hY2hpbmVzLyR7bWFjaGluZUlkfS5qc29uIGlzIG5vdCBpbiB0aGlzIHJlcG8sIHNvICR7aXB9IHdhcyBub3QgYWRkZWQgdG8gaXRgKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleGlzdGluZy5pcHMuaW5jbHVkZXMoaXApKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBleGlzdGluZy5pcHMgPSBbLi4uZXhpc3RpbmcuaXBzLCBpcF07XG4gICAgICAgIGFkZGVkLnNldChtYWNoaW5lSWQsIFsuLi4oYWRkZWQuZ2V0KG1hY2hpbmVJZCkgfHwgW10pLCBpcF0pO1xuICAgIH1cbiAgICBpZiAoYWRkZWQuc2l6ZSkge1xuICAgICAgICBhd2FpdCBzZXRNYWNoaW5lcyh7IHJlcG9QYXRoLCBtYWNoaW5lcyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZGVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICAgIGxldCBhcmd2ID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICAgIGxldCBwdXNoVG9HaXQgPSBhcmd2LmluY2x1ZGVzKEdJVF9LRVlXT1JEKTtcbiAgICBsZXQgcG9zaXRpb25hbCA9IGFyZ3YuZmlsdGVyKGFyZyA9PiBhcmcgIT09IEdJVF9LRVlXT1JEKTtcbiAgICBpZiAocG9zaXRpb25hbC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbW9zdCBhIGtleXMgcmVwbywgd2FzICR7cG9zaXRpb25hbC5sZW5ndGh9IGFyZ3VtZW50KHMpXFxuJHtVU0FHRX1gKTtcbiAgICB9XG4gICAgbGV0IHsgcmVwb1BhdGgsIHNvdXJjZVVSTDogb3JpZ2luVVJMIH0gPSBhd2FpdCByZXNvbHZlS2V5c1JlcG8ocG9zaXRpb25hbFswXSk7XG5cbiAgICBsZXQgcmV2b2NhdGlvbnMgPSBhd2FpdCByZWFkUmVtb3RlUmV2b2NhdGlvbnMoeyBzb3VyY2VVUkw6IG9yaWdpblVSTCB9KTtcbiAgICBpZiAoIXJldm9jYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtyZXZva2VSZXBvVVJMKG9yaWdpblVSTCl9IGxpc3RzIG5vIHJldm9jYXRpb25zLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIHVuZG8uYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZGlyZWN0b3J5ID0gcGF0aC5qb2luKHJlcG9QYXRoLCBVTlJFVk9LRVNfRElSKTtcbiAgICBhd2FpdCBmcy5ta2RpcihkaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGxldCBzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIFwiLVwiKTtcbiAgICBsZXQgdW5yZXZva2VJZCA9IGAke3N0YW1wfS11bnJldm9rZWA7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihkaXJlY3RvcnksIGAke3VucmV2b2tlSWR9Lmpzb25gKSwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1bnJldm9rZUlkLFxuICAgICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgLy8gV2hhdCB0aGlzIGZpbGUgc2F5czogZWFjaCBvZiB0aGVzZSBrZXlzIGlzIGFsbG93ZWQgZnJvbSB0aGlzIGFkZHJlc3MuIFBhaXJzLCBub3Qga2V5cyxcbiAgICAgICAgLy8gYW5kIG5vdCBhIGJsYW5rZXQgXCJhbGxvdyBldmVyeXRoaW5nIGFnYWluXCIgLSBhIGtleSBmb3JnaXZlbiBoZXJlIGZvciBvbmUgYWRkcmVzcyBpc1xuICAgICAgICAvLyBzdGlsbCByZXZva2VkIHRoZSBtb21lbnQgaXQgaXMgdXNlZCBmcm9tIGFub3RoZXIuXG4gICAgICAgIGFsbG93ZWQ6IHJldm9jYXRpb25zLm1hcChyZXZvY2F0aW9uID0+ICh7XG4gICAgICAgICAgICBmaW5nZXJwcmludDogcmV2b2NhdGlvbi5maW5nZXJwcmludCxcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcmV2b2NhdGlvbi5tYWNoaW5lSWQsXG4gICAgICAgICAgICBpcDogcmV2b2NhdGlvbklQKHJldm9jYXRpb24pLFxuICAgICAgICB9KSksXG4gICAgICAgIHJldm9jYXRpb25zOiByZXZvY2F0aW9ucy5tYXAocmV2b2NhdGlvbiA9PiAoe1xuICAgICAgICAgICAgcmV2b2NhdGlvbklkOiByZXZvY2F0aW9uLnJldm9jYXRpb25JZCxcbiAgICAgICAgICAgIGZpbmdlcnByaW50OiByZXZvY2F0aW9uLmZpbmdlcnByaW50LFxuICAgICAgICAgICAgbWFjaGluZUlkOiByZXZvY2F0aW9uLm1hY2hpbmVJZCxcbiAgICAgICAgICAgIGlwOiByZXZvY2F0aW9uSVAocmV2b2NhdGlvbiksXG4gICAgICAgICAgICByZXZva2VkQXQ6IHJldm9jYXRpb24ucmV2b2tlZEF0LFxuICAgICAgICAgICAgcmV2b2tlZEJ5OiByZXZvY2F0aW9uLnJldm9rZWRCeSxcbiAgICAgICAgICAgIGF0dGVtcHQ6IHJldm9jYXRpb24uYXR0ZW1wdCxcbiAgICAgICAgfSkpLFxuICAgIH0sIHVuZGVmaW5lZCwgNCkgKyBcIlxcblwiKTtcblxuICAgIC8vIE5hbWVkIHRoZSB3YXkgdGhlIG5vdGlmaWNhdGlvbnMgbmFtZSB0aGVtLiBBIGZpbmdlcnByaW50IGlzIG5vdCBpbiBhdXRob3JpemVkX2tleXMgYW5kXG4gICAgLy8gY2Fubm90IGJlIHdvcmtlZCBvdXQgYnkgZXllLCBzbyBvbiBpdHMgb3duIGl0IHRlbGxzIHdob2V2ZXIgaXMgcmVhZGluZyB0aGlzIG5vdGhpbmcgYWJvdXRcbiAgICAvLyB3aGljaCBvZiB0aGVpciBrZXlzIGlzIGJlaW5nIHRhbGtlZCBhYm91dC5cbiAgICBsZXQga2V5c0J5RmluZ2VycHJpbnQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGZvciAobGV0IGtleSBvZiBhd2FpdCByZWFkUmVwb0tleXMocmVwb1BhdGgpLmNhdGNoKCgpID0+IFtdIGFzIHN0cmluZ1tdKSkge1xuICAgICAgICBrZXlzQnlGaW5nZXJwcmludC5zZXQoa2V5RmluZ2VycHJpbnQoa2V5KSwga2V5KTtcbiAgICB9XG4gICAgbGV0IGRlc2NyaWJlS2V5ID0gKHJldm9jYXRpb246IFJldm9jYXRpb24pID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGtleXNCeUZpbmdlcnByaW50LmdldChyZXZvY2F0aW9uLmZpbmdlcnByaW50IHx8IFwiXCIpIHx8IHJldm9jYXRpb24ua2V5IHx8IFwiXCI7XG4gICAgICAgIHJldHVybiBrZXkgJiYgc3VtbWFyaXplS2V5KGtleSkgfHwgYGEga2V5IG5vIGxvbmdlciBpbiB0aGlzIHJlcG8gKCR7cmV2b2NhdGlvbi5maW5nZXJwcmludH0pYDtcbiAgICB9O1xuXG4gICAgbGV0IGFkZHJlc3Nlc0J5SWRlbnRpdHkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgZm9yIChsZXQgcmV2b2NhdGlvbiBvZiByZXZvY2F0aW9ucykge1xuICAgICAgICBsZXQgaXAgPSByZXZvY2F0aW9uSVAocmV2b2NhdGlvbik7XG4gICAgICAgIGxldCBpZGVudGl0eSA9IHJldm9jYXRpb25JZGVudGl0eShyZXZvY2F0aW9uKTtcbiAgICAgICAgbGV0IGV4aXN0aW5nID0gYWRkcmVzc2VzQnlJZGVudGl0eS5nZXQoaWRlbnRpdHkpIHx8IFtdO1xuICAgICAgICBpZiAoaXAgJiYgIWV4aXN0aW5nLmluY2x1ZGVzKGlwKSkge1xuICAgICAgICAgICAgZXhpc3RpbmcucHVzaChpcCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkcmVzc2VzQnlJZGVudGl0eS5zZXQoaWRlbnRpdHksIGV4aXN0aW5nKTtcbiAgICB9XG5cbiAgICAvLyBDYW5jZWxsaW5nIHRoZSByZXZvY2F0aW9uIG9uIGl0cyBvd24gd291bGQgbGVhdmUgc3NoZCByZWZ1c2luZyB0aGF0IGFkZHJlc3MsIGFuZCB0aGUgbWFjaGluZXNcbiAgICAvLyByZXZva2luZyBhbGwgb3ZlciBhZ2Fpbiwgc28gdGhlIGFkZHJlc3NlcyBnbyBpbnRvIHRoZSBrZXkncyBmcm9tPSBsaXN0IGFuZCBpbnRvIHRoZSBtYWNoaW5lJ3NcbiAgICAvLyBvd24gZmlsZSBoZXJlLiBXZSBhcmUgaW4gdGhlIHJlcG8gdGhhdCBvd25zIGJvdGgsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gaGFuZCBiYWNrIHRvIHdob2V2ZXJcbiAgICAvLyByYW4gdGhpcy5cbiAgICBsZXQgYWRkZWQgPSBhd2FpdCBhbGxvd0FkZHJlc3Nlc0luUmVwbyh7IHJlcG9QYXRoLCBhZGRyZXNzZXNCeUZpbmdlcnByaW50OiBhZGRyZXNzZXNCeUlkZW50aXR5IH0pO1xuICAgIGxldCBhZGRlZEZvck1hY2hpbmVzID0gYXdhaXQgYWxsb3dBZGRyZXNzZXNGb3JNYWNoaW5lcyh7IHJlcG9QYXRoLCByZXZvY2F0aW9ucyB9KTtcblxuICAgIGNvbnNvbGUubG9nKFwiXCIpO1xuICAgIGZvciAobGV0IFtpZGVudGl0eSwgYWRkcmVzc2VzXSBvZiBhZGRyZXNzZXNCeUlkZW50aXR5KSB7XG4gICAgICAgIGxldCBlbnRyaWVzID0gcmV2b2NhdGlvbnMuZmlsdGVyKGVudHJ5ID0+IHJldm9jYXRpb25JZGVudGl0eShlbnRyeSkgPT09IGlkZW50aXR5KTtcbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IGVudHJpZXNbMF0ubWFjaGluZUlkO1xuICAgICAgICBjb25zb2xlLmxvZyhgVW5mcmVlemluZyAke21hY2hpbmVJZCAmJiBgbWFjaGluZSAke21hY2hpbmVJZH1gIHx8IGRlc2NyaWJlS2V5KGVudHJpZXNbMF0pfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgQWxsb3dpbmcgSVAgJHthZGRyZXNzZXMuam9pbihcIiwgXCIpIHx8IFwiKG5vIGFkZHJlc3MgcmVjb3JkZWQpXCJ9YCk7XG4gICAgICAgIGxldCBhZGRlZEhlcmUgPSBtYWNoaW5lSWQgJiYgYWRkZWRGb3JNYWNoaW5lcy5nZXQobWFjaGluZUlkKSB8fCBhZGRlZC5nZXQoaWRlbnRpdHkpIHx8IFtdO1xuICAgICAgICBpZiAoYWRkZWRIZXJlLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHdoZXJlID0gbWFjaGluZUlkICYmIGBtYWNoaW5lcy8ke21hY2hpbmVJZH0uanNvbmAgfHwgYHRoYXQga2V5J3MgZnJvbT0gbGlzdCBpbiBhdXRob3JpemVkX2tleXNgO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgYWRkZWQgdG8gJHt3aGVyZX06ICR7YWRkZWRIZXJlLmpvaW4oXCIsIFwiKX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIGFscmVhZHkgYWxsb3dlZCBmcm9tICR7YWRkcmVzc2VzLmpvaW4oXCIsIFwiKSB8fCBcImV2ZXJ5d2hlcmVcIn1gKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBgICBmcm96ZW4gYnkgJHtlbnRyeS5yZXZva2VkQnkgfHwgXCI/XCJ9ICR7ZW50cnkucmV2b2tlZEF0IHx8IFwiYXQgYW4gdW5yZWNvcmRlZCB0aW1lXCJ9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYEV2ZXJ5IG90aGVyIGFkZHJlc3Mgc3RheXMgZnJvemVuLCBhbmQgYW55IG9mIHRoZXNlIHVzZWQgZnJvbSBhbnl3aGVyZSBlbHNlIGlzYCk7XG4gICAgY29uc29sZS5sb2coYGZyb3plbiBhZ2Fpbi5gKTtcblxuICAgIC8vIFNpZ25lZCBoZXJlIHJhdGhlciB0aGFuIGxlZnQgYXMgYSBzdGVwIHRvIHJlbWVtYmVyLiBBbiB1bnJldm9rZSBub2JvZHkgc2lnbmVkIGRvZXMgbm90aGluZyBhdFxuICAgIC8vIGFsbCwgYW5kIHRoZSByZXBvIHdvdWxkIHNpdCB0aGVyZSBsb29raW5nIGRvbmUgd2hpbGUgZXZlcnkgbWFjaGluZSBpZ25vcmVkIGl0LlxuICAgIGF3YWl0IHNpZ25SZXBvKHsgcmVwb1BhdGggfSk7XG5cbiAgICBpZiAoIXB1c2hUb0dpdCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuQ29tbWl0IGFuZCBwdXNoIGl0LCBhbmQgdGhvc2Uga2V5cyB3b3JrIGFnYWluIGFzIGVhY2ggbWFjaGluZSBwaWNrcyBpdCB1cDpgKTtcbiAgICAgICAgY29uc29sZS5sb2coYFxcYFxcYFxcYFxcbmdpdCBhZGQgLUFcXG5naXQgY29tbWl0IC1tIFwiJHtDT01NSVRfTUVTU0FHRX1cIlxcbmdpdCBwdXNoXFxuXFxgXFxgXFxgYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgcnVuUHJvbWlzZShgZ2l0IGFkZCAtQWAsIHsgY3dkOiByZXBvUGF0aCB9KTtcbiAgICBhd2FpdCBydW5Qcm9taXNlKGBnaXQgY29tbWl0IC1tIFwiJHtDT01NSVRfTUVTU0FHRX1cImAsIHsgY3dkOiByZXBvUGF0aCB9KTtcbiAgICBhd2FpdCBydW5Qcm9taXNlKGBnaXQgcHVzaGAsIHsgY3dkOiByZXBvUGF0aCB9KTtcbiAgICBjb25zb2xlLmxvZyhgXFxuQ29tbWl0dGVkIGFuZCBwdXNoZWQuIFRob3NlIGtleXMgd29yayBhZ2FpbiBhcyBlYWNoIG1hY2hpbmUgcGlja3MgaXQgdXAuYCk7XG59XG5cbm1haW4oKS5jYXRjaChlID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGAke2V9YCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG59KS5maW5hbGx5KCgpID0+IHByb2Nlc3MuZXhpdCgpKTtcbiJdfQ=//=
|
|
195
|
-
/* _JS_SOURCE_HASH = "
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5yZXZva2VDbGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1bnJldm9rZUNsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJEQUE2QjtBQUM3QixnREFBd0I7QUFDeEIsK0RBQTREO0FBQzVELHFEQUE4RjtBQUM5RixpREFBK0M7QUFDL0Msd0RBQW9EO0FBQ3BELG1EQUFnRTtBQUNoRSx5Q0FBNkM7QUFDN0MseUNBQWdIO0FBRWhILE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQztBQUMxQixNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUM7QUFDdkMsTUFBTSxLQUFLLEdBQUcscUNBQXFDLFdBQVc7Ozs7dUJBSXZDLFdBQVc7OzswQkFHUixDQUFDO0FBRTNCOzt3RUFFd0U7QUFDeEUsS0FBSyxVQUFVLG9CQUFvQixDQUFDLE1BR25DO0lBQ0csSUFBSSxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNsRCxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUN4QyxJQUFJLFFBQVEsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxDQUFDO1FBQ0QsUUFBUSxHQUFHLE1BQU0sa0JBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsdUZBQXVGO1FBQ3ZGLGlEQUFpRDtRQUNqRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixRQUFRLCtDQUErQyxDQUFDLENBQUM7UUFDOUYsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUs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QUUsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sSUFBQSx1QkFBVSxFQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsNEVBQTRFLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHJ1blByb21pc2UgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9ydW5Qcm9taXNlXCI7XG5pbXBvcnQgeyBhbGxvd0FkZHJlc3Nlcywga2V5RmluZ2VycHJpbnQsIHJlYWRSZXBvS2V5cywgc3VtbWFyaXplS2V5IH0gZnJvbSBcIi4vYXV0aG9yaXplZEtleXNcIjtcbmltcG9ydCB7IHJldm9rZVJlcG9VUkwgfSBmcm9tIFwiLi9yZXZva2VTb3VyY2VcIjtcbmltcG9ydCB7IHNpZ25SZXBvIH0gZnJvbSBcIi4uL3NpZ25lZEZpbGVzL3NpZ25GaWxlc1wiO1xuaW1wb3J0IHsgZ2V0TWFjaGluZXMsIHNldE1hY2hpbmVzIH0gZnJvbSBcIi4uL21hY2hpbmVzL21hY2hpbmVzXCI7XG5pbXBvcnQgeyByZXNvbHZlS2V5c1JlcG8gfSBmcm9tIFwiLi9rZXlzUmVwb1wiO1xuaW1wb3J0IHsgcmVhZFJlbW90ZVJldm9jYXRpb25zLCBSZXZvY2F0aW9uLCByZXZvY2F0aW9uSWRlbnRpdHksIHJldm9jYXRpb25JUCwgVU5SRVZPS0VTX0RJUiB9IGZyb20gXCIuL3VucmV2b2tlXCI7XG5cbmNvbnN0IEdJVF9LRVlXT1JEID0gXCJnaXRcIjtcbmNvbnN0IENPTU1JVF9NRVNTQUdFID0gXCJ1bnJldm9rZSBrZXlzXCI7XG5jb25zdCBVU0FHRSA9IGBVc2FnZTogeWFybiB1bnJldm9rZSBba2V5cy1yZXBvXSBbJHtHSVRfS0VZV09SRH1dXG5cblJ1biB0aGlzIGluIGEga2V5cyByZXBvLCBvciBuYW1lIG9uZS4gSXQgcmVhZHMgdGhhdCByZXBvJ3MgcmV2b2tlIHJlcG8gYW5kIHdyaXRlcyBvbmUgdW5yZXZva2UgZmlsZVxubmFtaW5nIGV2ZXJ5IHJldm9jYXRpb24gaW4gaXQsIHNvIHRoZSBrZXlzIGFyZSBhY2NlcHRlZCBhZ2FpbiBhcyBlYWNoIG1hY2hpbmUgcGlja3MgaXQgdXAuIEl0IHNpZ25zXG50aGUgcmVzdWx0LCBhbmQgd2l0aCAke0dJVF9LRVlXT1JEfSBpdCBjb21taXRzIGFuZCBwdXNoZXMgaXQgdG9vLlxuXG5LZXlzIHRoYXQgd2VyZSByZXZva2VkIHNob3VsZCBub3JtYWxseSBiZSBkZWxldGVkIGZyb20gdGhlIHJlcG8gaW5zdGVhZC4gVW5yZXZva2luZyBvbmx5IG1hdHRlcnNcbmZvciBhIGtleSB5b3Ugc3RpbGwgd2FudC5gO1xuXG4vKiogV3JpdGVzIHRoZSBhZGRyZXNzZXMgaW50byB0aGUgZnJvbT0gbGlzdCBvZiBlYWNoIGtleSBpbiB0aGUgcmVwbydzIGF1dGhvcml6ZWRfa2V5cywgYW5kIHNheXNcbiAgICB3aGljaCBvbmVzIHdlcmUgYWN0dWFsbHkgbmV3LiBPbmx5IHRoZSBsaW5lcyBiZWluZyBjaGFuZ2VkIGFyZSB0b3VjaGVkLCBzbyBjb21tZW50cywgb3JkZXJpbmdcbiAgICBhbmQgYW55IGtleSBub3QgaW52b2x2ZWQgY29tZSBvdXQgb2YgdGhpcyBieXRlIGZvciBieXRlIHRoZSBzYW1lLiAqL1xuYXN5bmMgZnVuY3Rpb24gYWxsb3dBZGRyZXNzZXNJblJlcG8oY29uZmlnOiB7XG4gICAgcmVwb1BhdGg6IHN0cmluZztcbiAgICBhZGRyZXNzZXNCeUZpbmdlcnByaW50OiBNYXA8c3RyaW5nLCBzdHJpbmdbXT47XG59KSB7XG4gICAgbGV0IHsgcmVwb1BhdGgsIGFkZHJlc3Nlc0J5RmluZ2VycHJpbnQgfSA9IGNvbmZpZztcbiAgICBsZXQgYWRkZWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgbGV0IGZpbGVQYXRoID0gcGF0aC5qb2luKHJlcG9QYXRoLCBcImF1dGhvcml6ZWRfa2V5c1wiKTtcbiAgICBsZXQgY29udGVudHM7XG4gICAgdHJ5IHtcbiAgICAgICAgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQSByZXBvIGhvbGRpbmcgaXRzIGtleXMgYXMgc2VwYXJhdGUgLnB1YiBmaWxlcy4gTm90aGluZyB0byBlZGl0IGluIG9uZSBwbGFjZSwgc28gdGhlXG4gICAgICAgIC8vIGNhbGxlcidzIGxpc3RpbmcgaXMgYWxsIHdob2V2ZXIgcmFuIHRoaXMgZ2V0cy5cbiAgICAgICAgY29uc29sZS5sb2coYE5vIGF1dGhvcml6ZWRfa2V5cyBpbiAke3JlcG9QYXRofSwgc28gdGhlIGFkZHJlc3NlcyB3ZXJlIG5vdCBhZGRlZCB0byBhbnkga2V5LmApO1xuICAgICAgICByZXR1cm4gYWRkZWQ7XG4gICAgfVxuICAgIGxldCBsaW5lcyA9IGNvbnRlbnRzLnNwbGl0KFwiXFxuXCIpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbGV0IGZpbmdlcnByaW50ID0ga2V5RmluZ2VycHJpbnQobGluZXNbaW5kZXhdKTtcbiAgICAgICAgbGV0IGFkZHJlc3NlcyA9IGZpbmdlcnByaW50ICYmIGFkZHJlc3Nlc0J5RmluZ2VycHJpbnQuZ2V0KGZpbmdlcnByaW50KTtcbiAgICAgICAgaWYgKCFhZGRyZXNzZXMgfHwgIWFkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhbGxvd0FkZHJlc3NlcyhsaW5lc1tpbmRleF0sIGFkZHJlc3Nlcyk7XG4gICAgICAgIGxpbmVzW2luZGV4XSA9IHJlc3VsdC5rZXlMaW5lO1xuICAgICAgICBhZGRlZC5zZXQoZmluZ2VycHJpbnQsIFsuLi4oYWRkZWQuZ2V0KGZpbmdlcnByaW50KSB8fCBbXSksIC4uLnJlc3VsdC5hZGRlZF0pO1xuICAgIH1cbiAgICBpZiAoWy4uLmFkZGVkLnZhbHVlcygpXS5zb21lKGxpc3QgPT4gbGlzdC5sZW5ndGgpKSB7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgbGluZXMuam9pbihcIlxcblwiKSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRlZDtcbn1cblxuLyoqIFB1dHMgZWFjaCBtYWNoaW5lJ3MgYWRkcmVzc2VzIGJhY2sgaW50byBpdHMgb3duIGZpbGUsIHdoaWNoIGlzIHRoZSBtYWNoaW5lIGVxdWl2YWxlbnQgb2YgYWRkaW5nXG4gICAgYW4gYWRkcmVzcyB0byBhIGtleSdzIGZyb209IGxpc3Q6IHdpdGhvdXQgaXQgdGhlIG1hY2hpbmUgaXMgYWxsb3dlZCBhZ2FpbiBpbiBwcmluY2lwbGUgYW5kXG4gICAgc3RpbGwgcmVqZWN0ZWQgb24gc2lnaHQsIHdoaWNoIHJldm9rZXMgaXQgb25jZSBtb3JlLiAqL1xuYXN5bmMgZnVuY3Rpb24gYWxsb3dBZGRyZXNzZXNGb3JNYWNoaW5lcyhjb25maWc6IHsgcmVwb1BhdGg6IHN0cmluZzsgcmV2b2NhdGlvbnM6IFJldm9jYXRpb25bXSB9KSB7XG4gICAgbGV0IHsgcmVwb1BhdGgsIHJldm9jYXRpb25zIH0gPSBjb25maWc7XG4gICAgbGV0IGFkZGVkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgIC8vIFJlYWQgdGhlIHdob2xlIGxpc3QsIGNoYW5nZSB3aGF0IHRoZXNlIHJldm9jYXRpb25zIGFyZSBhYm91dCwgd3JpdGUgaXQgYmFjay4gU2V0dGluZyBpcyBieVxuICAgIC8vIHRoZSB3aG9sZSBzZXQsIHNvIHdyaXRpbmcgb25lIG1hY2hpbmUgYXQgYSB0aW1lIHdvdWxkIGRlbGV0ZSBldmVyeSBvdGhlciBtYWNoaW5lLlxuICAgIGxldCBtYWNoaW5lcyA9IGF3YWl0IGdldE1hY2hpbmVzKHJlcG9QYXRoKTtcbiAgICBmb3IgKGxldCByZXZvY2F0aW9uIG9mIHJldm9jYXRpb25zKSB7XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSByZXZvY2F0aW9uLm1hY2hpbmVJZDtcbiAgICAgICAgbGV0IGlwID0gcmV2b2NhdGlvbklQKHJldm9jYXRpb24pO1xuICAgICAgICBpZiAoIW1hY2hpbmVJZCB8fCAhaXApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBleGlzdGluZyA9IG1hY2hpbmVzLmZpbmQobWFjaGluZSA9PiBtYWNoaW5lLm1hY2hpbmVJZCA9PT0gbWFjaGluZUlkKTtcbiAgICAgICAgaWYgKCFleGlzdGluZykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlZCBmcm9tIHRoZSByZXBvIHNpbmNlIGl0IHdhcyByZXZva2VkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGFsbG93LiBEZWxldGluZyBhXG4gICAgICAgICAgICAvLyBtYWNoaW5lIGlzIHRoZSBzdHJvbmdlciBzdGF0ZW1lbnQgYW5kIGl0IHN0YW5kcy5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBtYWNoaW5lcy8ke21hY2hpbmVJZH0uanNvbiBpcyBub3QgaW4gdGhpcyByZXBvLCBzbyAke2lwfSB3YXMgbm90IGFkZGVkIHRvIGl0YCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhpc3RpbmcuaXBzLmluY2x1ZGVzKGlwKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZXhpc3RpbmcuaXBzID0gWy4uLmV4aXN0aW5nLmlwcywgaXBdO1xuICAgICAgICBhZGRlZC5zZXQobWFjaGluZUlkLCBbLi4uKGFkZGVkLmdldChtYWNoaW5lSWQpIHx8IFtdKSwgaXBdKTtcbiAgICB9XG4gICAgaWYgKGFkZGVkLnNpemUpIHtcbiAgICAgICAgYXdhaXQgc2V0TWFjaGluZXMoeyByZXBvUGF0aCwgbWFjaGluZXMgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgICBsZXQgYXJndiA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgICBsZXQgcHVzaFRvR2l0ID0gYXJndi5pbmNsdWRlcyhHSVRfS0VZV09SRCk7XG4gICAgbGV0IHBvc2l0aW9uYWwgPSBhcmd2LmZpbHRlcihhcmcgPT4gYXJnICE9PSBHSVRfS0VZV09SRCk7XG4gICAgaWYgKHBvc2l0aW9uYWwubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IG1vc3QgYSBrZXlzIHJlcG8sIHdhcyAke3Bvc2l0aW9uYWwubGVuZ3RofSBhcmd1bWVudChzKVxcbiR7VVNBR0V9YCk7XG4gICAgfVxuICAgIGxldCB7IHJlcG9QYXRoLCBzb3VyY2VVUkw6IG9yaWdpblVSTCB9ID0gYXdhaXQgcmVzb2x2ZUtleXNSZXBvKHBvc2l0aW9uYWxbMF0pO1xuXG4gICAgbGV0IHJldm9jYXRpb25zID0gYXdhaXQgcmVhZFJlbW90ZVJldm9jYXRpb25zKHsgc291cmNlVVJMOiBvcmlnaW5VUkwgfSk7XG4gICAgaWYgKCFyZXZvY2F0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7cmV2b2tlUmVwb1VSTChvcmlnaW5VUkwpfSBsaXN0cyBubyByZXZvY2F0aW9ucywgc28gdGhlcmUgaXMgbm90aGluZyB0byB1bmRvLmApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGRpcmVjdG9yeSA9IHBhdGguam9pbihyZXBvUGF0aCwgVU5SRVZPS0VTX0RJUik7XG4gICAgYXdhaXQgZnMubWtkaXIoZGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBsZXQgc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCBcIi1cIik7XG4gICAgbGV0IHVucmV2b2tlSWQgPSBgJHtzdGFtcH0tdW5yZXZva2VgO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4oZGlyZWN0b3J5LCBgJHt1bnJldm9rZUlkfS5qc29uYCksIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdW5yZXZva2VJZCxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIC8vIFdoYXQgdGhpcyBmaWxlIHNheXM6IGVhY2ggb2YgdGhlc2Uga2V5cyBpcyBhbGxvd2VkIGZyb20gdGhpcyBhZGRyZXNzLiBQYWlycywgbm90IGtleXMsXG4gICAgICAgIC8vIGFuZCBub3QgYSBibGFua2V0IFwiYWxsb3cgZXZlcnl0aGluZyBhZ2FpblwiIC0gYSBrZXkgZm9yZ2l2ZW4gaGVyZSBmb3Igb25lIGFkZHJlc3MgaXNcbiAgICAgICAgLy8gc3RpbGwgcmV2b2tlZCB0aGUgbW9tZW50IGl0IGlzIHVzZWQgZnJvbSBhbm90aGVyLlxuICAgICAgICBhbGxvd2VkOiByZXZvY2F0aW9ucy5tYXAocmV2b2NhdGlvbiA9PiAoe1xuICAgICAgICAgICAgZmluZ2VycHJpbnQ6IHJldm9jYXRpb24uZmluZ2VycHJpbnQsXG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHJldm9jYXRpb24ubWFjaGluZUlkLFxuICAgICAgICAgICAgaXA6IHJldm9jYXRpb25JUChyZXZvY2F0aW9uKSxcbiAgICAgICAgfSkpLFxuICAgICAgICByZXZvY2F0aW9uczogcmV2b2NhdGlvbnMubWFwKHJldm9jYXRpb24gPT4gKHtcbiAgICAgICAgICAgIHJldm9jYXRpb25JZDogcmV2b2NhdGlvbi5yZXZvY2F0aW9uSWQsXG4gICAgICAgICAgICBmaW5nZXJwcmludDogcmV2b2NhdGlvbi5maW5nZXJwcmludCxcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcmV2b2NhdGlvbi5tYWNoaW5lSWQsXG4gICAgICAgICAgICBpcDogcmV2b2NhdGlvbklQKHJldm9jYXRpb24pLFxuICAgICAgICAgICAgcmV2b2tlZEF0OiByZXZvY2F0aW9uLnJldm9rZWRBdCxcbiAgICAgICAgICAgIHJldm9rZWRCeTogcmV2b2NhdGlvbi5yZXZva2VkQnksXG4gICAgICAgICAgICBhdHRlbXB0OiByZXZvY2F0aW9uLmF0dGVtcHQsXG4gICAgICAgIH0pKSxcbiAgICB9LCB1bmRlZmluZWQsIDQpICsgXCJcXG5cIik7XG5cbiAgICAvLyBOYW1lZCB0aGUgd2F5IHRoZSBub3RpZmljYXRpb25zIG5hbWUgdGhlbS4gQSBmaW5nZXJwcmludCBpcyBub3QgaW4gYXV0aG9yaXplZF9rZXlzIGFuZFxuICAgIC8vIGNhbm5vdCBiZSB3b3JrZWQgb3V0IGJ5IGV5ZSwgc28gb24gaXRzIG93biBpdCB0ZWxscyB3aG9ldmVyIGlzIHJlYWRpbmcgdGhpcyBub3RoaW5nIGFib3V0XG4gICAgLy8gd2hpY2ggb2YgdGhlaXIga2V5cyBpcyBiZWluZyB0YWxrZWQgYWJvdXQuXG4gICAgbGV0IGtleXNCeUZpbmdlcnByaW50ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBmb3IgKGxldCBrZXkgb2YgYXdhaXQgcmVhZFJlcG9LZXlzKHJlcG9QYXRoKS5jYXRjaCgoKSA9PiBbXSBhcyBzdHJpbmdbXSkpIHtcbiAgICAgICAga2V5c0J5RmluZ2VycHJpbnQuc2V0KGtleUZpbmdlcnByaW50KGtleSksIGtleSk7XG4gICAgfVxuICAgIGxldCBkZXNjcmliZUtleSA9IChyZXZvY2F0aW9uOiBSZXZvY2F0aW9uKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBrZXlzQnlGaW5nZXJwcmludC5nZXQocmV2b2NhdGlvbi5maW5nZXJwcmludCB8fCBcIlwiKSB8fCByZXZvY2F0aW9uLmtleSB8fCBcIlwiO1xuICAgICAgICByZXR1cm4ga2V5ICYmIHN1bW1hcml6ZUtleShrZXkpIHx8IGBhIGtleSBubyBsb25nZXIgaW4gdGhpcyByZXBvICgke3Jldm9jYXRpb24uZmluZ2VycHJpbnR9KWA7XG4gICAgfTtcblxuICAgIGxldCBhZGRyZXNzZXNCeUlkZW50aXR5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgIGZvciAobGV0IHJldm9jYXRpb24gb2YgcmV2b2NhdGlvbnMpIHtcbiAgICAgICAgbGV0IGlwID0gcmV2b2NhdGlvbklQKHJldm9jYXRpb24pO1xuICAgICAgICBsZXQgaWRlbnRpdHkgPSByZXZvY2F0aW9uSWRlbnRpdHkocmV2b2NhdGlvbik7XG4gICAgICAgIGxldCBleGlzdGluZyA9IGFkZHJlc3Nlc0J5SWRlbnRpdHkuZ2V0KGlkZW50aXR5KSB8fCBbXTtcbiAgICAgICAgaWYgKGlwICYmICFleGlzdGluZy5pbmNsdWRlcyhpcCkpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nLnB1c2goaXApO1xuICAgICAgICB9XG4gICAgICAgIGFkZHJlc3Nlc0J5SWRlbnRpdHkuc2V0KGlkZW50aXR5LCBleGlzdGluZyk7XG4gICAgfVxuXG4gICAgLy8gQ2FuY2VsbGluZyB0aGUgcmV2b2NhdGlvbiBvbiBpdHMgb3duIHdvdWxkIGxlYXZlIHNzaGQgcmVmdXNpbmcgdGhhdCBhZGRyZXNzLCBhbmQgdGhlIG1hY2hpbmVzXG4gICAgLy8gcmV2b2tpbmcgYWxsIG92ZXIgYWdhaW4sIHNvIHRoZSBhZGRyZXNzZXMgZ28gaW50byB0aGUga2V5J3MgZnJvbT0gbGlzdCBhbmQgaW50byB0aGUgbWFjaGluZSdzXG4gICAgLy8gb3duIGZpbGUgaGVyZS4gV2UgYXJlIGluIHRoZSByZXBvIHRoYXQgb3ducyBib3RoLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGhhbmQgYmFjayB0byB3aG9ldmVyXG4gICAgLy8gcmFuIHRoaXMuXG4gICAgbGV0IGFkZGVkID0gYXdhaXQgYWxsb3dBZGRyZXNzZXNJblJlcG8oeyByZXBvUGF0aCwgYWRkcmVzc2VzQnlGaW5nZXJwcmludDogYWRkcmVzc2VzQnlJZGVudGl0eSB9KTtcbiAgICBsZXQgYWRkZWRGb3JNYWNoaW5lcyA9IGF3YWl0IGFsbG93QWRkcmVzc2VzRm9yTWFjaGluZXMoeyByZXBvUGF0aCwgcmV2b2NhdGlvbnMgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICBmb3IgKGxldCBbaWRlbnRpdHksIGFkZHJlc3Nlc10gb2YgYWRkcmVzc2VzQnlJZGVudGl0eSkge1xuICAgICAgICBsZXQgZW50cmllcyA9IHJldm9jYXRpb25zLmZpbHRlcihlbnRyeSA9PiByZXZvY2F0aW9uSWRlbnRpdHkoZW50cnkpID09PSBpZGVudGl0eSk7XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSBlbnRyaWVzWzBdLm1hY2hpbmVJZDtcbiAgICAgICAgY29uc29sZS5sb2coYFVuZnJlZXppbmcgJHttYWNoaW5lSWQgJiYgYG1hY2hpbmUgJHttYWNoaW5lSWR9YCB8fCBkZXNjcmliZUtleShlbnRyaWVzWzBdKX1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYEFsbG93aW5nIElQICR7YWRkcmVzc2VzLmpvaW4oXCIsIFwiKSB8fCBcIihubyBhZGRyZXNzIHJlY29yZGVkKVwifWApO1xuICAgICAgICBsZXQgYWRkZWRIZXJlID0gbWFjaGluZUlkICYmIGFkZGVkRm9yTWFjaGluZXMuZ2V0KG1hY2hpbmVJZCkgfHwgYWRkZWQuZ2V0KGlkZW50aXR5KSB8fCBbXTtcbiAgICAgICAgaWYgKGFkZGVkSGVyZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCB3aGVyZSA9IG1hY2hpbmVJZCAmJiBgbWFjaGluZXMvJHttYWNoaW5lSWR9Lmpzb25gIHx8IGB0aGF0IGtleSdzIGZyb209IGxpc3QgaW4gYXV0aG9yaXplZF9rZXlzYDtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIGFkZGVkIHRvICR7d2hlcmV9OiAke2FkZGVkSGVyZS5qb2luKFwiLCBcIil9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBhbHJlYWR5IGFsbG93ZWQgZnJvbSAke2FkZHJlc3Nlcy5qb2luKFwiLCBcIikgfHwgXCJldmVyeXdoZXJlXCJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgYCAgZnJvemVuIGJ5ICR7ZW50cnkucmV2b2tlZEJ5IHx8IFwiP1wifSAke2VudHJ5LnJldm9rZWRBdCB8fCBcImF0IGFuIHVucmVjb3JkZWQgdGltZVwifWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coXCJcIik7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBFdmVyeSBvdGhlciBhZGRyZXNzIHN0YXlzIGZyb3plbiwgYW5kIGFueSBvZiB0aGVzZSB1c2VkIGZyb20gYW55d2hlcmUgZWxzZSBpc2ApO1xuICAgIGNvbnNvbGUubG9nKGBmcm96ZW4gYWdhaW4uYCk7XG5cbiAgICAvLyBTaWduZWQgaGVyZSByYXRoZXIgdGhhbiBsZWZ0IGFzIGEgc3RlcCB0byByZW1lbWJlci4gQW4gdW5yZXZva2Ugbm9ib2R5IHNpZ25lZCBkb2VzIG5vdGhpbmcgYXRcbiAgICAvLyBhbGwsIGFuZCB0aGUgcmVwbyB3b3VsZCBzaXQgdGhlcmUgbG9va2luZyBkb25lIHdoaWxlIGV2ZXJ5IG1hY2hpbmUgaWdub3JlZCBpdC5cbiAgICBhd2FpdCBzaWduUmVwbyh7IHJlcG9QYXRoIH0pO1xuXG4gICAgaWYgKCFwdXNoVG9HaXQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcbkNvbW1pdCBhbmQgcHVzaCBpdCwgYW5kIHRob3NlIGtleXMgd29yayBhZ2FpbiBhcyBlYWNoIG1hY2hpbmUgcGlja3MgaXQgdXA6YCk7XG4gICAgICAgIC8vIFRoZSBjZCBpcyBwYXJ0IG9mIHRoZSBibG9jayBvbiBwdXJwb3NlLiBUaGVzZSBjb21tYW5kcyBvbmx5IGRvIHRoZSByaWdodCB0aGluZyBpbnNpZGVcbiAgICAgICAgLy8gdGhlIGtleXMgcmVwbywgYW5kIHdob2V2ZXIgcmVhZHMgdGhpcyBpcyBhbG1vc3QgbmV2ZXIgc2l0dGluZyBpbiBpdCAtIHBhc3RpbmcgdGhlIGdpdFxuICAgICAgICAvLyBsaW5lcyBhbG9uZSBjb21taXRzIHdoYXRldmVyIHJlcG8gdGhlaXIgdGVybWluYWwgaGFwcGVuZWQgdG8gYmUgaW4sIG9yIG5vdGhpbmcgYXQgYWxsLlxuICAgICAgICBjb25zb2xlLmxvZyhgXFxgXFxgXFxgXFxuY2QgJHtyZXBvUGF0aH1cXG5naXQgYWRkIC1BXFxuZ2l0IGNvbW1pdCAtbSBcIiR7Q09NTUlUX01FU1NBR0V9XCJcXG5naXQgcHVzaFxcblxcYFxcYFxcYGApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHJ1blByb21pc2UoYGdpdCBhZGQgLUFgLCB7IGN3ZDogcmVwb1BhdGggfSk7XG4gICAgYXdhaXQgcnVuUHJvbWlzZShgZ2l0IGNvbW1pdCAtbSBcIiR7Q09NTUlUX01FU1NBR0V9XCJgLCB7IGN3ZDogcmVwb1BhdGggfSk7XG4gICAgYXdhaXQgcnVuUHJvbWlzZShgZ2l0IHB1c2hgLCB7IGN3ZDogcmVwb1BhdGggfSk7XG4gICAgY29uc29sZS5sb2coYFxcbkNvbW1pdHRlZCBhbmQgcHVzaGVkLiBUaG9zZSBrZXlzIHdvcmsgYWdhaW4gYXMgZWFjaCBtYWNoaW5lIHBpY2tzIGl0IHVwLmApO1xufVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihgJHtlfWApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xufSkuZmluYWxseSgoKSA9PiBwcm9jZXNzLmV4aXQoKSk7XG4iXX0//=
|
|
198
|
+
/* _JS_SOURCE_HASH = "e9a4b04b884b6ad971c3ceae25454a8a6d0cfa880ceca20b6e529408a3a8678d"; */
|