sliftutils 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/misc/dist/strings.ts.cache +2 -2
- package/misc/https/dist/certs.ts.cache +2 -2
- package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
- package/package.json +7 -3
- package/security/authorizedKeys/daemon/dist/changes.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/git.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/notify.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/paths.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/readSignedRepo.ts.cache +36 -21
- package/security/authorizedKeys/daemon/dist/repoFiles.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/revocation.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/sessions.ts.cache +2 -2
- package/security/authorizedKeys/daemon/dist/state.ts.cache +2 -2
- package/security/authorizedKeys/daemon/readSignedRepo.d.ts +28 -4
- package/security/authorizedKeys/daemon/readSignedRepo.ts +38 -13
- package/security/authorizedKeys/dist/authorizedKeys.ts.cache +2 -2
- package/security/authorizedKeys/dist/keysRepo.ts.cache +2 -2
- package/security/authorizedKeys/dist/revokeSource.ts.cache +2 -2
- package/security/authorizedKeys/dist/sources.ts.cache +2 -2
- package/security/helpers/dist/paths.ts.cache +2 -2
- package/security/helpers/dist/remoteSSH.ts.cache +2 -2
- package/security/helpers/dist/spawn.ts.cache +2 -2
- package/security/keys/dist/deriveKey.ts.cache +2 -2
- package/security/keys/dist/sshKeyFile.ts.cache +2 -2
- package/security/machines/dist/addMachine.ts.cache +7 -5
- package/security/machines/dist/machines.ts.cache +18 -6
- package/security/machines/dist/printMachineId.ts.cache +100 -7
- package/security/machines/machines.ts +18 -5
- package/security/machines/printMachineId.ts +106 -5
- package/security/notifications/dist/discord.ts.cache +2 -2
- package/security/signedFiles/dist/manifest.ts.cache +2 -2
- package/security/signedFiles/dist/sshsig.ts.cache +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
@@ -22,4 +22,4 @@ function deriveEd25519Key(config) {
|
|
|
22
22
|
}
|
|
23
23
|
exports.deriveEd25519Key = deriveEd25519Key;
|
|
24
24
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlS2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVyaXZlS2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw2Q0FBaUQ7QUFFakQ7Ozs7O2tGQUtrRjtBQUNsRixTQUFnQixnQkFBZ0IsQ0FBQyxNQUF1QztJQUNwRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUM3QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBQ0QsSUFBSSxXQUFXLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkYsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUEsOEJBQWlCLEVBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztBQUM1RSxDQUFDO0FBUEQsNENBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IHB1YmxpY0tleUZyb21TZWVkIH0gZnJvbSBcIi4vc3NoS2V5RmlsZVwiO1xuXG4vKiogQSBsYWJlbCBtaXhlZCBpbnRvIGEga2V5J3Mgc2VjcmV0IHRvIGdldCBhbm90aGVyIGtleSwgc28gb25lIGtleSBjYW4gc3RhbmQgYmVoaW5kIHNldmVyYWxcbiAgICBpZGVudGl0aWVzIHdpdGhvdXQgYW55IG9mIHRoZW0gYmVpbmcgc3RvcmVkLlxuXG4gICAgSE1BQyByYXRoZXIgdGhhbiBoYXNoaW5nIHRoZSB0d28gam9pbmVkIHRvZ2V0aGVyOiB3aXRoIGEgcGxhaW4gaGFzaCwgYW55b25lIHdobyBvYnRhaW5lZCBvbmVcbiAgICBkZXJpdmVkIGtleSBjb3VsZCBleHRlbmQgaXQgaW50byBmdXJ0aGVyIGxhYmVscyB3aXRob3V0IGV2ZXIga25vd2luZyB0aGUgc291cmNlIGtleS4gVGhlIGxhYmVsXG4gICAgaXMgdGhlIG1lc3NhZ2UgYW5kIHRoZSBzb3VyY2Ugc2VjcmV0IGlzIHRoZSBrZXksIHdoaWNoIGlzIHdoYXQgSE1BQyBpcyBmb3IuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlRWQyNTUxOUtleShjb25maWc6IHsgc2VlZDogQnVmZmVyOyBsYWJlbDogc3RyaW5nIH0pIHtcbiAgICBsZXQgeyBzZWVkLCBsYWJlbCB9ID0gY29uZmlnO1xuICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIGxhYmVsIHRvIGRlcml2ZSB3aXRoLCB3YXMgJHtKU09OLnN0cmluZ2lmeShsYWJlbCl9YCk7XG4gICAgfVxuICAgIGxldCBkZXJpdmVkU2VlZCA9IGNyeXB0by5jcmVhdGVIbWFjKFwic2hhMjU2XCIsIHNlZWQpLnVwZGF0ZShsYWJlbCwgXCJ1dGY4XCIpLmRpZ2VzdCgpO1xuICAgIHJldHVybiB7IHNlZWQ6IGRlcml2ZWRTZWVkLCBwdWJsaWNLZXk6IHB1YmxpY0tleUZyb21TZWVkKGRlcml2ZWRTZWVkKSB9O1xufVxuIl19
|
|
25
|
-
/* _JS_SOURCE_HASH = "
|
|
25
|
+
/* _JS_SOURCE_HASH = "8ed7b96889dad455f0be88dda13ba8f278a053b4af3787f5012c605e2da5db8a"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
@@ -152,4 +152,4 @@ function formatPublicKeyLine(config) {
|
|
|
152
152
|
}
|
|
153
153
|
exports.formatPublicKeyLine = formatPublicKeyLine;
|
|
154
154
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NoS2V5RmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNzaEtleUZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLGlHQUFpRztBQUNqRyxtR0FBbUc7QUFDbkcsK0JBQStCO0FBRS9CLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDO0FBQ2pDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQztBQUMvQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFDcEIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixvRUFBb0U7QUFDcEUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLGNBQWMsR0FBRyxxQ0FBcUMsQ0FBQztBQUM3RCxNQUFNLGNBQWMsR0FBRyxtQ0FBbUMsQ0FBQztBQUMzRCx1RkFBdUY7QUFDdkYsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXBGLE1BQU0sVUFBVTtJQUVaLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRDFCLFdBQU0sR0FBRyxDQUFDLENBQUM7SUFDbUIsQ0FBQztJQUV2QyxTQUFTLENBQUMsTUFBYztRQUNwQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDcEUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxNQUFNLG9CQUFvQixJQUFJLENBQUMsTUFBTSxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFD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SyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sZUFBZSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEcsT0FBTyxHQUFHLGNBQWMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLGNBQWMsSUFBSSxDQUFDO0FBQzNFLENBQUM7QUEvQkQsMERBK0JDO0FBRUQsaUZBQWlGO0FBQ2pGLFNBQWdCLG1CQUFtQixDQUFDLE1BQThDO0lBQzlFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3BDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxPQUFPLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxJQUFJLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDdkYsQ0FBQztBQUpELGtEQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5cbi8vIE9wZW5TU0gga2VlcHMgcHJpdmF0ZSBrZXlzIGluIGl0cyBvd24gY29udGFpbmVyIHJhdGhlciB0aGFuIGFueXRoaW5nIG5vZGUgY2FuIHJlYWQsIHNvIHRoZSBmZXdcbi8vIGJ5dGVzIG9mIGl0IHdlIG5lZWQgYXJlIGhhbmRsZWQgaGVyZS4gT25seSB1bmVuY3J5cHRlZCBlZDI1NTE5IGtleXMgYXJlIHN1cHBvcnRlZCwgd2hpY2ggaXMgd2hhdFxuLy8gYSBrZXkgdXNlZCBieSBhdXRvbWF0aW9uIGlzLlxuXG5jb25zdCBNQUdJQyA9IFwib3BlbnNzaC1rZXktdjFcXDBcIjtcbmNvbnN0IEtFWV9UWVBFID0gXCJzc2gtZWQyNTUxOVwiO1xuY29uc3QgTk9ORSA9IFwibm9uZVwiO1xuY29uc3QgU0VFRF9MRU5HVEggPSAzMjtcbmNvbnN0IFBVQkxJQ19MRU5HVEggPSAzMjtcbi8vIFRoZSBvbmUgYmxvY2sgc2l6ZSB0aGF0IG1hdHRlcnMgaGVyZSwgc2luY2Ugbm90aGluZyBpcyBlbmNyeXB0ZWQuXG5jb25zdCBQQURESU5HX0JMT0NLID0gODtcbmNvbnN0IFBFTV9MSU5FX0xFTkdUSCA9IDcwO1xuY29uc3QgUFJJVkFURV9IRUFERVIgPSBcIi0tLS0tQkVHSU4gT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tXCI7XG5jb25zdCBQUklWQVRFX0ZPT1RFUiA9IFwiLS0tLS1FTkQgT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tXCI7XG4vLyBUaGUgcHJlZml4IHRoYXQgdHVybnMgYSBiYXJlIDMyIGJ5dGUgc2VlZCBpbnRvIGEgcGtjczggZWQyNTUxOSBrZXkgbm9kZSB3aWxsIGFjY2VwdC5cbmNvbnN0IFBLQ1M4X0VEMjU1MTlfUFJFRklYID0gQnVmZmVyLmZyb20oXCIzMDJlMDIwMTAwMzAwNTA2MDMyYjY1NzAwNDIyMDQyMFwiLCBcImhleFwiKTtcblxuY2xhc3MgQnl0ZVJlYWRlciB7XG4gICAgcHJpdmF0ZSBvZmZzZXQgPSAwO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVmZmVyOiBCdWZmZXIpIHsgfVxuXG4gICAgcmVhZEJ5dGVzKGxlbmd0aDogbnVtYmVyKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArIGxlbmd0aCk7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2xlbmd0aH0gYnl0ZXMgYXQgb2Zmc2V0ICR7dGhpcy5vZmZzZXR9LCB3YXMgJHt2YWx1ZS5sZW5ndGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gbGVuZ3RoO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmVhZFVJbnQzMigpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkJFKHRoaXMub2Zmc2V0KTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJlYWRTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRCeXRlcyh0aGlzLnJlYWRVSW50MzIoKSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmluZyh2YWx1ZTogQnVmZmVyIHwgc3RyaW5nKSB7XG4gICAgbGV0IGNvbnRlbnRzID0gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSAmJiB2YWx1ZSB8fCBCdWZmZXIuZnJvbSh2YWx1ZSwgXCJ1dGY4XCIpO1xuICAgIGxldCBsZW5ndGggPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgbGVuZ3RoLndyaXRlVUludDMyQkUoY29udGVudHMubGVuZ3RoKTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbbGVuZ3RoLCBjb250ZW50c10pO1xufVxuXG5mdW5jdGlvbiB3cml0ZVVJbnQzMih2YWx1ZTogbnVtYmVyKSB7XG4gICAgbGV0IGJ5dGVzID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgIGJ5dGVzLndyaXRlVUludDMyQkUodmFsdWUpO1xuICAgIHJldHVybiBieXRlcztcbn1cblxuLyoqIFRoZSBwdWJsaWMga2V5IG9mIGEgc2VlZCwgd29ya2VkIG91dCBieSBub2RlIHJhdGhlciB0aGFuIGJ5IHJlaW1wbGVtZW50aW5nIHRoZSBjdXJ2ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaWNLZXlGcm9tU2VlZChzZWVkOiBCdWZmZXIpIHtcbiAgICBpZiAoc2VlZC5sZW5ndGggIT09IFNFRURfTEVOR1RIKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSAke1NFRURfTEVOR1RIfSBieXRlIHNlZWQsIHdhcyAke3NlZWQubGVuZ3RofWApO1xuICAgIH1cbiAgICBsZXQgcHJpdmF0ZUtleSA9IGNyeXB0by5jcmVhdGVQcml2YXRlS2V5KHtcbiAgICAgICAga2V5OiBCdWZmZXIuY29uY2F0KFtQS0NTOF9FRDI1NTE5X1BSRUZJWCwgc2VlZF0pLFxuICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICB9KTtcbiAgICAvLyBUaGUgc3BraSB3cmFwcGVyIGlzIGEgZml4ZWQgMTIgYnl0ZSBoZWFkZXIgZm9sbG93ZWQgYnkgdGhlIHJhdyBrZXkuXG4gICAgLy8gVGhlIGNhc3QgaXMgYmVjYXVzZSBzb21lIEB0eXBlcy9ub2RlIHZlcnNpb25zIGRvbid0IGFjY2VwdCBhIEtleU9iamVjdCBoZXJlLCBldmVuIHRob3VnaCB0aGVcbiAgICAvLyBydW50aW1lIGFsd2F5cyBoYXMuIENvbnN1bWVycyBjb21waWxlIHVzIHdpdGggdGhlaXIgb3duIEB0eXBlcy9ub2RlLCBzbyB0aGlzIGhhcyB0byBub3QgZmFpbC5cbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleShwcml2YXRlS2V5IGFzIGFueSkuZXhwb3J0KHsgZm9ybWF0OiBcImRlclwiLCB0eXBlOiBcInNwa2lcIiB9KS5zdWJhcnJheSgxMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9wZW5TU0hQcml2YXRlS2V5KGNvbnRlbnRzOiBzdHJpbmcpIHtcbiAgICBsZXQgYm9keSA9IGNvbnRlbnRzLnNwbGl0KFwiXFxuXCIpLmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICYmICFsaW5lLnN0YXJ0c1dpdGgoXCItLS0tLVwiKSkuam9pbihcIlwiKTtcbiAgICBpZiAoIWNvbnRlbnRzLmluY2x1ZGVzKFBSSVZBVEVfSEVBREVSKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIE9wZW5TU0ggcHJpdmF0ZSBrZXkgc3RhcnRpbmcgd2l0aCAke1BSSVZBVEVfSEVBREVSfWApO1xuICAgIH1cbiAgICBsZXQgcmVhZGVyID0gbmV3IEJ5dGVSZWFkZXIoQnVmZmVyLmZyb20oYm9keSwgXCJiYXNlNjRcIikpO1xuICAgIGlmIChyZWFkZXIucmVhZEJ5dGVzKE1BR0lDLmxlbmd0aCkudG9TdHJpbmcoKSAhPT0gTUFHSUMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0aGUga2V5IHRvIHN0YXJ0IHdpdGggJHtKU09OLnN0cmluZ2lmeShNQUdJQyl9YCk7XG4gICAgfVxuICAgIGxldCBjaXBoZXJOYW1lID0gcmVhZGVyLnJlYWRTdHJpbmcoKS50b1N0cmluZygpO1xuICAgIGxldCBrZGZOYW1lID0gcmVhZGVyLnJlYWRTdHJpbmcoKS50b1N0cmluZygpO1xuICAgIHJlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgaWYgKGNpcGhlck5hbWUgIT09IE5PTkUgfHwga2RmTmFtZSAhPT0gTk9ORSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRXhwZWN0ZWQgYW4gdW5lbmNyeXB0ZWQga2V5LCB3YXMgZW5jcnlwdGVkIHdpdGggJHtjaXBoZXJOYW1lfS8ke2tkZk5hbWV9LmBcbiAgICAgICAgICAgICsgYCBSZW1vdmUgdGhlIHBhc3NwaHJhc2Ugd2l0aCBcInNzaC1rZXlnZW4gLXBcIiBmaXJzdC5gXG4gICAgICAgICk7XG4gICAgfVxuICAgIGxldCBrZXlDb3VudCA9IHJlYWRlci5yZWFkVUludDMyKCk7XG4gICAgaWYgKGtleUNvdW50ICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdGhlIGtleSBmaWxlIHRvIGhvbGQgb25lIGtleSwgaGVsZCAke2tleUNvdW50fWApO1xuICAgIH1cbiAgICByZWFkZXIucmVhZFN0cmluZygpO1xuXG4gICAgbGV0IHByaXZhdGVTZWN0aW9uID0gbmV3IEJ5dGVSZWFkZXIocmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgbGV0IGNoZWNrT25lID0gcHJpdmF0ZVNlY3Rpb24ucmVhZFVJbnQzMigpO1xuICAgIGxldCBjaGVja1R3byA9IHByaXZhdGVTZWN0aW9uLnJlYWRVSW50MzIoKTtcbiAgICBpZiAoY2hlY2tPbmUgIT09IGNoZWNrVHdvKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdGhlIGtleSdzIHR3byBjaGVjayB2YWx1ZXMgdG8gbWF0Y2gsIHdlcmUgJHtjaGVja09uZX0gYW5kICR7Y2hlY2tUd299YCk7XG4gICAgfVxuICAgIGxldCBrZXlUeXBlID0gcHJpdmF0ZVNlY3Rpb24ucmVhZFN0cmluZygpLnRvU3RyaW5nKCk7XG4gICAgaWYgKGtleVR5cGUgIT09IEtFWV9UWVBFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYW4gJHtLRVlfVFlQRX0ga2V5LCB3YXMgJHtrZXlUeXBlfWApO1xuICAgIH1cbiAgICBwcml2YXRlU2VjdGlvbi5yZWFkU3RyaW5nKCk7XG4gICAgLy8gT3BlblNTSCBzdG9yZXMgdGhlIHNlZWQgYW5kIHRoZSBwdWJsaWMga2V5IHRvZ2V0aGVyIGluIHRoZSBwcml2YXRlIGZpZWxkLlxuICAgIGxldCBwcml2YXRlVmFsdWUgPSBwcml2YXRlU2VjdGlvbi5yZWFkU3RyaW5nKCk7XG4gICAgaWYgKHByaXZhdGVWYWx1ZS5sZW5ndGggIT09IFNFRURfTEVOR1RIICsgUFVCTElDX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgJHtTRUVEX0xFTkdUSCArIFBVQkxJQ19MRU5HVEh9IGJ5dGUgcHJpdmF0ZSB2YWx1ZSwgd2FzICR7cHJpdmF0ZVZhbHVlLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2VlZDogcHJpdmF0ZVZhbHVlLnN1YmFycmF5KDAsIFNFRURfTEVOR1RIKSxcbiAgICAgICAgcHVibGljS2V5OiBwcml2YXRlVmFsdWUuc3ViYXJyYXkoU0VFRF9MRU5HVEgpLFxuICAgICAgICBjb21tZW50OiBwcml2YXRlU2VjdGlvbi5yZWFkU3RyaW5nKCkudG9TdHJpbmcoKSxcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0T3BlblNTSFByaXZhdGVLZXkoY29uZmlnOiB7IHNlZWQ6IEJ1ZmZlcjsgY29tbWVudDogc3RyaW5nIH0pIHtcbiAgICBsZXQgeyBzZWVkLCBjb21tZW50IH0gPSBjb25maWc7XG4gICAgbGV0IHB1YmxpY0tleSA9IHB1YmxpY0tleUZyb21TZWVkKHNlZWQpO1xuICAgIGxldCBwdWJsaWNCbG9iID0gQnVmZmVyLmNvbmNhdChbd3JpdGVTdHJpbmcoS0VZX1RZUEUpLCB3cml0ZVN0cmluZyhwdWJsaWNLZXkpXSk7XG5cbiAgICAvLyBUaGUgY2hlY2sgdmFsdWUgb25seSBwcm92ZXMgYSBwYXNzcGhyYXNlIGRlY3J5cHRlZCBjb3JyZWN0bHksIGFuZCBub3RoaW5nIGhlcmUgaXMgZW5jcnlwdGVkLlxuICAgIC8vIFRha2luZyBpdCBmcm9tIHRoZSBzZWVkIGtlZXBzIHRoZSBzYW1lIGlucHV0IHByb2R1Y2luZyB0aGUgc2FtZSBmaWxlLCBzbyBkZXJpdmluZyBhIGtleSB0d2ljZVxuICAgIC8vIGlzIHNvbWV0aGluZyB5b3UgY2FuIGNvbXBhcmUgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHRoYXQgbG9va3MgZGlmZmVyZW50IGV2ZXJ5IHRpbWUuXG4gICAgbGV0IGNoZWNrID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHNlZWQpLmRpZ2VzdCgpLnJlYWRVSW50MzJCRSgwKTtcbiAgICBsZXQgcHJpdmF0ZVNlY3Rpb24gPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgd3JpdGVVSW50MzIoY2hlY2spLFxuICAgICAgICB3cml0ZVVJbnQzMihjaGVjayksXG4gICAgICAgIHdyaXRlU3RyaW5nKEtFWV9UWVBFKSxcbiAgICAgICAgd3JpdGVTdHJpbmcocHVibGljS2V5KSxcbiAgICAgICAgd3JpdGVTdHJpbmcoQnVmZmVyLmNvbmNhdChbc2VlZCwgcHVibGljS2V5XSkpLFxuICAgICAgICB3cml0ZVN0cmluZyhjb21tZW50KSxcbiAgICBdKTtcbiAgICBsZXQgcGFkZGluZ0xlbmd0aCA9IChQQURESU5HX0JMT0NLIC0gcHJpdmF0ZVNlY3Rpb24ubGVuZ3RoICUgUEFERElOR19CTE9DSykgJSBQQURESU5HX0JMT0NLO1xuICAgIGxldCBwYWRkaW5nID0gQnVmZmVyLmZyb20oQXJyYXkuZnJvbSh7IGxlbmd0aDogcGFkZGluZ0xlbmd0aCB9LCAodW51c2VkLCBpbmRleCkgPT4gaW5kZXggKyAxKSk7XG5cbiAgICBsZXQgY29udGVudHMgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgQnVmZmVyLmZyb20oTUFHSUMpLFxuICAgICAgICB3cml0ZVN0cmluZyhOT05FKSxcbiAgICAgICAgd3JpdGVTdHJpbmcoTk9ORSksXG4gICAgICAgIHdyaXRlU3RyaW5nKFwiXCIpLFxuICAgICAgICB3cml0ZVVJbnQzMigxKSxcbiAgICAgICAgd3JpdGVTdHJpbmcocHVibGljQmxvYiksXG4gICAgICAgIHdyaXRlU3RyaW5nKEJ1ZmZlci5jb25jYXQoW3ByaXZhdGVTZWN0aW9uLCBwYWRkaW5nXSkpLFxuICAgIF0pO1xuICAgIGxldCBlbmNvZGVkID0gY29udGVudHMudG9TdHJpbmcoXCJiYXNlNjRcIikubWF0Y2gobmV3IFJlZ0V4cChgLnsxLCR7UEVNX0xJTkVfTEVOR1RIfX1gLCBcImdcIikpIHx8IFtdO1xuICAgIHJldHVybiBgJHtQUklWQVRFX0hFQURFUn1cXG4ke2VuY29kZWQuam9pbihcIlxcblwiKX1cXG4ke1BSSVZBVEVfRk9PVEVSfVxcbmA7XG59XG5cbi8qKiBUaGUgc2luZ2xlIGxpbmUgZm9ybSwgYXMgaXQgYXBwZWFycyBpbiBhdXRob3JpemVkX2tleXMgYW5kIGluIGEgLnB1YiBmaWxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFB1YmxpY0tleUxpbmUoY29uZmlnOiB7IHB1YmxpY0tleTogQnVmZmVyOyBjb21tZW50OiBzdHJpbmcgfSkge1xuICAgIGxldCB7IHB1YmxpY0tleSwgY29tbWVudCB9ID0gY29uZmlnO1xuICAgIGxldCBibG9iID0gQnVmZmVyLmNvbmNhdChbd3JpdGVTdHJpbmcoS0VZX1RZUEUpLCB3cml0ZVN0cmluZyhwdWJsaWNLZXkpXSk7XG4gICAgcmV0dXJuIGAke0tFWV9UWVBFfSAke2Jsb2IudG9TdHJpbmcoXCJiYXNlNjRcIil9JHtjb21tZW50ICYmIGAgJHtjb21tZW50fWAgfHwgXCJcIn1cXG5gO1xufVxuIl19
|
|
155
|
-
/* _JS_SOURCE_HASH = "
|
|
155
|
+
/* _JS_SOURCE_HASH = "ab395bd96d551a8884e2fd8ff9691930f61689b173f4743c6a4c0d6bb7fa0a60"; */
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
-
//exports.main = void 0;
|
|
4
3
|
const runPromise_1 = require("socket-function/src/runPromise");
|
|
5
4
|
const certs_1 = require("../../misc/https/certs");
|
|
6
5
|
const ownIPs_1 = require("../../misc/ownIPs");
|
|
@@ -97,8 +96,11 @@ async function main() {
|
|
|
97
96
|
await (0, runPromise_1.runPromise)(`git add -A`, { cwd: repoPath });
|
|
98
97
|
await (0, runPromise_1.runPromise)(`git commit -m "${COMMIT_MESSAGE}"`, { cwd: repoPath });
|
|
99
98
|
await (0, runPromise_1.runPromise)(`git push`, { cwd: repoPath });
|
|
100
|
-
console.log(`\nSigned, committed and pushed. Machines pick it up
|
|
99
|
+
console.log(`\nSigned, committed and pushed. Machines will pick it up the next time they poll, within 60 seconds.`);
|
|
101
100
|
}
|
|
102
|
-
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkTWFjaGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFkZE1hY2hpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0RBQTREO0FBQzVELGtEQUF5RTtBQUN6RSw4Q0FBOEM7QUFDOUMseURBQTZEO0FBQzdELHdEQUFvRDtBQUNwRCx5Q0FBa0Y7QUFFbEYsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzFCLE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDO0FBQzVDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDO0FBQ3JDLE1BQU0sS0FBSyxHQUFHOzhCQUNnQixXQUFXO3lDQUNBLFdBQVc7d0RBQ0ksV0FBVzs7Ozs7Ozs7Ozs7YUFXdEQsV0FBVzttQkFDTCxDQUFDO0FBRXBCLFNBQVMsU0FBUyxDQUFDLElBQWM7SUFDN0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLENBQUM7SUFDeEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQWMsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNyRixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNm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RUFBRSxDQUFDLENBQUM7SUFDN0IsTUFBTSxJQUFBLHVCQUFVLEVBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsTUFBTSxJQUFBLHVCQUFVLEVBQUMsa0JBQWtCLGNBQWMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekUsTUFBTSxJQUFBLHVCQUFVLEVBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO0FBQ3JGLENBQUM7QUFuQ0Qsb0JBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcnVuUHJvbWlzZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL3J1blByb21pc2VcIjtcbmltcG9ydCB7IGdldE93bk1hY2hpbmVJZCwgbG9hZElkZW50aXR5Q0EgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgZ2V0T3duSVBzIH0gZnJvbSBcIi4uLy4uL21pc2Mvb3duSVBzXCI7XG5pbXBvcnQgeyByZXNvbHZlS2V5c1JlcG8gfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMva2V5c1JlcG9cIjtcbmltcG9ydCB7IHNpZ25SZXBvIH0gZnJvbSBcIi4uL3NpZ25lZEZpbGVzL3NpZ25GaWxlc1wiO1xuaW1wb3J0IHsgZ2V0TWFjaGluZXMsIGdldE9yQ3JlYXRlUmVtb3RlTWFjaGluZUlkLCBzZXRNYWNoaW5lcyB9IGZyb20gXCIuL21hY2hpbmVzXCI7XG5cbmNvbnN0IEdJVF9LRVlXT1JEID0gXCJnaXRcIjtcbmNvbnN0IENPTU1JVF9NRVNTQUdFID0gXCJ0cnVzdGluZyBhIG1hY2hpbmVcIjtcbmNvbnN0IE1BQ0hJTkVfSUQgPSAvXmJbYS16Mi03XXsyMH0kLztcbmNvbnN0IFVTQUdFID0gYFVzYWdlOlxuICB5YXJuIGFkZG1hY2hpbmUgPGRvbWFpbj4gWyR7R0lUX0tFWVdPUkR9XVxuICB5YXJuIGFkZG1hY2hpbmUgPGRvbWFpbj4gPHNzaC1ob3N0PiBbJHtHSVRfS0VZV09SRH1dXG4gIHlhcm4gYWRkbWFjaGluZSA8ZG9tYWluPiA8bWFjaGluZS1pZD4gPGlwPiBbaXAuLi5dIFske0dJVF9LRVlXT1JEfV1cblxuVGhlIGRvbWFpbiBpcyByZXF1aXJlZDogYSBtYWNoaW5lIGhhcyBhIGRpZmZlcmVudCBpZGVudGl0eSwgYW5kIHNvIGEgZGlmZmVyZW50IG1hY2hpbmUgaWQsIHVuZGVyXG5ldmVyeSBkb21haW4gaXQgcnVucyB1bmRlciwgc28gdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBcInRoaXMgbWFjaGluZVwiIHdpdGhvdXQgb25lLlxuXG5XaXRoIG5vdGhpbmcgZWxzZSBpdCBhZGRzIHRoaXMgbWFjaGluZSwgd2l0aCBpdHMgb3duIGFkZHJlc3Nlcy4gV2l0aCBhbiBzc2ggaG9zdCBpdCBhc2tzIHRoYXRcbm1hY2hpbmUgZm9yIGl0cyBpZGVudGl0eSB1bmRlciB0aGF0IGRvbWFpbiwgZ2l2ZXMgaXQgb25lIGlmIGl0IGhhcyBub25lLCBhbmQgYWRkcyBpdCB1bmRlciB0aGF0XG5hZGRyZXNzLiBXaXRoIGEgbWFjaGluZSBpZCBpdCBhZGRzIGV4YWN0bHkgdGhhdCBtYWNoaW5lIGF0IGV4YWN0bHkgdGhvc2UgYWRkcmVzc2VzLCB3aXRob3V0XG50YWxraW5nIHRvIGFueXRoaW5nLlxuXG5JdCBlZGl0cyB0aGUga2V5cyByZXBvIHRoaXMgbWFjaGluZSByZWFkcywgd2hlcmV2ZXIgdGhhdCBpcywgbm90IHdoYXRldmVyIGRpcmVjdG9yeSB0aGlzIHdhcyBydW5cbmZyb20uIFdpdGggJHtHSVRfS0VZV09SRH0gaXQgc2lnbnMsIGNvbW1pdHMgYW5kIHB1c2hlczsgd2l0aG91dCBpdCBub3RoaW5nIGVsc2Ugd2lsbCBiZWxpZXZlIGFueSBvZlxudGhpcyB1bnRpbCB5b3UgZG8uYDtcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHB1c2hUb0dpdCA9IGFyZ3YuaW5jbHVkZXMoR0lUX0tFWVdPUkQpO1xuICAgIGxldCBbZG9tYWluLCBzZWNvbmQsIC4uLnJlc3RdID0gYXJndi5maWx0ZXIoYXJnID0+IGFyZyAhPT0gR0lUX0tFWVdPUkQpO1xuICAgIGlmICghZG9tYWluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBkb21haW5cXG4ke1VTQUdFfWApO1xuICAgIH1cbiAgICBpZiAoIXNlY29uZCkge1xuICAgICAgICByZXR1cm4geyBkb21haW4sIGhvc3Q6IFwiXCIsIG1hY2hpbmVJZDogXCJcIiwgYWRkcmVzc2VzOiBbXSBhcyBzdHJpbmdbXSwgcHVzaFRvR2l0IH07XG4gICAgfVxuICAgIGlmIChNQUNISU5FX0lELnRlc3Qoc2Vjb25kKSkge1xuICAgICAgICBpZiAoIXJlc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhZGRyZXNzIGZvciAke3NlY29uZH0sIHdhcyBub25lXFxuJHtVU0FHRX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb21haW4sIGhvc3Q6IFwiXCIsIG1hY2hpbmVJZDogc2Vjb25kLCBhZGRyZXNzZXM6IHJlc3QsIHB1c2hUb0dpdCB9O1xuICAgIH1cbiAgICBpZiAocmVzdC5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEV4cGVjdGVkIG5vdGhpbmcgYWZ0ZXIgdGhlIHNzaCBob3N0ICR7c2Vjb25kfSwgd2FzICR7cmVzdC5qb2luKFwiIFwiKX0uXFxuYFxuICAgICAgICAgICAgKyBgQWRkcmVzc2VzIGFyZSBvbmx5IGdpdmVuIGFsb25nc2lkZSBhIG1hY2hpbmUgaWQuXFxuJHtVU0FHRX1gXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7IGRvbWFpbiwgaG9zdDogc2Vjb25kLCBtYWNoaW5lSWQ6IFwiXCIsIGFkZHJlc3NlczogW10gYXMgc3RyaW5nW10sIHB1c2hUb0dpdCB9O1xufVxuXG4vKiogV2hpY2ggbWFjaGluZSB0byB0cnVzdCwgYW5kIGZyb20gd2hpY2ggYWRkcmVzc2VzLiBBIG5hbWVkIG1hY2hpbmUgYW5kIGl0cyBhZGRyZXNzZXMgYXMgZ2l2ZW4sIGFcbiAgICBtYWNoaW5lIHJlYWNoZWQgb3ZlciBzc2ggYXQgdGhlIGFkZHJlc3MgaXQgd2FzIG5hbWVkIGJ5LCBvciB0aGlzIG1hY2hpbmUgYXQgaXRzIG93biBhZGRyZXNzZXMuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlTWFjaGluZShjb25maWc6IHsgZG9tYWluOiBzdHJpbmc7IGhvc3Q6IHN0cmluZzsgbWFjaGluZUlkOiBzdHJpbmc7IGFkZHJlc3Nlczogc3RyaW5nW10gfSkge1xuICAgIGxldCB7IGRvbWFpbiwgaG9zdCwgbWFjaGluZUlkLCBhZGRyZXNzZXMgfSA9IGNvbmZpZztcbiAgICBpZiAobWFjaGluZUlkKSB7XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZCwgYWRkcmVzc2VzIH07XG4gICAgfVxuICAgIGlmIChob3N0KSB7XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZDogYXdhaXQgZ2V0T3JDcmVhdGVSZW1vdGVNYWNoaW5lSWQoaG9zdCwgZG9tYWluKSwgYWRkcmVzc2VzOiBbaG9zdF0gfTtcbiAgICB9XG4gICAgYXdhaXQgbG9hZElkZW50aXR5Q0EoZG9tYWluKTtcbiAgICBsZXQgb3duQWRkcmVzc2VzID0gYXdhaXQgZ2V0T3duSVBzKCk7XG4gICAgaWYgKCFvd25BZGRyZXNzZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdGhpcyBtYWNoaW5lIHRvIGhhdmUgYW4gYWRkcmVzcyBhbnl0aGluZyBlbHNlIGNhbiBzZWUsIGl0IGhhcyBub25lYCk7XG4gICAgfVxuICAgIHJldHVybiB7IG1hY2hpbmVJZDogZ2V0T3duTWFjaGluZUlkKGRvbWFpbiksIGFkZHJlc3Nlczogb3duQWRkcmVzc2VzIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICAgIGxldCB7IGRvbWFpbiwgaG9zdCwgbWFjaGluZUlkLCBhZGRyZXNzZXMsIHB1c2hUb0dpdCB9ID0gcGFyc2VBcmdzKHByb2Nlc3MuYXJndi5zbGljZSgyKSk7XG4gICAgbGV0IHsgcmVwb1BhdGggfSA9IGF3YWl0IHJlc29sdmVLZXlzUmVwbygpO1xuICAgIGxldCB0YXJnZXQgPSBhd2FpdCByZXNvbHZlTWFjaGluZSh7IGRvbWFpbiwgaG9zdCwgbWFjaGluZUlkLCBhZGRyZXNzZXMgfSk7XG5cbiAgICBsZXQgbWFjaGluZXMgPSBhd2FpdCBnZXRNYWNoaW5lcyhyZXBvUGF0aCk7XG4gICAgbGV0IGV4aXN0aW5nID0gbWFjaGluZXMuZmluZChtYWNoaW5lID0+IG1hY2hpbmUubWFjaGluZUlkID09PSB0YXJnZXQubWFjaGluZUlkKTtcbiAgICBsZXQgaXBzID0gWy4uLihleGlzdGluZz8uaXBzIHx8IFtdKV07XG4gICAgbGV0IGFkZGVkID0gdGFyZ2V0LmFkZHJlc3Nlcy5maWx0ZXIoYWRkcmVzcyA9PiAhaXBzLmluY2x1ZGVzKGFkZHJlc3MpKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgZXhpc3RpbmcuaXBzID0gWy4uLmlwcywgLi4uYWRkZWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1hY2hpbmVzLnB1c2goeyBtYWNoaW5lSWQ6IHRhcmdldC5tYWNoaW5lSWQsIGlwczogWy4uLmFkZGVkXSwgYWRkZWRBdDogXCJcIiB9KTtcbiAgICB9XG4gICAgYXdhaXQgc2V0TWFjaGluZXMoeyByZXBvUGF0aCwgbWFjaGluZXMgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhgXFxuVHJ1c3RpbmcgbWFjaGluZSAke3RhcmdldC5tYWNoaW5lSWR9YCk7XG4gICAgY29uc29sZS5sb2coYEFsbG93aW5nIElQICR7Wy4uLmlwcywgLi4uYWRkZWRdLmpvaW4oXCIsIFwiKX1gKTtcbiAgICBpZiAoYWRkZWQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIGFkZGVkIHRvIG1hY2hpbmVzLyR7dGFyZ2V0Lm1hY2hpbmVJZH0uanNvbjogJHthZGRlZC5qb2luKFwiLCBcIil9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgYWxyZWFkeSBhbGxvd2VkIGZyb20gJHt0YXJnZXQuYWRkcmVzc2VzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYCAgaW4gJHtyZXBvUGF0aH1gKTtcblxuICAgIGlmICghcHVzaFRvR2l0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5Ob3RoaW5nIGJlbGlldmVzIHRoaXMgdW50aWwgaXQgaXMgc2lnbmVkLiBJbiB0aGF0IHJlcG8sIHJ1bjpgKTtcbiAgICAgICAgY29uc29sZS5sb2coYFxcYFxcYFxcYFxcbnlhcm4gc2lnbmZpbGVzICR7R0lUX0tFWVdPUkR9XFxuXFxgXFxgXFxgYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgc2lnblJlcG8oeyByZXBvUGF0aCB9KTtcbiAgICBhd2FpdCBydW5Qcm9taXNlKGBnaXQgYWRkIC1BYCwgeyBjd2Q6IHJlcG9QYXRoIH0pO1xuICAgIGF3YWl0IHJ1blByb21pc2UoYGdpdCBjb21taXQgLW0gXCIke0NPTU1JVF9NRVNTQUdFfVwiYCwgeyBjd2Q6IHJlcG9QYXRoIH0pO1xuICAgIGF3YWl0IHJ1blByb21pc2UoYGdpdCBwdXNoYCwgeyBjd2Q6IHJlcG9QYXRoIH0pO1xuICAgIGNvbnNvbGUubG9nKGBcXG5TaWduZWQsIGNvbW1pdHRlZCBhbmQgcHVzaGVkLiBNYWNoaW5lcyBwaWNrIGl0IHVwIGFzIHRoZXkgc3luYy5gKTtcbn1cbiJdfQ==
|
|
104
|
-
|
|
101
|
+
main().catch(e => {
|
|
102
|
+
console.error(`${e}`);
|
|
103
|
+
process.exitCode = 1;
|
|
104
|
+
}).finally(() => process.exit());
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkTWFjaGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFkZE1hY2hpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrREFBNEQ7QUFDNUQsa0RBQXlFO0FBQ3pFLDhDQUE4QztBQUM5Qyx5REFBNkQ7QUFDN0Qsd0RBQW9EO0FBQ3BELHlDQUFrRjtBQUVsRixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDMUIsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUM7QUFDNUMsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7QUFDckMsTUFBTSxLQUFLLEdBQUc7OEJBQ2dCLFdBQVc7eUNBQ0EsV0FBVzt3REFDSSxXQUFXOzs7Ozs7Ozs7OzthQVd0RCxXQUFXO21CQUNMLENBQUM7QUFFcEIsU0FBUyxTQUFTLENBQUMsSUFBYztJQUM3QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQztJQUN4RSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDVixPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBYyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3JGLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2Ys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QUUsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sSUFBQSx1QkFBVSxFQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sSUFBQSx1QkFBVSxFQUFDLGtCQUFrQixjQUFjLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sSUFBQSx1QkFBVSxFQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsc0dBQXNHLENBQUMsQ0FBQztBQUN4SCxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcnVuUHJvbWlzZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL3J1blByb21pc2VcIjtcbmltcG9ydCB7IGdldE93bk1hY2hpbmVJZCwgbG9hZElkZW50aXR5Q0EgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgZ2V0T3duSVBzIH0gZnJvbSBcIi4uLy4uL21pc2Mvb3duSVBzXCI7XG5pbXBvcnQgeyByZXNvbHZlS2V5c1JlcG8gfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMva2V5c1JlcG9cIjtcbmltcG9ydCB7IHNpZ25SZXBvIH0gZnJvbSBcIi4uL3NpZ25lZEZpbGVzL3NpZ25GaWxlc1wiO1xuaW1wb3J0IHsgZ2V0TWFjaGluZXMsIGdldE9yQ3JlYXRlUmVtb3RlTWFjaGluZUlkLCBzZXRNYWNoaW5lcyB9IGZyb20gXCIuL21hY2hpbmVzXCI7XG5cbmNvbnN0IEdJVF9LRVlXT1JEID0gXCJnaXRcIjtcbmNvbnN0IENPTU1JVF9NRVNTQUdFID0gXCJ0cnVzdGluZyBhIG1hY2hpbmVcIjtcbmNvbnN0IE1BQ0hJTkVfSUQgPSAvXmJbYS16Mi03XXsyMH0kLztcbmNvbnN0IFVTQUdFID0gYFVzYWdlOlxuICB5YXJuIGFkZG1hY2hpbmUgPGRvbWFpbj4gWyR7R0lUX0tFWVdPUkR9XVxuICB5YXJuIGFkZG1hY2hpbmUgPGRvbWFpbj4gPHNzaC1ob3N0PiBbJHtHSVRfS0VZV09SRH1dXG4gIHlhcm4gYWRkbWFjaGluZSA8ZG9tYWluPiA8bWFjaGluZS1pZD4gPGlwPiBbaXAuLi5dIFske0dJVF9LRVlXT1JEfV1cblxuVGhlIGRvbWFpbiBpcyByZXF1aXJlZDogYSBtYWNoaW5lIGhhcyBhIGRpZmZlcmVudCBpZGVudGl0eSwgYW5kIHNvIGEgZGlmZmVyZW50IG1hY2hpbmUgaWQsIHVuZGVyXG5ldmVyeSBkb21haW4gaXQgcnVucyB1bmRlciwgc28gdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBcInRoaXMgbWFjaGluZVwiIHdpdGhvdXQgb25lLlxuXG5XaXRoIG5vdGhpbmcgZWxzZSBpdCBhZGRzIHRoaXMgbWFjaGluZSwgd2l0aCBpdHMgb3duIGFkZHJlc3Nlcy4gV2l0aCBhbiBzc2ggaG9zdCBpdCBhc2tzIHRoYXRcbm1hY2hpbmUgZm9yIGl0cyBpZGVudGl0eSB1bmRlciB0aGF0IGRvbWFpbiwgZ2l2ZXMgaXQgb25lIGlmIGl0IGhhcyBub25lLCBhbmQgYWRkcyBpdCB1bmRlciB0aGF0XG5hZGRyZXNzLiBXaXRoIGEgbWFjaGluZSBpZCBpdCBhZGRzIGV4YWN0bHkgdGhhdCBtYWNoaW5lIGF0IGV4YWN0bHkgdGhvc2UgYWRkcmVzc2VzLCB3aXRob3V0XG50YWxraW5nIHRvIGFueXRoaW5nLlxuXG5JdCBlZGl0cyB0aGUga2V5cyByZXBvIHRoaXMgbWFjaGluZSByZWFkcywgd2hlcmV2ZXIgdGhhdCBpcywgbm90IHdoYXRldmVyIGRpcmVjdG9yeSB0aGlzIHdhcyBydW5cbmZyb20uIFdpdGggJHtHSVRfS0VZV09SRH0gaXQgc2lnbnMsIGNvbW1pdHMgYW5kIHB1c2hlczsgd2l0aG91dCBpdCBub3RoaW5nIGVsc2Ugd2lsbCBiZWxpZXZlIGFueSBvZlxudGhpcyB1bnRpbCB5b3UgZG8uYDtcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHB1c2hUb0dpdCA9IGFyZ3YuaW5jbHVkZXMoR0lUX0tFWVdPUkQpO1xuICAgIGxldCBbZG9tYWluLCBzZWNvbmQsIC4uLnJlc3RdID0gYXJndi5maWx0ZXIoYXJnID0+IGFyZyAhPT0gR0lUX0tFWVdPUkQpO1xuICAgIGlmICghZG9tYWluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBkb21haW5cXG4ke1VTQUdFfWApO1xuICAgIH1cbiAgICBpZiAoIXNlY29uZCkge1xuICAgICAgICByZXR1cm4geyBkb21haW4sIGhvc3Q6IFwiXCIsIG1hY2hpbmVJZDogXCJcIiwgYWRkcmVzc2VzOiBbXSBhcyBzdHJpbmdbXSwgcHVzaFRvR2l0IH07XG4gICAgfVxuICAgIGlmIChNQUNISU5FX0lELnRlc3Qoc2Vjb25kKSkge1xuICAgICAgICBpZiAoIXJlc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhZGRyZXNzIGZvciAke3NlY29uZH0sIHdhcyBub25lXFxuJHtVU0FHRX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb21haW4sIGhvc3Q6IFwiXCIsIG1hY2hpbmVJZDogc2Vjb25kLCBhZGRyZXNzZXM6IHJlc3QsIHB1c2hUb0dpdCB9O1xuICAgIH1cbiAgICBpZiAocmVzdC5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEV4cGVjdGVkIG5vdGhpbmcgYWZ0ZXIgdGhlIHNzaCBob3N0ICR7c2Vjb25kfSwgd2FzICR7cmVzdC5qb2luKFwiIFwiKX0uXFxuYFxuICAgICAgICAgICAgKyBgQWRkcmVzc2VzIGFyZSBvbmx5IGdpdmVuIGFsb25nc2lkZSBhIG1hY2hpbmUgaWQuXFxuJHtVU0FHRX1gXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7IGRvbWFpbiwgaG9zdDogc2Vjb25kLCBtYWNoaW5lSWQ6IFwiXCIsIGFkZHJlc3NlczogW10gYXMgc3RyaW5nW10sIHB1c2hUb0dpdCB9O1xufVxuXG4vKiogV2hpY2ggbWFjaGluZSB0byB0cnVzdCwgYW5kIGZyb20gd2hpY2ggYWRkcmVzc2VzLiBBIG5hbWVkIG1hY2hpbmUgYW5kIGl0cyBhZGRyZXNzZXMgYXMgZ2l2ZW4sIGFcbiAgICBtYWNoaW5lIHJlYWNoZWQgb3ZlciBzc2ggYXQgdGhlIGFkZHJlc3MgaXQgd2FzIG5hbWVkIGJ5LCBvciB0aGlzIG1hY2hpbmUgYXQgaXRzIG93biBhZGRyZXNzZXMuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlTWFjaGluZShjb25maWc6IHsgZG9tYWluOiBzdHJpbmc7IGhvc3Q6IHN0cmluZzsgbWFjaGluZUlkOiBzdHJpbmc7IGFkZHJlc3Nlczogc3RyaW5nW10gfSkge1xuICAgIGxldCB7IGRvbWFpbiwgaG9zdCwgbWFjaGluZUlkLCBhZGRyZXNzZXMgfSA9IGNvbmZpZztcbiAgICBpZiAobWFjaGluZUlkKSB7XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZCwgYWRkcmVzc2VzIH07XG4gICAgfVxuICAgIGlmIChob3N0KSB7XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZDogYXdhaXQgZ2V0T3JDcmVhdGVSZW1vdGVNYWNoaW5lSWQoaG9zdCwgZG9tYWluKSwgYWRkcmVzc2VzOiBbaG9zdF0gfTtcbiAgICB9XG4gICAgYXdhaXQgbG9hZElkZW50aXR5Q0EoZG9tYWluKTtcbiAgICBsZXQgb3duQWRkcmVzc2VzID0gYXdhaXQgZ2V0T3duSVBzKCk7XG4gICAgaWYgKCFvd25BZGRyZXNzZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdGhpcyBtYWNoaW5lIHRvIGhhdmUgYW4gYWRkcmVzcyBhbnl0aGluZyBlbHNlIGNhbiBzZWUsIGl0IGhhcyBub25lYCk7XG4gICAgfVxuICAgIHJldHVybiB7IG1hY2hpbmVJZDogZ2V0T3duTWFjaGluZUlkKGRvbWFpbiksIGFkZHJlc3Nlczogb3duQWRkcmVzc2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gICAgbGV0IHsgZG9tYWluLCBob3N0LCBtYWNoaW5lSWQsIGFkZHJlc3NlcywgcHVzaFRvR2l0IH0gPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKTtcbiAgICBsZXQgeyByZXBvUGF0aCB9ID0gYXdhaXQgcmVzb2x2ZUtleXNSZXBvKCk7XG4gICAgbGV0IHRhcmdldCA9IGF3YWl0IHJlc29sdmVNYWNoaW5lKHsgZG9tYWluLCBob3N0LCBtYWNoaW5lSWQsIGFkZHJlc3NlcyB9KTtcblxuICAgIGxldCBtYWNoaW5lcyA9IGF3YWl0IGdldE1hY2hpbmVzKHJlcG9QYXRoKTtcbiAgICBsZXQgZXhpc3RpbmcgPSBtYWNoaW5lcy5maW5kKG1hY2hpbmUgPT4gbWFjaGluZS5tYWNoaW5lSWQgPT09IHRhcmdldC5tYWNoaW5lSWQpO1xuICAgIGxldCBpcHMgPSBbLi4uKGV4aXN0aW5nPy5pcHMgfHwgW10pXTtcbiAgICBsZXQgYWRkZWQgPSB0YXJnZXQuYWRkcmVzc2VzLmZpbHRlcihhZGRyZXNzID0+ICFpcHMuaW5jbHVkZXMoYWRkcmVzcykpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBleGlzdGluZy5pcHMgPSBbLi4uaXBzLCAuLi5hZGRlZF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbWFjaGluZXMucHVzaCh7IG1hY2hpbmVJZDogdGFyZ2V0Lm1hY2hpbmVJZCwgaXBzOiBbLi4uYWRkZWRdLCBhZGRlZEF0OiBcIlwiIH0pO1xuICAgIH1cbiAgICBhd2FpdCBzZXRNYWNoaW5lcyh7IHJlcG9QYXRoLCBtYWNoaW5lcyB9KTtcblxuICAgIGNvbnNvbGUubG9nKGBcXG5UcnVzdGluZyBtYWNoaW5lICR7dGFyZ2V0Lm1hY2hpbmVJZH1gKTtcbiAgICBjb25zb2xlLmxvZyhgQWxsb3dpbmcgSVAgJHtbLi4uaXBzLCAuLi5hZGRlZF0uam9pbihcIiwgXCIpfWApO1xuICAgIGlmIChhZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgYWRkZWQgdG8gbWFjaGluZXMvJHt0YXJnZXQubWFjaGluZUlkfS5qc29uOiAke2FkZGVkLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgICBhbHJlYWR5IGFsbG93ZWQgZnJvbSAke3RhcmdldC5hZGRyZXNzZXMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgICBpbiAke3JlcG9QYXRofWApO1xuXG4gICAgaWYgKCFwdXNoVG9HaXQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcbk5vdGhpbmcgYmVsaWV2ZXMgdGhpcyB1bnRpbCBpdCBpcyBzaWduZWQuIEluIHRoYXQgcmVwbywgcnVuOmApO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxgXFxgXFxgXFxueWFybiBzaWduZmlsZXMgJHtHSVRfS0VZV09SRH1cXG5cXGBcXGBcXGBgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBzaWduUmVwbyh7IHJlcG9QYXRoIH0pO1xuICAgIGF3YWl0IHJ1blByb21pc2UoYGdpdCBhZGQgLUFgLCB7IGN3ZDogcmVwb1BhdGggfSk7XG4gICAgYXdhaXQgcnVuUHJvbWlzZShgZ2l0IGNvbW1pdCAtbSBcIiR7Q09NTUlUX01FU1NBR0V9XCJgLCB7IGN3ZDogcmVwb1BhdGggfSk7XG4gICAgYXdhaXQgcnVuUHJvbWlzZShgZ2l0IHB1c2hgLCB7IGN3ZDogcmVwb1BhdGggfSk7XG4gICAgY29uc29sZS5sb2coYFxcblNpZ25lZCwgY29tbWl0dGVkIGFuZCBwdXNoZWQuIE1hY2hpbmVzIHdpbGwgcGljayBpdCB1cCB0aGUgbmV4dCB0aW1lIHRoZXkgcG9sbCwgd2l0aGluIDYwIHNlY29uZHMuYCk7XG59XG5cbm1haW4oKS5jYXRjaChlID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGAke2V9YCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG59KS5maW5hbGx5KCgpID0+IHByb2Nlc3MuZXhpdCgpKTtcbiJdfQ=//=
|
|
106
|
+
/* _JS_SOURCE_HASH = "0d30db51790f12419127ccd7f7fbeb58702d00f91d3c3c53817329912bba0b7b"; */
|
|
@@ -283,13 +283,14 @@ async function recordMachineRevocation(config) {
|
|
|
283
283
|
let repoPath = (0, revokeSource_1.revokeRepoPath)(sourceURL);
|
|
284
284
|
let keyPath = await (0, repoFiles_2.ensureRevokeKey)(sourceURL);
|
|
285
285
|
let revocationId = (0, revocation_1.newRevocationId)(machineId);
|
|
286
|
+
let revokedAt = new Date().toISOString();
|
|
286
287
|
let directory = path_1.default.join(repoPath, REVOCATIONS_DIR);
|
|
287
288
|
await promises_1.default.mkdir(directory, { recursive: true });
|
|
288
289
|
await promises_1.default.writeFile(path_1.default.join(directory, `${revocationId}.json`), JSON.stringify({
|
|
289
290
|
revocationId,
|
|
290
291
|
machineId,
|
|
291
292
|
ip,
|
|
292
|
-
revokedAt
|
|
293
|
+
revokedAt,
|
|
293
294
|
revokedBy: hostLabel,
|
|
294
295
|
reason: REVOCATION_REASON,
|
|
295
296
|
}, undefined, 4) + "\n");
|
|
@@ -304,7 +305,7 @@ async function recordMachineRevocation(config) {
|
|
|
304
305
|
console.log(`Could not push the revocation of ${machineId} from ${ip}. ${(push.stdout + push.stderr).trim()}`);
|
|
305
306
|
return false;
|
|
306
307
|
}
|
|
307
|
-
(0, readSignedRepo_1.noteRevocation)(revocationId, machineId, ip);
|
|
308
|
+
(0, readSignedRepo_1.noteRevocation)(revocationId, { identity: machineId, ip, revokedAt, revokedBy: hostLabel });
|
|
308
309
|
console.log(`Revoked ${machineId} from ${ip}, ${revocationId}`);
|
|
309
310
|
// Said by whoever wrote the revocation, once, the same as for an ssh key. Machines that only
|
|
310
311
|
// read it later say nothing, or one event would be reported by every machine that saw it.
|
|
@@ -338,8 +339,19 @@ async function isMachineAccepted(config) {
|
|
|
338
339
|
// machine in it is trusted, and a machine missing from it is either unknown or frozen.
|
|
339
340
|
let machine = (await getTrustedMachines()).find(entry => entry.machineId === machineId);
|
|
340
341
|
if (!machine) {
|
|
341
|
-
|
|
342
|
-
|
|
342
|
+
let frozen = (0, readSignedRepo_1.identityFrozenBy)(machineId);
|
|
343
|
+
if (frozen) {
|
|
344
|
+
return {
|
|
345
|
+
verdict: {
|
|
346
|
+
accepted: false,
|
|
347
|
+
reason: `Machine ${machineId} is frozen: it was used from ${frozen.ip || "an address nothing recorded"}`
|
|
348
|
+
+ `${frozen.revokedAt && `, at ${frozen.revokedAt}` || ""}`
|
|
349
|
+
+ `${frozen.revokedBy && `, noticed by ${frozen.revokedBy}` || ""}`
|
|
350
|
+
+ `, which is not an address it is allowed from (revocation ${frozen.revocationId}).`
|
|
351
|
+
+ ` To give it access again, run in the keys repo: yarn unrevoke git`,
|
|
352
|
+
},
|
|
353
|
+
froze: false,
|
|
354
|
+
};
|
|
343
355
|
}
|
|
344
356
|
return { verdict: { accepted: false, reason: `Machine ${machineId} is not trusted. ${addMachineCommand({ machineId, ip, domain })}` }, froze: false };
|
|
345
357
|
}
|
|
@@ -379,5 +391,5 @@ async function isMachineAccepted(config) {
|
|
|
379
391
|
return (await evaluate()).verdict;
|
|
380
392
|
}
|
|
381
393
|
exports.isMachineAccepted = isMachineAccepted;
|
|
382
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYWNoaW5lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBNkI7QUFDN0IsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4Qix5REFBNkQ7QUFDN0Qsa0VBQStFO0FBQy9FLG9FQUFzRTtBQUN0RSxzREFBZ0U7QUFDaEUsa0VBQXFFO0FBQ3JFLDRFQUEySTtBQUMzSSxpRUFBK0U7QUFDL0UsNERBQXlEO0FBQ3pELHNEQUF1STtBQUN2SSxrREFBaUk7QUFDakksb0RBQWlGO0FBQ2pGLHlEQUFtRDtBQUNuRCwyREFBK0Q7QUFHL0QsbUdBQW1HO0FBQ25HLGlHQUFpRztBQUNqRyxnRUFBZ0U7QUFDbkQsUUFBQSxZQUFZLEdBQUcsVUFBVSxDQUFDO0FBQ3ZDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLGlCQUFpQixHQUFHLDhDQUE4QyxDQUFDO0FBQ3pFLGdHQUFnRztBQUNoRyxtQ0FBbUM7QUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLDZGQUE2RjtBQUM3RixpR0FBaUc7QUFDakcsa0VBQWtFO0FBQ2xFLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM1QyxnR0FBZ0c7QUFDaEcsaUdBQWlHO0FBQ2pHLDBEQUEwRDtBQUMxRCxNQUFNLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDMUQsZ0dBQWdHO0FBQ2hHLGdHQUFnRztBQUNoRyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFTakMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxRQUFnQjtJQUN0QyxJQUFJLENBQUM7UUFDRCxN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aEcsNEZBQTRGO0lBQzVGLFNBQVM7SUFDVCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyw4QkFBOEIsRUFBRSxDQUFDO1FBQ3pFLHdCQUF3QixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxJQUFBLGdCQUFRLEdBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUEsY0FBUSxFQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEgsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLENBQUMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN0QyxDQUFDO0FBbkVELDhDQW1FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyByZXNvbHZlS2V5c1JlcG8gfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMva2V5c1JlcG9cIjtcbmltcG9ydCB7IHJldm9rZVJlcG8sIHN5bmNSZXBvRmlsZXMgfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMvZGFlbW9uL3JlcG9GaWxlc1wiO1xuaW1wb3J0IHsgbmV3UmV2b2NhdGlvbklkIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9yZXZvY2F0aW9uXCI7XG5pbXBvcnQgeyBydW5HaXQsIHN5bmNSZXBvIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9naXRcIjtcbmltcG9ydCB7IGVuc3VyZVJldm9rZUtleSB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5cy9kYWVtb24vcmVwb0ZpbGVzXCI7XG5pbXBvcnQgeyBpc0lkZW50aXR5RnJvemVuLCBpc1BhaXJSZXZva2VkLCBpc1BhaXJVbnJldm9rZWQsIG5vdGVSZXZvY2F0aW9uLCByZWFkU2lnbmVkUmVwbyB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5cy9kYWVtb24vcmVhZFNpZ25lZFJlcG9cIjtcbmltcG9ydCB7IHJldm9rZVJlcG9QYXRoLCByZXZva2VSZXBvVVJMIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL3Jldm9rZVNvdXJjZVwiO1xuaW1wb3J0IHsgbm90aWZ5IH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9ub3RpZnlcIjtcbmltcG9ydCB7IGFyZURpc2NvcmROb3RpZmljYXRpb25zQ29uZmlndXJlZCwgY29uZmlndXJlRGlzY29yZE5vdGlmaWNhdGlvbnMsIERFRkFVTFRfV0VCSE9PS19GSUxFX1BBVEggfSBmcm9tIFwiLi4vbm90aWZpY2F0aW9ucy9kaXNjb3JkXCI7XG5pbXBvcnQgeyBERVZfZ2V0SWRlbnRpdHlGaWxlUGF0aCwgZ2VuZXJhdGVDQSwgZ2V0TWFjaGluZUlkLCBnZXRPd25NYWNoaW5lSWQsIElkZW50aXR5U3RvcmFnZVR5cGUgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgZGVzY3JpYmVIb3N0LCBydW5PdmVyU1NILCB3cml0ZVJlbW90ZUZpbGUgfSBmcm9tIFwiLi4vaGVscGVycy9yZW1vdGVTU0hcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBydW5JbmZpbml0ZVBvbGwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgc3Bhd25Qcm9taXNlIH0gZnJvbSBcIi4uL2hlbHBlcnMvc3Bhd25cIjtcblxuLy8gV2hpY2ggbWFjaGluZXMgdGhpcyBzeXN0ZW0gdGFsa3MgdG8sIGtlcHQgaW4gdGhlIHNhbWUgcmVwbyBhcyB0aGUgc3NoIGtleXMuIFRoYXQgcmVwbyBpcyBhbHJlYWR5XG4vLyBzaWduZWQsIGFscmVhZHkgZGlzdHJpYnV0ZWQgdG8gZXZlcnkgbWFjaGluZSwgYW5kIGFscmVhZHkgaGFzIHNvbWV3aGVyZSB0byByZWNvcmQgYSByZWplY3Rpb24sXG4vLyBzbyBhIHNlY29uZCBvbmUgd291bGQgb25seSBiZSBhIHNlY29uZCB0aGluZyB0byBrZWVwIGluIHN0ZXAuXG5leHBvcnQgY29uc3QgTUFDSElORVNfRElSID0gXCJtYWNoaW5lc1wiO1xuY29uc3QgUkVWT0NBVElPTlNfRElSID0gXCJyZXZvY2F0aW9uc1wiO1xuY29uc3QgUkVWT0NBVElPTl9SRUFTT04gPSBcImEgbWFjaGluZSB0YWxrZWQgdG8gdXMgZnJvbSBhbiB1bmFwcHJvdmVkIElQXCI7XG4vLyBUaGUgcmV2b2tlIHJlcG8gaXMgcHVsbGVkIGF0IG1vc3QgdGhpcyBvZnRlbi4gQSBjaGVjayBoYXBwZW5zIHBlciByZXF1ZXN0LCBhbmQgYSByZXF1ZXN0IG11c3Rcbi8vIG5vdCBjb3N0IGEgcm91bmQgdHJpcCB0byBnaXRodWIuXG5jb25zdCBSRVZPS0VfU1lOQ19JTlRFUlZBTCA9IDYwICogMTAwMDtcbi8vIEFuZCB0aGUgbWFjaGluZSBsaXN0IGlzIHJlLXJlYWQgZnJvbSB0aGUgY2hlY2tvdXQgb24gdGhpcyBpbnRlcnZhbCwgaW4gdGhlIGJhY2tncm91bmQuIFRoZVxuLy8gY2hlY2tvdXQgaXRzZWxmIG9ubHkgbW92ZXMgd2hlbiB0aGUgZGFlbW9uIHB1bGxzIGl0LCB3aGljaCBpcyBvbiB0aGUgc2FtZSBzb3J0IG9mIGludGVydmFsLCBzb1xuLy8gcmVhZGluZyBtb3JlIG9mdGVuIHRoYW4gdGhpcyB3b3VsZCBvbmx5IHJlLXJlYWQgdGhlIHNhbWUgYnl0ZXMuXG5jb25zdCBNQUNISU5FU19SRUZSRVNIX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuLy8gSG93IGxvbmcgYSBmYWlsdXJlIHRvIGZpbmQgdGhlIGtleXMgcmVwbyBpcyByZW1lbWJlcmVkLiBBIGxvbmcgbGl2ZWQgcHJvY2VzcyBtYXkgc3RhcnQgYmVmb3JlXG4vLyB0aGUgbWFjaGluZSBpcyBzZXQgdXAsIGFuZCBzaG91bGQgcGljayBpdCB1cCBvbmNlIGl0IGlzLCB3aXRob3V0IGJlaW5nIHJlc3RhcnRlZCAtIGJ1dCBpdCBtdXN0XG4vLyBub3QgcGF5IGZvciByZXNvbHZpbmcgdGhlIHJlcG8gb24gZXZlcnkgcmVxdWVzdCBlaXRoZXIuXG5jb25zdCBSRVBPX1JFVFJZX0RFTEFZID0gMTUgKiAxMDAwO1xuY29uc3QgTE9PUEJBQ0sgPSBbXCIxMjcuMC4wLjFcIiwgXCI6OjFcIiwgXCI6OmZmZmY6MTI3LjAuMC4xXCJdO1xuLy8gVGhlIHRydXN0ZWQgbWFjaGluZSBsaXN0IGlzIHJlLXJlYWQgYXQgbW9zdCB0aGlzIG9mdGVuIHdoZW4gYSBjaGVjayByZWplY3RzLCBzbyBhIGNhbGxlciB0aGF0XG4vLyB3YXMganVzdCBhZGRlZCBpcyBwaWNrZWQgdXAgcXVpY2tseSB3aXRob3V0IGxldHRpbmcgYSBmbG9vZCBvZiByZWplY3Rpb25zIHJlLXJlYWQgZXZlcnkgdGltZS5cbmNvbnN0IE1BQ0hJTkVTX0lOVkFMSURBVElPTl9JTlRFUlZBTCA9IDYwICogMTAwMDtcbmxldCBsYXN0TWFjaGluZXNJbnZhbGlkYXRpb24gPSAwO1xuXG4vKiogT25lIG1hY2hpbmUgd2UgYXJlIHdpbGxpbmcgdG8gdGFsayB0bywgYW5kIHRoZSBhZGRyZXNzZXMgaXQgbWF5IHRhbGsgdG8gdXMgZnJvbS4gKi9cbmV4cG9ydCB0eXBlIE1hY2hpbmVTdGF0ZSA9IHtcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcHM6IHN0cmluZ1tdO1xuICAgIGFkZGVkQXQ6IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGhFeGlzdHMoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlUGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFjaGluZUZpbGVQYXRoKHJlcG9QYXRoOiBzdHJpbmcsIG1hY2hpbmVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbihyZXBvUGF0aCwgTUFDSElORVNfRElSLCBgJHttYWNoaW5lSWR9Lmpzb25gKTtcbn1cblxuLyoqIFRoaXMgbWFjaGluZSdzIGtleXMgcmVwbywgd29ya2VkIG91dCBvbmNlIGFuZCB0aGVuIHJlbWVtYmVyZWQuXG5cbiAgICBBIGZhaWx1cmUgaXMgcmVtZW1iZXJlZCB0b28sIGJ1dCBvbmx5IGJyaWVmbHk6IGEgc2VydmVyIG1heSB3ZWxsIHN0YXJ0IGJlZm9yZSB0aGUgbWFjaGluZSBoYXNcbiAgICBiZWVuIHNldCB1cCwgYW5kIHNob3VsZCBzdGFydCB3b3JraW5nIHdoZW4gaXQgaXMsIHJhdGhlciB0aGFuIG5lZWRpbmcgYSByZXN0YXJ0LiAqL1xuZXhwb3J0IGNvbnN0IGtleXNSZXBvID0gbGF6eShhc3luYyAoKSA9PiB7XG4gICAgbGV0IGxvb2t1cCA9IHJlc29sdmVLZXlzUmVwbygpO1xuICAgIGxvb2t1cC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ga2V5c1JlcG8ucmVzZXQoKSwgUkVQT19SRVRSWV9ERUxBWSkudW5yZWYoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXdhaXQgbG9va3VwO1xufSk7XG5cbi8qKiBFdmVyeSBtYWNoaW5lIGEgY2hlY2tvdXQgbGlzdHMuIFdpdGhvdXQgYSByZXBvLCB0aGlzIG1hY2hpbmUncyBvd24uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZXMocmVwb1BhdGg/OiBzdHJpbmcpOiBQcm9taXNlPE1hY2hpbmVTdGF0ZVtdPiB7XG4gICAgcmV0dXJuIFsuLi4oYXdhaXQgcmVhZE1hY2hpbmVzKHJlcG9QYXRoIHx8IChhd2FpdCBrZXlzUmVwbygpKS5yZXBvUGF0aCkpLnZhbHVlcygpXTtcbn1cblxuLyoqIFRoZSBtYWNoaW5lcyB0aGUgc2lnbmVkIGZpbGVzIHZvdWNoIGZvci4gT25seSB0aGUgbWFjaGluZSBmaWxlcyBjb3ZlcmVkIGJ5IHRoZSBzaWduYXR1cmUgYXJlXG4gICAgcmVhZCAtIGFuIHVuc2lnbmVkIG1hY2hpbmVzLyouanNvbiBpcyBub3QgZXZpZGVuY2Ugb2YgYW55dGhpbmcsIHNvIHJlYWRTaWduZWRSZXBvIGhhcyBhbHJlYWR5XG4gICAgbGVmdCBpdCBvdXQuICovXG5hc3luYyBmdW5jdGlvbiByZWFkVHJ1c3RlZE1hY2hpbmVzKCkge1xuICAgIGxldCB7IHJlcG9QYXRoLCBzb3VyY2VVUkwgfSA9IGF3YWl0IGtleXNSZXBvKCk7XG4gICAgbGV0IHsgZmlsZXMgfSA9IGF3YWl0IHJlYWRTaWduZWRSZXBvKHsgcmVwb1BhdGgsIHNvdXJjZVVSTCB9KTtcbiAgICBsZXQgbWFjaGluZXM6IE1hY2hpbmVTdGF0ZVtdID0gW107XG4gICAgZm9yIChsZXQgW2ZpbGVQYXRoLCBjb250ZW50c10gb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWxlUGF0aC5zdGFydHNXaXRoKGAke01BQ0hJTkVTX0RJUn0vYCkgJiYgZmlsZVBhdGguc2xpY2UoTUFDSElORVNfRElSLmxlbmd0aCArIDEpIHx8IFwiXCI7XG4gICAgICAgIGlmICghbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpIHx8IG5hbWUuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFjaGluZSA9IHBhcnNlTWFjaGluZUZpbGUobmFtZSwgY29udGVudHMudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgaWYgKG1hY2hpbmUpIHtcbiAgICAgICAgICAgIG1hY2hpbmVzLnB1c2gobWFjaGluZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVzO1xufVxuXG5jb25zdCB0cnVzdGVkTWFjaGluZXMgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVhZCA9IHJlYWRUcnVzdGVkTWFjaGluZXMoKTtcbiAgICByZWFkLmNhdGNoKCgpID0+IHRydXN0ZWRNYWNoaW5lcy5yZXNldCgpKTtcbiAgICByZXR1cm4gYXdhaXQgcmVhZDtcbn0pO1xuXG5sZXQgcmVmcmVzaGluZyA9IGZhbHNlO1xuXG4vKiogVGhlIG1hY2hpbmVzIHRoaXMgc3lzdGVtIHRydXN0cywgYXMgdGhlIHNpZ25lZCByZXBvIGxpc3RzIHRoZW0uXG5cbiAgICBIZWxkIHJhdGhlciB0aGFuIHJlYWQgcGVyIGNhbGwsIGFuZCByZWZyZXNoZWQgaW4gdGhlIGJhY2tncm91bmQsIHNvIG5vYm9keSBhc2tpbmcgd2hldGhlciBhXG4gICAgbWFjaGluZSBpcyB0cnVzdGVkIHdhaXRzIGZvciBhIGRpcmVjdG9yeSBvZiBmaWxlcyB0byBiZSByZWFkIGFuZCBhIHNpZ25hdHVyZSB0byBiZSBjaGVja2VkLiBBXG4gICAgcmVmcmVzaCB0aGF0IGZhaWxzIGxlYXZlcyB0aGUgbGlzdCB3ZSBhbHJlYWR5IGhhdmU6IHRoZSBjaGVja291dCBpcyBvbmx5IHN0YWxlLCBub3Qgd3JvbmcuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHJ1c3RlZE1hY2hpbmVzKCk6IFByb21pc2U8TWFjaGluZVN0YXRlW10+IHtcbiAgICBpZiAoIXJlZnJlc2hpbmcpIHtcbiAgICAgICAgcmVmcmVzaGluZyA9IHRydWU7XG4gICAgICAgIHJ1bkluZmluaXRlUG9sbChNQUNISU5FU19SRUZSRVNIX0lOVEVSVkFMLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRydXN0ZWRNYWNoaW5lcy5zZXQoUHJvbWlzZS5yZXNvbHZlKGF3YWl0IHJlYWRUcnVzdGVkTWFjaGluZXMoKSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgcmUtcmVhZCB0aGUgdHJ1c3RlZCBtYWNoaW5lcywga2VlcGluZyB0aGUgb25lcyB3ZSBoYXZlLiAke2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdHJ1c3RlZE1hY2hpbmVzKCk7XG59XG5cbi8qKiBUaGUgbWFjaGluZSBpZCBvZiBhIG1hY2hpbmUgcmVhY2hlZCBvdmVyIHNzaCwgZ2VuZXJhdGluZyBhbmQgaW5zdGFsbGluZyBhbiBpZGVudGl0eSBmb3IgaXQgaWZcbiAgICBpdCBoYXMgbm9uZSB1bmRlciB0aGlzIGRvbWFpbi4gVGhlIHByaXZhdGUga2V5IGVuZHMgdXAgb24gdGhhdCBtYWNoaW5lIGFuZCBub3doZXJlIGVsc2UuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0T3JDcmVhdGVSZW1vdGVNYWNoaW5lSWQoaG9zdDogc3RyaW5nLCBkb21haW46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShERVZfZ2V0SWRlbnRpdHlGaWxlUGF0aChkb21haW4pKTtcbiAgICBsZXQgaG9tZSA9IChhd2FpdCBydW5PdmVyU1NIKHsgaG9zdCwgc2NyaXB0OiBgZWNobyAkSE9NRWAgfSkpLnN0ZG91dC50cmltKCk7XG4gICAgaWYgKCFob21lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtob3N0fSB0byByZXBvcnQgYSBob21lIGRpcmVjdG9yeSwgaXQgcmVwb3J0ZWQgbm90aGluZ2ApO1xuICAgIH1cbiAgICBsZXQgY29udGVudHMgPSBhd2FpdCBydW5PdmVyU1NIKHsgaG9zdCwgc2NyaXB0OiBgY2F0ICR7aG9tZX0vJHtmaWxlTmFtZX0gMj4vZGV2L251bGwgfHwgdHJ1ZWAgfSk7XG4gICAgaWYgKGNvbnRlbnRzLnN0ZG91dC50cmltKCkpIHtcbiAgICAgICAgbGV0IHN0b3JlZCA9IEpTT04ucGFyc2UoY29udGVudHMuc3Rkb3V0KSBhcyBJZGVudGl0eVN0b3JhZ2VUeXBlO1xuICAgICAgICByZXR1cm4gZ2V0TWFjaGluZUlkKHN0b3JlZC5kb21haW4sIGRvbWFpbik7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGAke2Rlc2NyaWJlSG9zdChob3N0KX0gaGFzIG5vIGlkZW50aXR5IGZvciAke2RvbWFpbn0sIGdlbmVyYXRpbmcgb25lYCk7XG4gICAgbGV0IGdlbmVyYXRlZCA9IGdlbmVyYXRlQ0EoZG9tYWluKTtcbiAgICBsZXQgc3RvcmVkOiBJZGVudGl0eVN0b3JhZ2VUeXBlID0ge1xuICAgICAgICBkb21haW46IGdlbmVyYXRlZC5kb21haW4sXG4gICAgICAgIGNlcnRCNjQ6IGdlbmVyYXRlZC5jZXJ0LnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICBrZXlCNjQ6IGdlbmVyYXRlZC5rZXkudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgfTtcbiAgICBhd2FpdCB3cml0ZVJlbW90ZUZpbGUoe1xuICAgICAgICBob3N0LFxuICAgICAgICBmaWxlUGF0aDogYCR7aG9tZX0vJHtmaWxlTmFtZX1gLFxuICAgICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSxcbiAgICAgICAgZmlsZU1vZGU6IFwiNjAwXCIsXG4gICAgICAgIGRpcmVjdG9yeU1vZGU6IFwiNzAwXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGdldE1hY2hpbmVJZChnZW5lcmF0ZWQuZG9tYWluLCBkb21haW4pO1xufVxuXG4vKiogTWFrZXMgYSBjaGVja291dCBsaXN0IGV4YWN0bHkgdGhlc2UgbWFjaGluZXM6IHRob3NlIG5hbWVkIGFyZSB3cml0dGVuIHdpdGggdGhlIGFkZHJlc3NlcyBnaXZlbixcbiAgICBhbmQgYW55dGhpbmcgbm90IG5hbWVkIGlzIHJlbW92ZWQuIFNvIHJlYWQgdGhlbSwgY2hhbmdlIHdoYXQgeW91IHdhbnQsIGFuZCB3cml0ZSB0aGUgcmVzdWx0LlxuXG4gICAgVGhlIGFkZHJlc3NlcyBhcmUgcGFydCBvZiBzZXR0aW5nIHJhdGhlciB0aGFuIGEgc2VwYXJhdGUgc3RlcCwgYmVjYXVzZSBhIG1hY2hpbmUgd2l0aCBub1xuICAgIGFkZHJlc3MgaXQgbWF5IHRhbGsgZnJvbSBpcyBub3QgYSBtYWNoaW5lIHRoYXQgd291bGQgZXZlciBiZSBhY2NlcHRlZCAtIHRoZXJlIGlzIG5vIHN0YXRlIHdoZXJlXG4gICAgbmFtaW5nIG9uZSB3aXRob3V0IHRoZW0gbWVhbnMgYW55dGhpbmcuXG5cbiAgICBOb3RoaW5nIGhlcmUgc2lnbnMgb3IgY29tbWl0cy4gVGhlIHNpZ25hdHVyZSBpcyB3aGF0IGV2ZXJ5IG90aGVyIG1hY2hpbmUgY2hlY2tzIGJlZm9yZVxuICAgIGJlbGlldmluZyBhbnkgb2YgdGhpcywgYW5kIGl0IHRha2VzIHRoZSBoYXJkd2FyZSBrZXksIHNvIGB5YXJuIHNpZ25maWxlcyBnaXRgIGlzIHN0aWxsIHlvdXJzIHRvXG4gICAgcnVuIGFmdGVyd2FyZHMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0TWFjaGluZXMoY29uZmlnOiB7XG4gICAgcmVwb1BhdGg/OiBzdHJpbmc7XG4gICAgbWFjaGluZXM6IHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwczogc3RyaW5nW10gfVtdO1xufSk6IFByb21pc2U8TWFjaGluZVN0YXRlW10+IHtcbiAgICBsZXQgeyBtYWNoaW5lcyB9ID0gY29uZmlnO1xuICAgIGxldCByZXBvUGF0aCA9IGNvbmZpZy5yZXBvUGF0aCB8fCAoYXdhaXQga2V5c1JlcG8oKSkucmVwb1BhdGg7XG4gICAgLy8gV2hhdGV2ZXIgd2FzIGhlbGQgaXMgbm93IHN0YWxlLCB3aG9ldmVyIHJlYWRzIGl0IG5leHQuXG4gICAgdHJ1c3RlZE1hY2hpbmVzLnJlc2V0KCk7XG4gICAgbGV0IGV4aXN0aW5nID0gYXdhaXQgcmVhZE1hY2hpbmVzKHJlcG9QYXRoKTtcbiAgICBsZXQgZGlyZWN0b3J5ID0gcGF0aC5qb2luKHJlcG9QYXRoLCBNQUNISU5FU19ESVIpO1xuICAgIGxldCB3cml0dGVuOiBNYWNoaW5lU3RhdGVbXSA9IFtdO1xuICAgIGZvciAobGV0IG1hY2hpbmUgb2YgbWFjaGluZXMpIHtcbiAgICAgICAgaWYgKCFtYWNoaW5lLm1hY2hpbmVJZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIG1hY2hpbmVJZCwgd2FzICR7SlNPTi5zdHJpbmdpZnkobWFjaGluZS5tYWNoaW5lSWQpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWFjaGluZS5pcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYEV4cGVjdGVkIGFkZHJlc3NlcyBmb3IgJHttYWNoaW5lLm1hY2hpbmVJZH0sIHdhcyBub25lLiBBIG1hY2hpbmUgaXMgdHJ1c3RlZCBmcm9tYFxuICAgICAgICAgICAgICAgICsgYCB0aGUgYWRkcmVzc2VzIGl0IG1heSB0YWxrIGZyb20sIHNvIGxlYXZlIGl0IG91dCBvZiB0aGUgbGlzdCB0byByZW1vdmUgaXQuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXBzID0gbWFjaGluZS5pcHMuZmlsdGVyKChpcCwgaW5kZXgpID0+IGlwICYmIG1hY2hpbmUuaXBzLmluZGV4T2YoaXApID09PSBpbmRleCk7XG4gICAgICAgIGxldCBzdGF0ZTogTWFjaGluZVN0YXRlID0ge1xuICAgICAgICAgICAgbWFjaGluZUlkOiBtYWNoaW5lLm1hY2hpbmVJZCxcbiAgICAgICAgICAgIC8vIEluIHRoZSBvcmRlciBnaXZlbiwgd2l0aG91dCBkdXBsaWNhdGVzLCBzbyB0aGUgZmlsZSByZWFkcyB0aGUgd2F5IGl0IHdhcyBzZXQuXG4gICAgICAgICAgICBpcHMsXG4gICAgICAgICAgICBhZGRlZEF0OiBleGlzdGluZy5nZXQobWFjaGluZS5tYWNoaW5lSWQpPy5hZGRlZEF0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoZGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKG1hY2hpbmVGaWxlUGF0aChyZXBvUGF0aCwgc3RhdGUubWFjaGluZUlkKSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUsIHVuZGVmaW5lZCwgNCkgKyBcIlxcblwiKTtcbiAgICAgICAgd3JpdHRlbi5wdXNoKHN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBXaGF0ZXZlciB0aGUgcmVwbyBoYWQgYW5kIHRoZSBjYWxsZXIgZGlkIG5vdCBuYW1lIGlzIG5vIGxvbmdlciB0cnVzdGVkLlxuICAgIGZvciAobGV0IG1hY2hpbmVJZCBvZiBleGlzdGluZy5rZXlzKCkpIHtcbiAgICAgICAgaWYgKCFtYWNoaW5lcy5zb21lKG1hY2hpbmUgPT4gbWFjaGluZS5tYWNoaW5lSWQgPT09IG1hY2hpbmVJZCkpIHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnJtKG1hY2hpbmVGaWxlUGF0aChyZXBvUGF0aCwgbWFjaGluZUlkKSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd3JpdHRlbjtcbn1cblxuZnVuY3Rpb24gcGFyc2VNYWNoaW5lRmlsZShuYW1lOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpOiBNYWNoaW5lU3RhdGUgfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IHBhcnNlZC5tYWNoaW5lSWQgfHwgbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiXCIpO1xuICAgICAgICByZXR1cm4geyBtYWNoaW5lSWQsIGlwczogcGFyc2VkLmlwcyB8fCBbXSwgYWRkZWRBdDogcGFyc2VkLmFkZGVkQXQgfHwgXCJcIiB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIHVucmVhZGFibGUgbWFjaGluZSBmaWxlICR7bmFtZX0uICR7ZX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbi8qKiBFdmVyeSBtYWNoaW5lIGZpbGUgb24gZGlzay4gRm9yIGVkaXRpbmcgdGhlIHJlcG8sIG5vdCBmb3IgZGVjaWRpbmcgdHJ1c3QgLSB0cnVzdCByZWFkcyB0aGVcbiAgICBzaWduZWQgZmlsZXMgdGhyb3VnaCByZWFkVHJ1c3RlZE1hY2hpbmVzLiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZE1hY2hpbmVzKHJlcG9QYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgbWFjaGluZXMgPSBuZXcgTWFwPHN0cmluZywgTWFjaGluZVN0YXRlPigpO1xuICAgIGxldCBkaXJlY3RvcnkgPSBwYXRoLmpvaW4ocmVwb1BhdGgsIE1BQ0hJTkVTX0RJUik7XG4gICAgbGV0IG5hbWVzID0gYXdhaXQgZnMucmVhZGRpcihkaXJlY3RvcnkpLmNhdGNoKCgpID0+IFtdIGFzIHN0cmluZ1tdKTtcbiAgICBmb3IgKGxldCBuYW1lIG9mIG5hbWVzLnNvcnQoKSkge1xuICAgICAgICBpZiAoIW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hY2hpbmUgPSBwYXJzZU1hY2hpbmVGaWxlKG5hbWUsIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihkaXJlY3RvcnksIG5hbWUpLCBcInV0ZjhcIikuY2F0Y2goKCkgPT4gXCJcIikpO1xuICAgICAgICBpZiAobWFjaGluZSkge1xuICAgICAgICAgICAgbWFjaGluZXMuc2V0KG1hY2hpbmUubWFjaGluZUlkLCBtYWNoaW5lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZXM7XG59XG5cbmxldCBsYXN0UmV2b2tlU3luYyA9IDA7XG5cbi8qKiBQdWxscyB0aGUga2V5cyByZXBvIGFuZCBpdHMgcmV2b2tlIHJlcG8sIGF0IG1vc3Qgb25jZSBhIFJFVk9LRV9TWU5DX0lOVEVSVkFMLCBiZWNhdXNlIHRoaXMgaXNcbiAgICBhc2tlZCBwZXIgcmVxdWVzdC4gQm90aCwgc2luY2UgZWl0aGVyIGNoYW5naW5nIGNoYW5nZXMgdGhlIGFuc3dlcjogdGhlIGtleXMgcmVwbyBjYXJyaWVzIHRoZVxuICAgIG1hY2hpbmVzIGFuZCB1bnJldm9rZXMsIHRoZSByZXZva2UgcmVwbyBjYXJyaWVzIHRoZSByZXZvY2F0aW9ucy4gQSBzeW5jIHRoYXQgZmFpbHMgbGVhdmVzIHRoZVxuICAgIGNoZWNrb3V0cyB3ZSBhbHJlYWR5IGhhdmUuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jUmV2b2NhdGlvbnMoc291cmNlVVJMOiBzdHJpbmcpIHtcbiAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RSZXZva2VTeW5jIDwgUkVWT0tFX1NZTkNfSU5URVJWQUwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsYXN0UmV2b2tlU3luYyA9IERhdGUubm93KCk7XG4gICAgYXdhaXQgc3luY1JlcG8oc291cmNlVVJMKS5jYXRjaChlID0+IGNvbnNvbGUubG9nKGBDb3VsZCBub3Qgc3luYyAke3NvdXJjZVVSTH0sIHVzaW5nIHRoZSBjaGVja291dCBhbHJlYWR5IGhlcmUuICR7ZX1gKSk7XG4gICAgYXdhaXQgc3luY1JlcG9GaWxlcyhyZXZva2VSZXBvKHNvdXJjZVVSTCkpLmNhdGNoKGUgPT4gY29uc29sZS5sb2coYENvdWxkIG5vdCBzeW5jICR7cmV2b2tlUmVwb1VSTChzb3VyY2VVUkwpfSwgdXNpbmcgdGhlIHJldm9jYXRpb25zIGFscmVhZHkgYWJzb3JiZWQuICR7ZX1gKSk7XG59XG5cbi8qKiBXaGF0IHRvIHJ1biB0byB0cnVzdCBhIG1hY2hpbmUgdGhhdCBoYXMganVzdCBiZWVuIHJlZnVzZWQuXG5cbiAgICBFdmVyeXRoaW5nIGluIGl0IGlzIGFscmVhZHkga25vd24gdG8gd2hvZXZlciBpcyBiZWluZyByZWZ1c2VkOiB0aGVpciBtYWNoaW5lIGlkLCB0aGUgYWRkcmVzcyB3ZVxuICAgIHNhdyB0aGVtIGF0LCBhbmQgdGhlIGRvbWFpbiB0aGV5IGp1c3QgdGFsa2VkIHRvLiBIYW5kaW5nIGl0IGJhY2sgc2F2ZXMgdGhlbSB3b3JraW5nIG91dCB0aGVcbiAgICBwYXJ0cyBvZiBhIGNvbW1hbmQgdGhleSBoYXZlIGV2ZXJ5IHJpZ2h0IHRvIGtub3cuIFJ1bm5pbmcgaXQgc3RpbGwgdGFrZXMgdGhlIGhhcmR3YXJlIGtleSBvblxuICAgIHRoZSBtYWNoaW5lIHRoYXQgb3ducyB0aGUgcmVwbywgc28gdGVsbGluZyB0aGVtIGNvc3RzIG5vdGhpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTWFjaGluZUNvbW1hbmQoY29uZmlnOiB7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nOyBkb21haW4/OiBzdHJpbmcgfSkge1xuICAgIGxldCB7IG1hY2hpbmVJZCwgaXAsIGRvbWFpbiB9ID0gY29uZmlnO1xuICAgIHJldHVybiBgVG8gdHJ1c3QgJHttYWNoaW5lSWR9LCBydW46IHlhcm4gYWRkbWFjaGluZSAke2RvbWFpbiB8fCBcIjxkb21haW4+XCJ9ICR7bWFjaGluZUlkfSAke2lwfSBnaXRgO1xufVxuXG4vKiogU2VuZHMgdGhlIG9uZSBub3RpZmljYXRpb24gdGhpcyBmaWxlIGlzIGFsbG93ZWQgdG8gc2VuZCwgd2hlbiBpdCBjYW4uXG5cbiAgICBUaGUgZGFlbW9uIGNvbmZpZ3VyZXMgbm90aWZpY2F0aW9ucyBvbiBzdGFydHVwIGFuZCB3b3VsZCBzaW1wbHkgc2VuZC4gVGhpcyBjYW4gYWxzbyBydW4gaW4gc29tZVxuICAgIG90aGVyIHByb2Nlc3MsIHdoaWNoIGhhcyBub3QsIHNvIHRoZSB3ZWJob29rIGlzIHBpY2tlZCB1cCBoZXJlIGlmIGl0IGlzIHJlYWRhYmxlLiBBIG1hY2hpbmVcbiAgICB3aXRoIG5vIHdlYmhvb2sgc2V0IHVwIHN0aWxsIHJlY29yZHMgdGhlIHJldm9jYXRpb24gLSBiZWluZyB1bmFibGUgdG8gdGVsbCBhbnlvbmUgaXMgbm90IGFcbiAgICByZWFzb24gdG8ga2VlcCBhY2NlcHRpbmcgYSBtYWNoaW5lIHRoYXQgaXMgYmVpbmcgbWlzdXNlZC4gKi9cbmFzeW5jIGZ1bmN0aW9uIG5vdGlmeUJlc3RFZmZvcnQoaGVhZGxpbmU6IHN0cmluZywgYm9keTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKCFhcmVEaXNjb3JkTm90aWZpY2F0aW9uc0NvbmZpZ3VyZWQoKSkge1xuICAgICAgICAgICAgLy8gUmVhZCBmaXJzdDogY29uZmlndXJlRGlzY29yZE5vdGlmaWNhdGlvbnMgZXhpdHMgdGhlIHByb2Nlc3Mgd2hlbiB0aGUgZmlsZSBpcyBtaXNzaW5nLFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgcmlnaHQgZm9yIHRoZSBkYWVtb24gYXQgc3RhcnR1cCBhbmQgd3JvbmcgZm9yIGEgbGlicmFyeSBjYWxsLlxuICAgICAgICAgICAgYXdhaXQgZnMucmVhZEZpbGUoREVGQVVMVF9XRUJIT09LX0ZJTEVfUEFUSCwgXCJ1dGY4XCIpO1xuICAgICAgICAgICAgYXdhaXQgY29uZmlndXJlRGlzY29yZE5vdGlmaWNhdGlvbnMoeyBmaWxlUGF0aDogREVGQVVMVF9XRUJIT09LX0ZJTEVfUEFUSCB9KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBub3RpZnkoaGVhZGxpbmUsIGJvZHkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCBzZW5kIGEgbm90aWZpY2F0aW9uIGFib3V0IHRoaXMsIGl0IGlzIG9ubHkgaW4gdGhlIGxvZy4gJHtlfWApO1xuICAgIH1cbn1cblxuLyoqIFJlY29yZHMgdGhhdCBhIG1hY2hpbmUgd2UgYWNjZXB0IHRhbGtlZCB0byB1cyBmcm9tIGFuIGFkZHJlc3MgaXQgaXMgbm90IGFsbG93ZWQgZnJvbS4gT25lIHBlclxuICAgIG1hY2hpbmUgYW5kIGFkZHJlc3MsIHNvIGEgc2Vjb25kIGFkZHJlc3MgaXMgYSBzZWNvbmQgcmV2b2NhdGlvbiBhbmQgYW4gdW5yZXZva2Ugb2YgdGhlIGZpcnN0XG4gICAgZG9lcyBub3QgY292ZXIgaXQuICovXG5hc3luYyBmdW5jdGlvbiByZWNvcmRNYWNoaW5lUmV2b2NhdGlvbihjb25maWc6IHtcbiAgICBzb3VyY2VVUkw6IHN0cmluZztcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcDogc3RyaW5nO1xuICAgIGhvc3RMYWJlbDogc3RyaW5nO1xufSkge1xuICAgIGxldCB7IHNvdXJjZVVSTCwgbWFjaGluZUlkLCBpcCwgaG9zdExhYmVsIH0gPSBjb25maWc7XG4gICAgLy8gQ2xvbmVzIGl0IGlmIGl0IGlzIG5vdCBoZXJlIHlldCwgd2hpY2ggaXMgdGhlIHVzdWFsIHN0YXRlIG9mIGEgbWFjaGluZSB0aGF0IGhhcyBuZXZlciBoYWQgdG9cbiAgICAvLyByZXZva2UgYW55dGhpbmcuIFdpdGhvdXQgdGhpcyB0aGUgbWtkaXIgYmVsb3cgd291bGQgYnVpbGQgdGhlIGRpcmVjdG9yeSBhbnl3YXkgYW5kIGdpdCB3b3VsZFxuICAgIC8vIHRoZW4gYmUgcnVuIHNvbWV3aGVyZSB0aGF0IGlzIG5vdCBhIGNoZWNrb3V0LCBzbyB0aGUgcmV2b2NhdGlvbiB3YXMgd3JpdHRlbiB3aGVyZSBub3RoaW5nXG4gICAgLy8gd291bGQgZXZlciByZWFkIGl0LlxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN5bmNSZXBvRmlsZXMocmV2b2tlUmVwbyhzb3VyY2VVUkwpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCByZWNvcmQgdGhlIHJldm9jYXRpb24gb2YgJHttYWNoaW5lSWR9LCAke3Jldm9rZVJlcG9VUkwoc291cmNlVVJMKX0gY291bGQgbm90IGJlIHJlYWQuICR7ZX1gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgcmVwb1BhdGggPSByZXZva2VSZXBvUGF0aChzb3VyY2VVUkwpO1xuICAgIGxldCBrZXlQYXRoID0gYXdhaXQgZW5zdXJlUmV2b2tlS2V5KHNvdXJjZVVSTCk7XG4gICAgbGV0IHJldm9jYXRpb25JZCA9IG5ld1Jldm9jYXRpb25JZChtYWNoaW5lSWQpO1xuICAgIGxldCBkaXJlY3RvcnkgPSBwYXRoLmpvaW4ocmVwb1BhdGgsIFJFVk9DQVRJT05TX0RJUik7XG4gICAgYXdhaXQgZnMubWtkaXIoZGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGRpcmVjdG9yeSwgYCR7cmV2b2NhdGlvbklkfS5qc29uYCksIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcmV2b2NhdGlvbklkLFxuICAgICAgICBtYWNoaW5lSWQsXG4gICAgICAgIGlwLFxuICAgICAgICByZXZva2VkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgcmV2b2tlZEJ5OiBob3N0TGFiZWwsXG4gICAgICAgIHJlYXNvbjogUkVWT0NBVElPTl9SRUFTT04sXG4gICAgfSwgdW5kZWZpbmVkLCA0KSArIFwiXFxuXCIpO1xuXG4gICAgYXdhaXQgcnVuR2l0KHsgYXJnczogW1wiYWRkXCIsIFwiLUFcIl0sIGN3ZDogcmVwb1BhdGgsIGtleVBhdGggfSk7XG4gICAgYXdhaXQgcnVuR2l0KHtcbiAgICAgICAgYXJnczogW1wiLWNcIiwgXCJ1c2VyLmVtYWlsPXBvcnRzZWN1cmVAbG9jYWxob3N0XCIsIFwiLWNcIiwgXCJ1c2VyLm5hbWU9cG9ydHNlY3VyZVwiLCBcImNvbW1pdFwiLCBcIi1tXCIsIGByZXZva2UgJHtyZXZvY2F0aW9uSWR9YF0sXG4gICAgICAgIGN3ZDogcmVwb1BhdGgsIGtleVBhdGgsXG4gICAgfSk7XG4gICAgbGV0IHB1c2ggPSBhd2FpdCBydW5HaXQoeyBhcmdzOiBbXCJwdXNoXCIsIFwib3JpZ2luXCIsIFwiSEVBRFwiXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCwgYWxsb3dGYWlsdXJlOiB0cnVlIH0pO1xuICAgIGlmIChwdXNoLnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAvLyBBbm90aGVyIG1hY2hpbmUgbW9zdCBsaWtlbHkgcmVjb3JkZWQgdGhlIHNhbWUgdGhpbmcgZmlyc3QsIGFuZCB0aGUgbmV4dCByZWFkIHBpY2tzIGl0IHVwLlxuICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IHB1c2ggdGhlIHJldm9jYXRpb24gb2YgJHttYWNoaW5lSWR9IGZyb20gJHtpcH0uICR7KHB1c2guc3Rkb3V0ICsgcHVzaC5zdGRlcnIpLnRyaW0oKX1gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBub3RlUmV2b2NhdGlvbihyZXZvY2F0aW9uSWQsIG1hY2hpbmVJZCwgaXApO1xuICAgIGNvbnNvbGUubG9nKGBSZXZva2VkICR7bWFjaGluZUlkfSBmcm9tICR7aXB9LCAke3Jldm9jYXRpb25JZH1gKTtcblxuICAgIC8vIFNhaWQgYnkgd2hvZXZlciB3cm90ZSB0aGUgcmV2b2NhdGlvbiwgb25jZSwgdGhlIHNhbWUgYXMgZm9yIGFuIHNzaCBrZXkuIE1hY2hpbmVzIHRoYXQgb25seVxuICAgIC8vIHJlYWQgaXQgbGF0ZXIgc2F5IG5vdGhpbmcsIG9yIG9uZSBldmVudCB3b3VsZCBiZSByZXBvcnRlZCBieSBldmVyeSBtYWNoaW5lIHRoYXQgc2F3IGl0LlxuICAgIGF3YWl0IG5vdGlmeUJlc3RFZmZvcnQoXG4gICAgICAgIGBTVVNQSUNJT1VTIElQICR7aXB9IEZST1pFIE1BQ0hJTkUgJHttYWNoaW5lSWR9YCxcbiAgICAgICAgYFRydXN0ZWQgbWFjaGluZSAke21hY2hpbmVJZH0gdGFsa2VkIHRvIHVzIGZyb20gJHtpcH0sIGFuIGFkZHJlc3MgJHttYWNoaW5lSWR9IGlzIG5vdGBcbiAgICAgICAgKyBgIGFsbG93ZWQgZnJvbS4gVGhlIGNhbGxlciBwcm92ZWQgcG9zc2Vzc2lvbiBvZiAke21hY2hpbmVJZH0ncyBrZXksIHNvIGVpdGhlciBzb21lb25lYFxuICAgICAgICArIGAgZWxzZSBoYXMgYSBjb3B5IG9mIHRoZSBrZXksIG9yIHRoZSBtYWNoaW5lJ3MgYWRkcmVzcyBjaGFuZ2VkLmBcbiAgICAgICAgKyBgXFxuXFxuTWFjaGluZSAke21hY2hpbmVJZH0gaXMgZnJvemVuIGV2ZXJ5d2hlcmUgbm93LCBhbmQgbm90aGluZyBhY2NlcHRzIGNhbGxzIGZyb20gJHttYWNoaW5lSWR9LmBcbiAgICAgICAgKyBgXFxuXFxuSWYgdGhpcyB3YXMgYW4gYXR0YWNrLCByZW1vdmUgXFxgbWFjaGluZXMvJHttYWNoaW5lSWR9Lmpzb25cXGAgZnJvbSBcXGAke3NvdXJjZVVSTH1cXGAgbm93LmBcbiAgICAgICAgKyBgXFxuSWYgdGhlIG5ldyBhZGRyZXNzIGlzIGxlZ2l0aW1hdGUsIHJ1biBcXGB5YXJuIHVucmV2b2tlIGdpdFxcYCBpbiBcXGAke3NvdXJjZVVSTH1cXGAuIFRoZWBcbiAgICAgICAgKyBgIHVucmV2b2tlIGFsbG93cyAke21hY2hpbmVJZH0gZnJvbSAke2lwfSwgYW5kIHRha2VzIGVmZmVjdCBhcyBlYWNoIG1hY2hpbmUgcGlja3MgaXQgdXAuYFxuICAgICAgICArIGBcXG5cXG5tYWNoaW5lOiBcXGAke21hY2hpbmVJZH1cXGBgXG4gICAgICAgICsgYFxcbmZyb3plbiBieTogXFxgJHtob3N0TGFiZWx9XFxgYFxuICAgICk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBXaGV0aGVyIHdlIHdpbGwgdGFsayB0byB0aGlzIG1hY2hpbmUsIGNvbWluZyBmcm9tIHRoaXMgYWRkcmVzcy5cblxuICAgIEJvdGggaGFsdmVzIGFyZSByZXF1aXJlZCBhbmQgbmVpdGhlciBpcyBhIGd1ZXNzOiB0aGUgY2FsbGVyIGtub3dzIHRoZSBtYWNoaW5lIGlkIGJlY2F1c2UgdGhlXG4gICAgY29ubmVjdGlvbiBwcm92ZWQgaXQsIGFuZCBrbm93cyB0aGUgYWRkcmVzcyBiZWNhdXNlIHRoZSBwYWNrZXRzIGNhbWUgZnJvbSB0aGVyZS4gQSBtYWNoaW5lIHdlXG4gICAgZG8gbm90IGxpc3QgaXMgc2ltcGx5IG5vdCBhY2NlcHRlZC4gQSBtYWNoaW5lIHdlIGRvIGxpc3QsIGFycml2aW5nIGZyb20gYW4gYWRkcmVzcyBpdCBkb2VzIG5vdFxuICAgIGhhdmUsIGlzIHRyZWF0ZWQgYXMgdGhlIHNhbWUga2luZCBvZiBldmVudCBhcyBhIHN0b2xlbiBzc2gga2V5IC0gaXQgaXMgcmV2b2tlZCBldmVyeXdoZXJlLCBhbmRcbiAgICBzdGF5cyByZXZva2VkIHVudGlsIGFuIHVucmV2b2tlIGFsbG93cyB0aGF0IG1hY2hpbmUgZnJvbSB0aGF0IGFkZHJlc3MuXG5cbiAgICBTYXlzIHdoeSB3aGVuIHRoZSBhbnN3ZXIgaXMgbm8sIGJlY2F1c2UgdGhlIHRocmVlIHdheXMgdG8gYmUgcmVmdXNlZCBhcmUgZW50aXJlbHkgZGlmZmVyZW50XG4gICAgdGhpbmdzIHRvIGEgcGVyc29uIHJlYWRpbmcgaXQ6IG5ldmVyIHRydXN0ZWQgYXQgYWxsLCB0cnVzdGVkIGJ1dCBmcm96ZW4sIG9yIHRydXN0ZWQgYW5kIHRhbGtpbmdcbiAgICBmcm9tIHNvbWV3aGVyZSBpdCBzaG91bGQgbm90IGJlLlxuXG4gICAgVGhyb3dzIHdoZW4gdGhlIHJlcG8gaXRzZWxmIGNhbm5vdCBiZSByZWFkIG9yIGlzIG5vdCBzaWduZWQsIHJhdGhlciB0aGFuIGFuc3dlcmluZyBmYWxzZTogdGhhdFxuICAgIGlzIGEgYnJva2VuIGluc3RhbGxhdGlvbiwgbm90IGEgcmVqZWN0ZWQgbWFjaGluZSwgYW5kIHRoZSB0d28gZGVzZXJ2ZSBkaWZmZXJlbnQgaGFuZGxpbmcuICovXG5leHBvcnQgdHlwZSBNYWNoaW5lVmVyZGljdCA9IHsgYWNjZXB0ZWQ6IGJvb2xlYW47IHJlYXNvbjogc3RyaW5nIH07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc01hY2hpbmVBY2NlcHRlZChjb25maWc6IHtcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcDogc3RyaW5nO1xuICAgIC8vIFVzZWQgZm9yIGxvY2FsIGxvb3BiYWNrIGFjY2VwdGFuY2UsIGFuZCBmb3IgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLlxuICAgIGRvbWFpbj86IHN0cmluZztcbn0pOiBQcm9taXNlPE1hY2hpbmVWZXJkaWN0PiB7XG4gICAgbGV0IHsgbWFjaGluZUlkLCBpcCwgZG9tYWluIH0gPSBjb25maWc7XG4gICAgaWYgKCFtYWNoaW5lSWQgfHwgIWlwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBtYWNoaW5lSWQgYW5kIGFuIGlwLCB3YXMgJHtKU09OLnN0cmluZ2lmeShtYWNoaW5lSWQpfSBhbmQgJHtKU09OLnN0cmluZ2lmeShpcCl9YCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHdob2xlIGNoZWNrLCBwbHVzIHdoZXRoZXIgaXQgZnJvemUgdGhlIG1hY2hpbmUuIEEgcmVqZWN0aW9uIHRoYXQgZnJvemUgaXQgaXMgZmluYWwsIHNvXG4gICAgLy8gdGhlcmUgaXMgbm90aGluZyB0byBnYWluIGZyb20gbG9va2luZyBhZ2Fpbi4gQW55IG90aGVyIHJlamVjdGlvbiBtaWdodCBqdXN0IGJlIGEgc3RhbGUgdmlldyAtXG4gICAgLy8gYSBtYWNoaW5lIGFkZGVkIHNlY29uZHMgYWdvIHRoYXQgb3VyIGNhY2hlZCBsaXN0IGhhcyBub3QgY2F1Z2h0IHVwIHRvIC0gc28gaXQgaXMgd29ydGggb25lXG4gICAgLy8gZnJlc2ggbG9vaywgd2hpY2ggaXMgd2hhdCB0aGUgcmV0cnkgYmVsb3cgZG9lcy5cbiAgICBsZXQgZXZhbHVhdGUgPSBhc3luYyAoKTogUHJvbWlzZTx7IHZlcmRpY3Q6IE1hY2hpbmVWZXJkaWN0OyBmcm96ZTogYm9vbGVhbiB9PiA9PiB7XG4gICAgICAgIGlmIChMT09QQkFDSy5pbmNsdWRlcyhpcCkgJiYgISFkb21haW4gJiYgbWFjaGluZUlkID09PSBnZXRPd25NYWNoaW5lSWQoZG9tYWluKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmVyZGljdDogeyBhY2NlcHRlZDogdHJ1ZSwgcmVhc29uOiBcIlwiIH0sIGZyb3plOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCB7IHNvdXJjZVVSTCB9ID0gYXdhaXQga2V5c1JlcG8oKTtcbiAgICAgICAgYXdhaXQgc3luY1Jldm9jYXRpb25zKHNvdXJjZVVSTCk7XG4gICAgICAgIC8vIFRoZSBsaXN0IGhhcyByZXZvY2F0aW9ucyBhbHJlYWR5IGFwcGxpZWQgLSByZWFkU2lnbmVkUmVwbyBkcm9wcyBmcm96ZW4gbWFjaGluZXMgLSBzbyBhXG4gICAgICAgIC8vIG1hY2hpbmUgaW4gaXQgaXMgdHJ1c3RlZCwgYW5kIGEgbWFjaGluZSBtaXNzaW5nIGZyb20gaXQgaXMgZWl0aGVyIHVua25vd24gb3IgZnJvemVuLlxuICAgICAgICBsZXQgbWFjaGluZSA9IChhd2FpdCBnZXRUcnVzdGVkTWFjaGluZXMoKSkuZmluZChlbnRyeSA9PiBlbnRyeS5tYWNoaW5lSWQgPT09IG1hY2hpbmVJZCk7XG4gICAgICAgIGlmICghbWFjaGluZSkge1xuICAgICAgICAgICAgaWYgKGlzSWRlbnRpdHlGcm96ZW4obWFjaGluZUlkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IGZhbHNlLCByZWFzb246IGBNYWNoaW5lICR7bWFjaGluZUlkfSBpcyBmcm96ZW4sIGhhdmluZyBiZWVuIHVzZWQgZnJvbSBhbiB1bmFwcHJvdmVkIGFkZHJlc3MuYCB9LCBmcm96ZTogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IGZhbHNlLCByZWFzb246IGBNYWNoaW5lICR7bWFjaGluZUlkfSBpcyBub3QgdHJ1c3RlZC4gJHthZGRNYWNoaW5lQ29tbWFuZCh7IG1hY2hpbmVJZCwgaXAsIGRvbWFpbiB9KX1gIH0sIGZyb3plOiBmYWxzZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hY2hpbmUuaXBzLmluY2x1ZGVzKGlwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmVyZGljdDogeyBhY2NlcHRlZDogdHJ1ZSwgcmVhc29uOiBcIlwiIH0sIGZyb3plOiBmYWxzZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTGlzdGVkLCBidXQgdGFsa2luZyB0byB1cyBmcm9tIHNvbWV3aGVyZSBpdCBzaG91bGQgbm90IGJlLiBSZWNvcmRlZCBvbmNlIGZvciB0aGlzIG1hY2hpbmVcbiAgICAgICAgLy8gYW5kIGFkZHJlc3MsIHNvIGJlaW5nIHRhbGtlZCB0byByZXBlYXRlZGx5IGRvZXMgbm90IHdyaXRlIHJlcGVhdGVkbHkuXG4gICAgICAgIGlmICghaXNQYWlyUmV2b2tlZChtYWNoaW5lSWQsIGlwKSAmJiAhaXNQYWlyVW5yZXZva2VkKG1hY2hpbmVJZCwgaXApKSB7XG4gICAgICAgICAgICAvLyBPbmx5IHRoZSBtYWNoaW5lIHRoYXQgYWN0dWFsbHkgd3JvdGUgdGhlIHJldm9jYXRpb24gbWF5IHNheSBpdCBmcm96ZSBhbnl0aGluZy4gT25lXG4gICAgICAgICAgICAvLyB0aGF0IGNvdWxkIG5vdCByZWFjaCB0aGUgcmV2b2tlIHJlcG8gaGFzIHJlZnVzZWQgdGhpcyBjYWxsIGFuZCBub3RoaW5nIG1vcmUuXG4gICAgICAgICAgICBsZXQgZnJvemUgPSBhd2FpdCByZWNvcmRNYWNoaW5lUmV2b2NhdGlvbih7IHNvdXJjZVVSTCwgbWFjaGluZUlkLCBpcCwgaG9zdExhYmVsOiBvcy5ob3N0bmFtZSgpIH0pO1xuICAgICAgICAgICAgbGV0IHJlYXNvbiA9IGZyb3plXG4gICAgICAgICAgICAgICAgJiYgYE1hY2hpbmUgJHttYWNoaW5lSWR9IGlzIG5vdCBhbGxvd2VkIGZyb20gJHtpcH0sIGFuZCBpcyBub3cgZnJvemVuIGV2ZXJ5d2hlcmUuYFxuICAgICAgICAgICAgICAgIHx8IGBNYWNoaW5lICR7bWFjaGluZUlkfSBpcyBub3QgYWxsb3dlZCBmcm9tICR7aXB9LiBJdCBjb3VsZCBub3QgYmUgZnJvemVuLCAke3Jldm9rZVJlcG9VUkwoc291cmNlVVJMKX0gY291bGQgbm90IGJlIHdyaXR0ZW4uYDtcbiAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IGZhbHNlLCByZWFzb24gfSwgZnJvemUgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2ZXJkaWN0OiB7IGFjY2VwdGVkOiBmYWxzZSwgcmVhc29uOiBgTWFjaGluZSAke21hY2hpbmVJZH0gaXMgbm90IGFsbG93ZWQgZnJvbSAke2lwfS5gIH0sIGZyb3plOiBmYWxzZSB9O1xuICAgIH07XG5cbiAgICBsZXQgeyB2ZXJkaWN0LCBmcm96ZSB9ID0gYXdhaXQgZXZhbHVhdGUoKTtcbiAgICAvLyBBbiBhY2NlcHQsIG9yIGEgcmVqZWN0aW9uIHRoYXQganVzdCBmcm96ZSB0aGUgbWFjaGluZSwgaXMgdGhlIGZpbmFsIHdvcmQuIEFueSBvdGhlciByZWplY3Rpb25cbiAgICAvLyBtaWdodCBqdXN0IGJlIGEgc3RhbGUgbGlzdCAtIGEgbWFjaGluZSBhZGRlZCBzZWNvbmRzIGFnbyB3ZSBoYXZlIG5vdCBjYXVnaHQgdXAgdG8gLSBzbyBpdCBpc1xuICAgIC8vIHdvcnRoIG9uZSBmcmVzaCBsb29rLlxuICAgIGlmICh2ZXJkaWN0LmFjY2VwdGVkIHx8IGZyb3plKSB7XG4gICAgICAgIHJldHVybiB2ZXJkaWN0O1xuICAgIH1cbiAgICAvLyBSZS1yZWFkIHRoZSBsaXN0IGF0IG1vc3Qgb25jZSBhIG1pbnV0ZSwgc28gYSBidXJzdCBvZiBiYWQgY2FsbGVycyBjYW5ub3QgbWFrZSB1cyByZS1yZWFkIG9uXG4gICAgLy8gZXZlcnkgb25lIG9mIHRoZW0uIEZvcmNlIHRoZSBjaGVja291dCBiYWNrIHRvIHRoZSByZW1vdGUgZmlyc3QsIHNvIGEgbWFjaGluZSBhZGRlZCBhbmQgc2lnbmVkXG4gICAgLy8gc2Vjb25kcyBhZ28gaXMgcGlja2VkIHVwIGV2ZW4gaWYgdGhlIGNoZWNrb3V0IHdhcyBsZWZ0IGRpcnR5LCB0aGVuIHRha2UgdGhlIGZyZXNoIGxvb2sgYXNcbiAgICAvLyBmaW5hbC5cbiAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RNYWNoaW5lc0ludmFsaWRhdGlvbiA+IE1BQ0hJTkVTX0lOVkFMSURBVElPTl9JTlRFUlZBTCkge1xuICAgICAgICBsYXN0TWFjaGluZXNJbnZhbGlkYXRpb24gPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgeyBzb3VyY2VVUkwgfSA9IGF3YWl0IGtleXNSZXBvKCk7XG4gICAgICAgIGF3YWl0IHN5bmNSZXBvKHNvdXJjZVVSTCwgeyBmb3JjZVVwZGF0ZTogdHJ1ZSB9KS5jYXRjaChlID0+IGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZm9yY2UgdXBkYXRlICR7c291cmNlVVJMfS4gJHtlfWApKTtcbiAgICAgICAgdHJ1c3RlZE1hY2hpbmVzLnJlc2V0KCk7XG4gICAgfVxuICAgIHJldHVybiAoYXdhaXQgZXZhbHVhdGUoKSkudmVyZGljdDtcbn1cbiJdfQ==
|
|
383
|
-
/* _JS_SOURCE_HASH = "
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYWNoaW5lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBNkI7QUFDN0IsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4Qix5REFBNkQ7QUFDN0Qsa0VBQStFO0FBQy9FLG9FQUFzRTtBQUN0RSxzREFBZ0U7QUFDaEUsa0VBQXFFO0FBQ3JFLDRFQUEySTtBQUMzSSxpRUFBK0U7QUFDL0UsNERBQXlEO0FBQ3pELHNEQUF1STtBQUN2SSxrREFBaUk7QUFDakksb0RBQWlGO0FBQ2pGLHlEQUFtRDtBQUNuRCwyREFBK0Q7QUFHL0QsbUdBQW1HO0FBQ25HLGlHQUFpRztBQUNqRyxnRUFBZ0U7QUFDbkQsUUFBQSxZQUFZLEdBQUcsVUFBVSxDQUFDO0FBQ3ZDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLGlCQUFpQixHQUFHLDhDQUE4QyxDQUFDO0FBQ3pFLGdHQUFnRztBQUNoRyxtQ0FBbUM7QUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLDZGQUE2RjtBQUM3RixpR0FBaUc7QUFDakcsa0VBQWtFO0FBQ2xFLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM1QyxnR0FBZ0c7QUFDaEcsaUdBQWlHO0FBQ2pHLDBEQUEwRDtBQUMxRCxNQUFNLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDMUQsZ0dBQWdHO0FBQ2hHLGdHQUFnRztBQUNoRyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDakQsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFTakMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxRQUFnQjtJQUN0QyxJQUFJLENBQUM7UUFDRCxN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QUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsU0FBUyx3QkFBd0IsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDckgsQ0FBQyxDQUFDO0lBRUYsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDO0lBQzFDLGdHQUFnRztJQUNoRywrRkFBK0Y7SUFDL0Ysd0JBQXdCO0lBQ3hCLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUM1QixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBQ0QsOEZBQThGO0lBQzlGLGdHQUFnRztJQUNoRyw0RkFBNEY7SUFDNUYsU0FBUztJQUNULElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLHdCQUF3QixHQUFHLDhCQUE4QixFQUFFLENBQUM7UUFDekUsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUEsZ0JBQVEsR0FBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBQSxjQUFRLEVBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0SCxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxNQUFNLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RDLENBQUM7QUEvRUQsOENBK0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHJlc29sdmVLZXlzUmVwbyB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5cy9rZXlzUmVwb1wiO1xuaW1wb3J0IHsgcmV2b2tlUmVwbywgc3luY1JlcG9GaWxlcyB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5cy9kYWVtb24vcmVwb0ZpbGVzXCI7XG5pbXBvcnQgeyBuZXdSZXZvY2F0aW9uSWQgfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMvZGFlbW9uL3Jldm9jYXRpb25cIjtcbmltcG9ydCB7IHJ1bkdpdCwgc3luY1JlcG8gfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMvZGFlbW9uL2dpdFwiO1xuaW1wb3J0IHsgZW5zdXJlUmV2b2tlS2V5IH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9yZXBvRmlsZXNcIjtcbmltcG9ydCB7IGlkZW50aXR5RnJvemVuQnksIGlzUGFpclJldm9rZWQsIGlzUGFpclVucmV2b2tlZCwgbm90ZVJldm9jYXRpb24sIHJlYWRTaWduZWRSZXBvIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9yZWFkU2lnbmVkUmVwb1wiO1xuaW1wb3J0IHsgcmV2b2tlUmVwb1BhdGgsIHJldm9rZVJlcG9VUkwgfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMvcmV2b2tlU291cmNlXCI7XG5pbXBvcnQgeyBub3RpZnkgfSBmcm9tIFwiLi4vYXV0aG9yaXplZEtleXMvZGFlbW9uL25vdGlmeVwiO1xuaW1wb3J0IHsgYXJlRGlzY29yZE5vdGlmaWNhdGlvbnNDb25maWd1cmVkLCBjb25maWd1cmVEaXNjb3JkTm90aWZpY2F0aW9ucywgREVGQVVMVF9XRUJIT09LX0ZJTEVfUEFUSCB9IGZyb20gXCIuLi9ub3RpZmljYXRpb25zL2Rpc2NvcmRcIjtcbmltcG9ydCB7IERFVl9nZXRJZGVudGl0eUZpbGVQYXRoLCBnZW5lcmF0ZUNBLCBnZXRNYWNoaW5lSWQsIGdldE93bk1hY2hpbmVJZCwgSWRlbnRpdHlTdG9yYWdlVHlwZSB9IGZyb20gXCIuLi8uLi9taXNjL2h0dHBzL2NlcnRzXCI7XG5pbXBvcnQgeyBkZXNjcmliZUhvc3QsIHJ1bk92ZXJTU0gsIHdyaXRlUmVtb3RlRmlsZSB9IGZyb20gXCIuLi9oZWxwZXJzL3JlbW90ZVNTSFwiO1xuaW1wb3J0IHsgbGF6eSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcbmltcG9ydCB7IHJ1bkluZmluaXRlUG9sbCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQgeyBzcGF3blByb21pc2UgfSBmcm9tIFwiLi4vaGVscGVycy9zcGF3blwiO1xuXG4vLyBXaGljaCBtYWNoaW5lcyB0aGlzIHN5c3RlbSB0YWxrcyB0bywga2VwdCBpbiB0aGUgc2FtZSByZXBvIGFzIHRoZSBzc2gga2V5cy4gVGhhdCByZXBvIGlzIGFscmVhZHlcbi8vIHNpZ25lZCwgYWxyZWFkeSBkaXN0cmlidXRlZCB0byBldmVyeSBtYWNoaW5lLCBhbmQgYWxyZWFkeSBoYXMgc29tZXdoZXJlIHRvIHJlY29yZCBhIHJlamVjdGlvbixcbi8vIHNvIGEgc2Vjb25kIG9uZSB3b3VsZCBvbmx5IGJlIGEgc2Vjb25kIHRoaW5nIHRvIGtlZXAgaW4gc3RlcC5cbmV4cG9ydCBjb25zdCBNQUNISU5FU19ESVIgPSBcIm1hY2hpbmVzXCI7XG5jb25zdCBSRVZPQ0FUSU9OU19ESVIgPSBcInJldm9jYXRpb25zXCI7XG5jb25zdCBSRVZPQ0FUSU9OX1JFQVNPTiA9IFwiYSBtYWNoaW5lIHRhbGtlZCB0byB1cyBmcm9tIGFuIHVuYXBwcm92ZWQgSVBcIjtcbi8vIFRoZSByZXZva2UgcmVwbyBpcyBwdWxsZWQgYXQgbW9zdCB0aGlzIG9mdGVuLiBBIGNoZWNrIGhhcHBlbnMgcGVyIHJlcXVlc3QsIGFuZCBhIHJlcXVlc3QgbXVzdFxuLy8gbm90IGNvc3QgYSByb3VuZCB0cmlwIHRvIGdpdGh1Yi5cbmNvbnN0IFJFVk9LRV9TWU5DX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xuLy8gQW5kIHRoZSBtYWNoaW5lIGxpc3QgaXMgcmUtcmVhZCBmcm9tIHRoZSBjaGVja291dCBvbiB0aGlzIGludGVydmFsLCBpbiB0aGUgYmFja2dyb3VuZC4gVGhlXG4vLyBjaGVja291dCBpdHNlbGYgb25seSBtb3ZlcyB3aGVuIHRoZSBkYWVtb24gcHVsbHMgaXQsIHdoaWNoIGlzIG9uIHRoZSBzYW1lIHNvcnQgb2YgaW50ZXJ2YWwsIHNvXG4vLyByZWFkaW5nIG1vcmUgb2Z0ZW4gdGhhbiB0aGlzIHdvdWxkIG9ubHkgcmUtcmVhZCB0aGUgc2FtZSBieXRlcy5cbmNvbnN0IE1BQ0hJTkVTX1JFRlJFU0hfSU5URVJWQUwgPSA2MCAqIDEwMDA7XG4vLyBIb3cgbG9uZyBhIGZhaWx1cmUgdG8gZmluZCB0aGUga2V5cyByZXBvIGlzIHJlbWVtYmVyZWQuIEEgbG9uZyBsaXZlZCBwcm9jZXNzIG1heSBzdGFydCBiZWZvcmVcbi8vIHRoZSBtYWNoaW5lIGlzIHNldCB1cCwgYW5kIHNob3VsZCBwaWNrIGl0IHVwIG9uY2UgaXQgaXMsIHdpdGhvdXQgYmVpbmcgcmVzdGFydGVkIC0gYnV0IGl0IG11c3Rcbi8vIG5vdCBwYXkgZm9yIHJlc29sdmluZyB0aGUgcmVwbyBvbiBldmVyeSByZXF1ZXN0IGVpdGhlci5cbmNvbnN0IFJFUE9fUkVUUllfREVMQVkgPSAxNSAqIDEwMDA7XG5jb25zdCBMT09QQkFDSyA9IFtcIjEyNy4wLjAuMVwiLCBcIjo6MVwiLCBcIjo6ZmZmZjoxMjcuMC4wLjFcIl07XG4vLyBUaGUgdHJ1c3RlZCBtYWNoaW5lIGxpc3QgaXMgcmUtcmVhZCBhdCBtb3N0IHRoaXMgb2Z0ZW4gd2hlbiBhIGNoZWNrIHJlamVjdHMsIHNvIGEgY2FsbGVyIHRoYXRcbi8vIHdhcyBqdXN0IGFkZGVkIGlzIHBpY2tlZCB1cCBxdWlja2x5IHdpdGhvdXQgbGV0dGluZyBhIGZsb29kIG9mIHJlamVjdGlvbnMgcmUtcmVhZCBldmVyeSB0aW1lLlxuY29uc3QgTUFDSElORVNfSU5WQUxJREFUSU9OX0lOVEVSVkFMID0gNjAgKiAxMDAwO1xubGV0IGxhc3RNYWNoaW5lc0ludmFsaWRhdGlvbiA9IDA7XG5cbi8qKiBPbmUgbWFjaGluZSB3ZSBhcmUgd2lsbGluZyB0byB0YWxrIHRvLCBhbmQgdGhlIGFkZHJlc3NlcyBpdCBtYXkgdGFsayB0byB1cyBmcm9tLiAqL1xuZXhwb3J0IHR5cGUgTWFjaGluZVN0YXRlID0ge1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwczogc3RyaW5nW107XG4gICAgYWRkZWRBdDogc3RyaW5nO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gcGF0aEV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKGZpbGVQYXRoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYWNoaW5lRmlsZVBhdGgocmVwb1BhdGg6IHN0cmluZywgbWFjaGluZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHJlcG9QYXRoLCBNQUNISU5FU19ESVIsIGAke21hY2hpbmVJZH0uanNvbmApO1xufVxuXG4vKiogVGhpcyBtYWNoaW5lJ3Mga2V5cyByZXBvLCB3b3JrZWQgb3V0IG9uY2UgYW5kIHRoZW4gcmVtZW1iZXJlZC5cblxuICAgIEEgZmFpbHVyZSBpcyByZW1lbWJlcmVkIHRvbywgYnV0IG9ubHkgYnJpZWZseTogYSBzZXJ2ZXIgbWF5IHdlbGwgc3RhcnQgYmVmb3JlIHRoZSBtYWNoaW5lIGhhc1xuICAgIGJlZW4gc2V0IHVwLCBhbmQgc2hvdWxkIHN0YXJ0IHdvcmtpbmcgd2hlbiBpdCBpcywgcmF0aGVyIHRoYW4gbmVlZGluZyBhIHJlc3RhcnQuICovXG5leHBvcnQgY29uc3Qga2V5c1JlcG8gPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgbG9va3VwID0gcmVzb2x2ZUtleXNSZXBvKCk7XG4gICAgbG9va3VwLmNhdGNoKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBrZXlzUmVwby5yZXNldCgpLCBSRVBPX1JFVFJZX0RFTEFZKS51bnJlZigpO1xuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCBsb29rdXA7XG59KTtcblxuLyoqIEV2ZXJ5IG1hY2hpbmUgYSBjaGVja291dCBsaXN0cy4gV2l0aG91dCBhIHJlcG8sIHRoaXMgbWFjaGluZSdzIG93bi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNYWNoaW5lcyhyZXBvUGF0aD86IHN0cmluZyk6IFByb21pc2U8TWFjaGluZVN0YXRlW10+IHtcbiAgICByZXR1cm4gWy4uLihhd2FpdCByZWFkTWFjaGluZXMocmVwb1BhdGggfHwgKGF3YWl0IGtleXNSZXBvKCkpLnJlcG9QYXRoKSkudmFsdWVzKCldO1xufVxuXG4vKiogVGhlIG1hY2hpbmVzIHRoZSBzaWduZWQgZmlsZXMgdm91Y2ggZm9yLiBPbmx5IHRoZSBtYWNoaW5lIGZpbGVzIGNvdmVyZWQgYnkgdGhlIHNpZ25hdHVyZSBhcmVcbiAgICByZWFkIC0gYW4gdW5zaWduZWQgbWFjaGluZXMvKi5qc29uIGlzIG5vdCBldmlkZW5jZSBvZiBhbnl0aGluZywgc28gcmVhZFNpZ25lZFJlcG8gaGFzIGFscmVhZHlcbiAgICBsZWZ0IGl0IG91dC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRUcnVzdGVkTWFjaGluZXMoKSB7XG4gICAgbGV0IHsgcmVwb1BhdGgsIHNvdXJjZVVSTCB9ID0gYXdhaXQga2V5c1JlcG8oKTtcbiAgICBsZXQgeyBmaWxlcyB9ID0gYXdhaXQgcmVhZFNpZ25lZFJlcG8oeyByZXBvUGF0aCwgc291cmNlVVJMIH0pO1xuICAgIGxldCBtYWNoaW5lczogTWFjaGluZVN0YXRlW10gPSBbXTtcbiAgICBmb3IgKGxldCBbZmlsZVBhdGgsIGNvbnRlbnRzXSBvZiBmaWxlcykge1xuICAgICAgICBsZXQgbmFtZSA9IGZpbGVQYXRoLnN0YXJ0c1dpdGgoYCR7TUFDSElORVNfRElSfS9gKSAmJiBmaWxlUGF0aC5zbGljZShNQUNISU5FU19ESVIubGVuZ3RoICsgMSkgfHwgXCJcIjtcbiAgICAgICAgaWYgKCFuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikgfHwgbmFtZS5pbmNsdWRlcyhcIi9cIikpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYWNoaW5lID0gcGFyc2VNYWNoaW5lRmlsZShuYW1lLCBjb250ZW50cy50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgICAgICBpZiAobWFjaGluZSkge1xuICAgICAgICAgICAgbWFjaGluZXMucHVzaChtYWNoaW5lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZXM7XG59XG5cbmNvbnN0IHRydXN0ZWRNYWNoaW5lcyA9IGxhenkoYXN5bmMgKCkgPT4ge1xuICAgIGxldCByZWFkID0gcmVhZFRydXN0ZWRNYWNoaW5lcygpO1xuICAgIHJlYWQuY2F0Y2goKCkgPT4gdHJ1c3RlZE1hY2hpbmVzLnJlc2V0KCkpO1xuICAgIHJldHVybiBhd2FpdCByZWFkO1xufSk7XG5cbmxldCByZWZyZXNoaW5nID0gZmFsc2U7XG5cbi8qKiBUaGUgbWFjaGluZXMgdGhpcyBzeXN0ZW0gdHJ1c3RzLCBhcyB0aGUgc2lnbmVkIHJlcG8gbGlzdHMgdGhlbS5cblxuICAgIEhlbGQgcmF0aGVyIHRoYW4gcmVhZCBwZXIgY2FsbCwgYW5kIHJlZnJlc2hlZCBpbiB0aGUgYmFja2dyb3VuZCwgc28gbm9ib2R5IGFza2luZyB3aGV0aGVyIGFcbiAgICBtYWNoaW5lIGlzIHRydXN0ZWQgd2FpdHMgZm9yIGEgZGlyZWN0b3J5IG9mIGZpbGVzIHRvIGJlIHJlYWQgYW5kIGEgc2lnbmF0dXJlIHRvIGJlIGNoZWNrZWQuIEFcbiAgICByZWZyZXNoIHRoYXQgZmFpbHMgbGVhdmVzIHRoZSBsaXN0IHdlIGFscmVhZHkgaGF2ZTogdGhlIGNoZWNrb3V0IGlzIG9ubHkgc3RhbGUsIG5vdCB3cm9uZy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRUcnVzdGVkTWFjaGluZXMoKTogUHJvbWlzZTxNYWNoaW5lU3RhdGVbXT4ge1xuICAgIGlmICghcmVmcmVzaGluZykge1xuICAgICAgICByZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICAgICAgcnVuSW5maW5pdGVQb2xsKE1BQ0hJTkVTX1JFRlJFU0hfSU5URVJWQUwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdHJ1c3RlZE1hY2hpbmVzLnNldChQcm9taXNlLnJlc29sdmUoYXdhaXQgcmVhZFRydXN0ZWRNYWNoaW5lcygpKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCByZS1yZWFkIHRoZSB0cnVzdGVkIG1hY2hpbmVzLCBrZWVwaW5nIHRoZSBvbmVzIHdlIGhhdmUuICR7ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0cnVzdGVkTWFjaGluZXMoKTtcbn1cblxuLyoqIFRoZSBtYWNoaW5lIGlkIG9mIGEgbWFjaGluZSByZWFjaGVkIG92ZXIgc3NoLCBnZW5lcmF0aW5nIGFuZCBpbnN0YWxsaW5nIGFuIGlkZW50aXR5IGZvciBpdCBpZlxuICAgIGl0IGhhcyBub25lIHVuZGVyIHRoaXMgZG9tYWluLiBUaGUgcHJpdmF0ZSBrZXkgZW5kcyB1cCBvbiB0aGF0IG1hY2hpbmUgYW5kIG5vd2hlcmUgZWxzZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZVJlbW90ZU1hY2hpbmVJZChob3N0OiBzdHJpbmcsIGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKERFVl9nZXRJZGVudGl0eUZpbGVQYXRoKGRvbWFpbikpO1xuICAgIGxldCBob21lID0gKGF3YWl0IHJ1bk92ZXJTU0goeyBob3N0LCBzY3JpcHQ6IGBlY2hvICRIT01FYCB9KSkuc3Rkb3V0LnRyaW0oKTtcbiAgICBpZiAoIWhvbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2hvc3R9IHRvIHJlcG9ydCBhIGhvbWUgZGlyZWN0b3J5LCBpdCByZXBvcnRlZCBub3RoaW5nYCk7XG4gICAgfVxuICAgIGxldCBjb250ZW50cyA9IGF3YWl0IHJ1bk92ZXJTU0goeyBob3N0LCBzY3JpcHQ6IGBjYXQgJHtob21lfS8ke2ZpbGVOYW1lfSAyPi9kZXYvbnVsbCB8fCB0cnVlYCB9KTtcbiAgICBpZiAoY29udGVudHMuc3Rkb3V0LnRyaW0oKSkge1xuICAgICAgICBsZXQgc3RvcmVkID0gSlNPTi5wYXJzZShjb250ZW50cy5zdGRvdXQpIGFzIElkZW50aXR5U3RvcmFnZVR5cGU7XG4gICAgICAgIHJldHVybiBnZXRNYWNoaW5lSWQoc3RvcmVkLmRvbWFpbiwgZG9tYWluKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYCR7ZGVzY3JpYmVIb3N0KGhvc3QpfSBoYXMgbm8gaWRlbnRpdHkgZm9yICR7ZG9tYWlufSwgZ2VuZXJhdGluZyBvbmVgKTtcbiAgICBsZXQgZ2VuZXJhdGVkID0gZ2VuZXJhdGVDQShkb21haW4pO1xuICAgIGxldCBzdG9yZWQ6IElkZW50aXR5U3RvcmFnZVR5cGUgPSB7XG4gICAgICAgIGRvbWFpbjogZ2VuZXJhdGVkLmRvbWFpbixcbiAgICAgICAgY2VydEI2NDogZ2VuZXJhdGVkLmNlcnQudG9TdHJpbmcoXCJiYXNlNjRcIiksXG4gICAgICAgIGtleUI2NDogZ2VuZXJhdGVkLmtleS50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICB9O1xuICAgIGF3YWl0IHdyaXRlUmVtb3RlRmlsZSh7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIGZpbGVQYXRoOiBgJHtob21lfS8ke2ZpbGVOYW1lfWAsXG4gICAgICAgIGNvbnRlbnRzOiBKU09OLnN0cmluZ2lmeShzdG9yZWQpLFxuICAgICAgICBmaWxlTW9kZTogXCI2MDBcIixcbiAgICAgICAgZGlyZWN0b3J5TW9kZTogXCI3MDBcIixcbiAgICB9KTtcbiAgICByZXR1cm4gZ2V0TWFjaGluZUlkKGdlbmVyYXRlZC5kb21haW4sIGRvbWFpbik7XG59XG5cbi8qKiBNYWtlcyBhIGNoZWNrb3V0IGxpc3QgZXhhY3RseSB0aGVzZSBtYWNoaW5lczogdGhvc2UgbmFtZWQgYXJlIHdyaXR0ZW4gd2l0aCB0aGUgYWRkcmVzc2VzIGdpdmVuLFxuICAgIGFuZCBhbnl0aGluZyBub3QgbmFtZWQgaXMgcmVtb3ZlZC4gU28gcmVhZCB0aGVtLCBjaGFuZ2Ugd2hhdCB5b3Ugd2FudCwgYW5kIHdyaXRlIHRoZSByZXN1bHQuXG5cbiAgICBUaGUgYWRkcmVzc2VzIGFyZSBwYXJ0IG9mIHNldHRpbmcgcmF0aGVyIHRoYW4gYSBzZXBhcmF0ZSBzdGVwLCBiZWNhdXNlIGEgbWFjaGluZSB3aXRoIG5vXG4gICAgYWRkcmVzcyBpdCBtYXkgdGFsayBmcm9tIGlzIG5vdCBhIG1hY2hpbmUgdGhhdCB3b3VsZCBldmVyIGJlIGFjY2VwdGVkIC0gdGhlcmUgaXMgbm8gc3RhdGUgd2hlcmVcbiAgICBuYW1pbmcgb25lIHdpdGhvdXQgdGhlbSBtZWFucyBhbnl0aGluZy5cblxuICAgIE5vdGhpbmcgaGVyZSBzaWducyBvciBjb21taXRzLiBUaGUgc2lnbmF0dXJlIGlzIHdoYXQgZXZlcnkgb3RoZXIgbWFjaGluZSBjaGVja3MgYmVmb3JlXG4gICAgYmVsaWV2aW5nIGFueSBvZiB0aGlzLCBhbmQgaXQgdGFrZXMgdGhlIGhhcmR3YXJlIGtleSwgc28gYHlhcm4gc2lnbmZpbGVzIGdpdGAgaXMgc3RpbGwgeW91cnMgdG9cbiAgICBydW4gYWZ0ZXJ3YXJkcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRNYWNoaW5lcyhjb25maWc6IHtcbiAgICByZXBvUGF0aD86IHN0cmluZztcbiAgICBtYWNoaW5lczogeyBtYWNoaW5lSWQ6IHN0cmluZzsgaXBzOiBzdHJpbmdbXSB9W107XG59KTogUHJvbWlzZTxNYWNoaW5lU3RhdGVbXT4ge1xuICAgIGxldCB7IG1hY2hpbmVzIH0gPSBjb25maWc7XG4gICAgbGV0IHJlcG9QYXRoID0gY29uZmlnLnJlcG9QYXRoIHx8IChhd2FpdCBrZXlzUmVwbygpKS5yZXBvUGF0aDtcbiAgICAvLyBXaGF0ZXZlciB3YXMgaGVsZCBpcyBub3cgc3RhbGUsIHdob2V2ZXIgcmVhZHMgaXQgbmV4dC5cbiAgICB0cnVzdGVkTWFjaGluZXMucmVzZXQoKTtcbiAgICBsZXQgZXhpc3RpbmcgPSBhd2FpdCByZWFkTWFjaGluZXMocmVwb1BhdGgpO1xuICAgIGxldCBkaXJlY3RvcnkgPSBwYXRoLmpvaW4ocmVwb1BhdGgsIE1BQ0hJTkVTX0RJUik7XG4gICAgbGV0IHdyaXR0ZW46IE1hY2hpbmVTdGF0ZVtdID0gW107XG4gICAgZm9yIChsZXQgbWFjaGluZSBvZiBtYWNoaW5lcykge1xuICAgICAgICBpZiAoIW1hY2hpbmUubWFjaGluZUlkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgbWFjaGluZUlkLCB3YXMgJHtKU09OLnN0cmluZ2lmeShtYWNoaW5lLm1hY2hpbmVJZCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYWNoaW5lLmlwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgRXhwZWN0ZWQgYWRkcmVzc2VzIGZvciAke21hY2hpbmUubWFjaGluZUlkfSwgd2FzIG5vbmUuIEEgbWFjaGluZSBpcyB0cnVzdGVkIGZyb21gXG4gICAgICAgICAgICAgICAgKyBgIHRoZSBhZGRyZXNzZXMgaXQgbWF5IHRhbGsgZnJvbSwgc28gbGVhdmUgaXQgb3V0IG9mIHRoZSBsaXN0IHRvIHJlbW92ZSBpdC5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpcHMgPSBtYWNoaW5lLmlwcy5maWx0ZXIoKGlwLCBpbmRleCkgPT4gaXAgJiYgbWFjaGluZS5pcHMuaW5kZXhPZihpcCkgPT09IGluZGV4KTtcbiAgICAgICAgbGV0IHN0YXRlOiBNYWNoaW5lU3RhdGUgPSB7XG4gICAgICAgICAgICBtYWNoaW5lSWQ6IG1hY2hpbmUubWFjaGluZUlkLFxuICAgICAgICAgICAgLy8gSW4gdGhlIG9yZGVyIGdpdmVuLCB3aXRob3V0IGR1cGxpY2F0ZXMsIHNvIHRoZSBmaWxlIHJlYWRzIHRoZSB3YXkgaXQgd2FzIHNldC5cbiAgICAgICAgICAgIGlwcyxcbiAgICAgICAgICAgIGFkZGVkQXQ6IGV4aXN0aW5nLmdldChtYWNoaW5lLm1hY2hpbmVJZCk/LmFkZGVkQXQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBmcy5ta2RpcihkaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUobWFjaGluZUZpbGVQYXRoKHJlcG9QYXRoLCBzdGF0ZS5tYWNoaW5lSWQpLCBKU09OLnN0cmluZ2lmeShzdGF0ZSwgdW5kZWZpbmVkLCA0KSArIFwiXFxuXCIpO1xuICAgICAgICB3cml0dGVuLnB1c2goc3RhdGUpO1xuICAgIH1cblxuICAgIC8vIFdoYXRldmVyIHRoZSByZXBvIGhhZCBhbmQgdGhlIGNhbGxlciBkaWQgbm90IG5hbWUgaXMgbm8gbG9uZ2VyIHRydXN0ZWQuXG4gICAgZm9yIChsZXQgbWFjaGluZUlkIG9mIGV4aXN0aW5nLmtleXMoKSkge1xuICAgICAgICBpZiAoIW1hY2hpbmVzLnNvbWUobWFjaGluZSA9PiBtYWNoaW5lLm1hY2hpbmVJZCA9PT0gbWFjaGluZUlkKSkge1xuICAgICAgICAgICAgYXdhaXQgZnMucm0obWFjaGluZUZpbGVQYXRoKHJlcG9QYXRoLCBtYWNoaW5lSWQpLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3cml0dGVuO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1hY2hpbmVGaWxlKG5hbWU6IHN0cmluZywgY29udGVudHM6IHN0cmluZyk6IE1hY2hpbmVTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudHMpO1xuICAgICAgICBsZXQgbWFjaGluZUlkID0gcGFyc2VkLm1hY2hpbmVJZCB8fCBuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJcIik7XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZCwgaXBzOiBwYXJzZWQuaXBzIHx8IFtdLCBhZGRlZEF0OiBwYXJzZWQuYWRkZWRBdCB8fCBcIlwiIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgdW5yZWFkYWJsZSBtYWNoaW5lIGZpbGUgJHtuYW1lfS4gJHtlfWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLyoqIEV2ZXJ5IG1hY2hpbmUgZmlsZSBvbiBkaXNrLiBGb3IgZWRpdGluZyB0aGUgcmVwbywgbm90IGZvciBkZWNpZGluZyB0cnVzdCAtIHRydXN0IHJlYWRzIHRoZVxuICAgIHNpZ25lZCBmaWxlcyB0aHJvdWdoIHJlYWRUcnVzdGVkTWFjaGluZXMuICovXG5hc3luYyBmdW5jdGlvbiByZWFkTWFjaGluZXMocmVwb1BhdGg6IHN0cmluZykge1xuICAgIGxldCBtYWNoaW5lcyA9IG5ldyBNYXA8c3RyaW5nLCBNYWNoaW5lU3RhdGU+KCk7XG4gICAgbGV0IGRpcmVjdG9yeSA9IHBhdGguam9pbihyZXBvUGF0aCwgTUFDSElORVNfRElSKTtcbiAgICBsZXQgbmFtZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpcmVjdG9yeSkuY2F0Y2goKCkgPT4gW10gYXMgc3RyaW5nW10pO1xuICAgIGZvciAobGV0IG5hbWUgb2YgbmFtZXMuc29ydCgpKSB7XG4gICAgICAgIGlmICghbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFjaGluZSA9IHBhcnNlTWFjaGluZUZpbGUobmFtZSwgYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGRpcmVjdG9yeSwgbmFtZSksIFwidXRmOFwiKS5jYXRjaCgoKSA9PiBcIlwiKSk7XG4gICAgICAgIGlmIChtYWNoaW5lKSB7XG4gICAgICAgICAgICBtYWNoaW5lcy5zZXQobWFjaGluZS5tYWNoaW5lSWQsIG1hY2hpbmUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYWNoaW5lcztcbn1cblxubGV0IGxhc3RSZXZva2VTeW5jID0gMDtcblxuLyoqIFB1bGxzIHRoZSBrZXlzIHJlcG8gYW5kIGl0cyByZXZva2UgcmVwbywgYXQgbW9zdCBvbmNlIGEgUkVWT0tFX1NZTkNfSU5URVJWQUwsIGJlY2F1c2UgdGhpcyBpc1xuICAgIGFza2VkIHBlciByZXF1ZXN0LiBCb3RoLCBzaW5jZSBlaXRoZXIgY2hhbmdpbmcgY2hhbmdlcyB0aGUgYW5zd2VyOiB0aGUga2V5cyByZXBvIGNhcnJpZXMgdGhlXG4gICAgbWFjaGluZXMgYW5kIHVucmV2b2tlcywgdGhlIHJldm9rZSByZXBvIGNhcnJpZXMgdGhlIHJldm9jYXRpb25zLiBBIHN5bmMgdGhhdCBmYWlscyBsZWF2ZXMgdGhlXG4gICAgY2hlY2tvdXRzIHdlIGFscmVhZHkgaGF2ZS4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN5bmNSZXZvY2F0aW9ucyhzb3VyY2VVUkw6IHN0cmluZykge1xuICAgIGlmIChEYXRlLm5vdygpIC0gbGFzdFJldm9rZVN5bmMgPCBSRVZPS0VfU1lOQ19JTlRFUlZBTCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxhc3RSZXZva2VTeW5jID0gRGF0ZS5ub3coKTtcbiAgICBhd2FpdCBzeW5jUmVwbyhzb3VyY2VVUkwpLmNhdGNoKGUgPT4gY29uc29sZS5sb2coYENvdWxkIG5vdCBzeW5jICR7c291cmNlVVJMfSwgdXNpbmcgdGhlIGNoZWNrb3V0IGFscmVhZHkgaGVyZS4gJHtlfWApKTtcbiAgICBhd2FpdCBzeW5jUmVwb0ZpbGVzKHJldm9rZVJlcG8oc291cmNlVVJMKSkuY2F0Y2goZSA9PiBjb25zb2xlLmxvZyhgQ291bGQgbm90IHN5bmMgJHtyZXZva2VSZXBvVVJMKHNvdXJjZVVSTCl9LCB1c2luZyB0aGUgcmV2b2NhdGlvbnMgYWxyZWFkeSBhYnNvcmJlZC4gJHtlfWApKTtcbn1cblxuLyoqIFdoYXQgdG8gcnVuIHRvIHRydXN0IGEgbWFjaGluZSB0aGF0IGhhcyBqdXN0IGJlZW4gcmVmdXNlZC5cblxuICAgIEV2ZXJ5dGhpbmcgaW4gaXQgaXMgYWxyZWFkeSBrbm93biB0byB3aG9ldmVyIGlzIGJlaW5nIHJlZnVzZWQ6IHRoZWlyIG1hY2hpbmUgaWQsIHRoZSBhZGRyZXNzIHdlXG4gICAgc2F3IHRoZW0gYXQsIGFuZCB0aGUgZG9tYWluIHRoZXkganVzdCB0YWxrZWQgdG8uIEhhbmRpbmcgaXQgYmFjayBzYXZlcyB0aGVtIHdvcmtpbmcgb3V0IHRoZVxuICAgIHBhcnRzIG9mIGEgY29tbWFuZCB0aGV5IGhhdmUgZXZlcnkgcmlnaHQgdG8ga25vdy4gUnVubmluZyBpdCBzdGlsbCB0YWtlcyB0aGUgaGFyZHdhcmUga2V5IG9uXG4gICAgdGhlIG1hY2hpbmUgdGhhdCBvd25zIHRoZSByZXBvLCBzbyB0ZWxsaW5nIHRoZW0gY29zdHMgbm90aGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRNYWNoaW5lQ29tbWFuZChjb25maWc6IHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmc7IGRvbWFpbj86IHN0cmluZyB9KSB7XG4gICAgbGV0IHsgbWFjaGluZUlkLCBpcCwgZG9tYWluIH0gPSBjb25maWc7XG4gICAgcmV0dXJuIGBUbyB0cnVzdCAke21hY2hpbmVJZH0sIHJ1bjogeWFybiBhZGRtYWNoaW5lICR7ZG9tYWluIHx8IFwiPGRvbWFpbj5cIn0gJHttYWNoaW5lSWR9ICR7aXB9IGdpdGA7XG59XG5cbi8qKiBTZW5kcyB0aGUgb25lIG5vdGlmaWNhdGlvbiB0aGlzIGZpbGUgaXMgYWxsb3dlZCB0byBzZW5kLCB3aGVuIGl0IGNhbi5cblxuICAgIFRoZSBkYWVtb24gY29uZmlndXJlcyBub3RpZmljYXRpb25zIG9uIHN0YXJ0dXAgYW5kIHdvdWxkIHNpbXBseSBzZW5kLiBUaGlzIGNhbiBhbHNvIHJ1biBpbiBzb21lXG4gICAgb3RoZXIgcHJvY2Vzcywgd2hpY2ggaGFzIG5vdCwgc28gdGhlIHdlYmhvb2sgaXMgcGlja2VkIHVwIGhlcmUgaWYgaXQgaXMgcmVhZGFibGUuIEEgbWFjaGluZVxuICAgIHdpdGggbm8gd2ViaG9vayBzZXQgdXAgc3RpbGwgcmVjb3JkcyB0aGUgcmV2b2NhdGlvbiAtIGJlaW5nIHVuYWJsZSB0byB0ZWxsIGFueW9uZSBpcyBub3QgYVxuICAgIHJlYXNvbiB0byBrZWVwIGFjY2VwdGluZyBhIG1hY2hpbmUgdGhhdCBpcyBiZWluZyBtaXN1c2VkLiAqL1xuYXN5bmMgZnVuY3Rpb24gbm90aWZ5QmVzdEVmZm9ydChoZWFkbGluZTogc3RyaW5nLCBib2R5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAoIWFyZURpc2NvcmROb3RpZmljYXRpb25zQ29uZmlndXJlZCgpKSB7XG4gICAgICAgICAgICAvLyBSZWFkIGZpcnN0OiBjb25maWd1cmVEaXNjb3JkTm90aWZpY2F0aW9ucyBleGl0cyB0aGUgcHJvY2VzcyB3aGVuIHRoZSBmaWxlIGlzIG1pc3NpbmcsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyByaWdodCBmb3IgdGhlIGRhZW1vbiBhdCBzdGFydHVwIGFuZCB3cm9uZyBmb3IgYSBsaWJyYXJ5IGNhbGwuXG4gICAgICAgICAgICBhd2FpdCBmcy5yZWFkRmlsZShERUZBVUxUX1dFQkhPT0tfRklMRV9QQVRILCBcInV0ZjhcIik7XG4gICAgICAgICAgICBhd2FpdCBjb25maWd1cmVEaXNjb3JkTm90aWZpY2F0aW9ucyh7IGZpbGVQYXRoOiBERUZBVUxUX1dFQkhPT0tfRklMRV9QQVRIIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IG5vdGlmeShoZWFkbGluZSwgYm9keSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IHNlbmQgYSBub3RpZmljYXRpb24gYWJvdXQgdGhpcywgaXQgaXMgb25seSBpbiB0aGUgbG9nLiAke2V9YCk7XG4gICAgfVxufVxuXG4vKiogUmVjb3JkcyB0aGF0IGEgbWFjaGluZSB3ZSBhY2NlcHQgdGFsa2VkIHRvIHVzIGZyb20gYW4gYWRkcmVzcyBpdCBpcyBub3QgYWxsb3dlZCBmcm9tLiBPbmUgcGVyXG4gICAgbWFjaGluZSBhbmQgYWRkcmVzcywgc28gYSBzZWNvbmQgYWRkcmVzcyBpcyBhIHNlY29uZCByZXZvY2F0aW9uIGFuZCBhbiB1bnJldm9rZSBvZiB0aGUgZmlyc3RcbiAgICBkb2VzIG5vdCBjb3ZlciBpdC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlY29yZE1hY2hpbmVSZXZvY2F0aW9uKGNvbmZpZzoge1xuICAgIHNvdXJjZVVSTDogc3RyaW5nO1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgaG9zdExhYmVsOiBzdHJpbmc7XG59KSB7XG4gICAgbGV0IHsgc291cmNlVVJMLCBtYWNoaW5lSWQsIGlwLCBob3N0TGFiZWwgfSA9IGNvbmZpZztcbiAgICAvLyBDbG9uZXMgaXQgaWYgaXQgaXMgbm90IGhlcmUgeWV0LCB3aGljaCBpcyB0aGUgdXN1YWwgc3RhdGUgb2YgYSBtYWNoaW5lIHRoYXQgaGFzIG5ldmVyIGhhZCB0b1xuICAgIC8vIHJldm9rZSBhbnl0aGluZy4gV2l0aG91dCB0aGlzIHRoZSBta2RpciBiZWxvdyB3b3VsZCBidWlsZCB0aGUgZGlyZWN0b3J5IGFueXdheSBhbmQgZ2l0IHdvdWxkXG4gICAgLy8gdGhlbiBiZSBydW4gc29tZXdoZXJlIHRoYXQgaXMgbm90IGEgY2hlY2tvdXQsIHNvIHRoZSByZXZvY2F0aW9uIHdhcyB3cml0dGVuIHdoZXJlIG5vdGhpbmdcbiAgICAvLyB3b3VsZCBldmVyIHJlYWQgaXQuXG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc3luY1JlcG9GaWxlcyhyZXZva2VSZXBvKHNvdXJjZVVSTCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IHJlY29yZCB0aGUgcmV2b2NhdGlvbiBvZiAke21hY2hpbmVJZH0sICR7cmV2b2tlUmVwb1VSTChzb3VyY2VVUkwpfSBjb3VsZCBub3QgYmUgcmVhZC4gJHtlfWApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCByZXBvUGF0aCA9IHJldm9rZVJlcG9QYXRoKHNvdXJjZVVSTCk7XG4gICAgbGV0IGtleVBhdGggPSBhd2FpdCBlbnN1cmVSZXZva2VLZXkoc291cmNlVVJMKTtcbiAgICBsZXQgcmV2b2NhdGlvbklkID0gbmV3UmV2b2NhdGlvbklkKG1hY2hpbmVJZCk7XG4gICAgbGV0IHJldm9rZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBsZXQgZGlyZWN0b3J5ID0gcGF0aC5qb2luKHJlcG9QYXRoLCBSRVZPQ0FUSU9OU19ESVIpO1xuICAgIGF3YWl0IGZzLm1rZGlyKGRpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihkaXJlY3RvcnksIGAke3Jldm9jYXRpb25JZH0uanNvbmApLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHJldm9jYXRpb25JZCxcbiAgICAgICAgbWFjaGluZUlkLFxuICAgICAgICBpcCxcbiAgICAgICAgcmV2b2tlZEF0LFxuICAgICAgICByZXZva2VkQnk6IGhvc3RMYWJlbCxcbiAgICAgICAgcmVhc29uOiBSRVZPQ0FUSU9OX1JFQVNPTixcbiAgICB9LCB1bmRlZmluZWQsIDQpICsgXCJcXG5cIik7XG5cbiAgICBhd2FpdCBydW5HaXQoeyBhcmdzOiBbXCJhZGRcIiwgXCItQVwiXSwgY3dkOiByZXBvUGF0aCwga2V5UGF0aCB9KTtcbiAgICBhd2FpdCBydW5HaXQoe1xuICAgICAgICBhcmdzOiBbXCItY1wiLCBcInVzZXIuZW1haWw9cG9ydHNlY3VyZUBsb2NhbGhvc3RcIiwgXCItY1wiLCBcInVzZXIubmFtZT1wb3J0c2VjdXJlXCIsIFwiY29tbWl0XCIsIFwiLW1cIiwgYHJldm9rZSAke3Jldm9jYXRpb25JZH1gXSxcbiAgICAgICAgY3dkOiByZXBvUGF0aCwga2V5UGF0aCxcbiAgICB9KTtcbiAgICBsZXQgcHVzaCA9IGF3YWl0IHJ1bkdpdCh7IGFyZ3M6IFtcInB1c2hcIiwgXCJvcmlnaW5cIiwgXCJIRUFEXCJdLCBjd2Q6IHJlcG9QYXRoLCBrZXlQYXRoLCBhbGxvd0ZhaWx1cmU6IHRydWUgfSk7XG4gICAgaWYgKHB1c2guc3RhdHVzICE9PSAwKSB7XG4gICAgICAgIC8vIEFub3RoZXIgbWFjaGluZSBtb3N0IGxpa2VseSByZWNvcmRlZCB0aGUgc2FtZSB0aGluZyBmaXJzdCwgYW5kIHRoZSBuZXh0IHJlYWQgcGlja3MgaXQgdXAuXG4gICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgcHVzaCB0aGUgcmV2b2NhdGlvbiBvZiAke21hY2hpbmVJZH0gZnJvbSAke2lwfS4gJHsocHVzaC5zdGRvdXQgKyBwdXNoLnN0ZGVycikudHJpbSgpfWApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG5vdGVSZXZvY2F0aW9uKHJldm9jYXRpb25JZCwgeyBpZGVudGl0eTogbWFjaGluZUlkLCBpcCwgcmV2b2tlZEF0LCByZXZva2VkQnk6IGhvc3RMYWJlbCB9KTtcbiAgICBjb25zb2xlLmxvZyhgUmV2b2tlZCAke21hY2hpbmVJZH0gZnJvbSAke2lwfSwgJHtyZXZvY2F0aW9uSWR9YCk7XG5cbiAgICAvLyBTYWlkIGJ5IHdob2V2ZXIgd3JvdGUgdGhlIHJldm9jYXRpb24sIG9uY2UsIHRoZSBzYW1lIGFzIGZvciBhbiBzc2gga2V5LiBNYWNoaW5lcyB0aGF0IG9ubHlcbiAgICAvLyByZWFkIGl0IGxhdGVyIHNheSBub3RoaW5nLCBvciBvbmUgZXZlbnQgd291bGQgYmUgcmVwb3J0ZWQgYnkgZXZlcnkgbWFjaGluZSB0aGF0IHNhdyBpdC5cbiAgICBhd2FpdCBub3RpZnlCZXN0RWZmb3J0KFxuICAgICAgICBgU1VTUElDSU9VUyBJUCAke2lwfSBGUk9aRSBNQUNISU5FICR7bWFjaGluZUlkfWAsXG4gICAgICAgIGBUcnVzdGVkIG1hY2hpbmUgJHttYWNoaW5lSWR9IHRhbGtlZCB0byB1cyBmcm9tICR7aXB9LCBhbiBhZGRyZXNzICR7bWFjaGluZUlkfSBpcyBub3RgXG4gICAgICAgICsgYCBhbGxvd2VkIGZyb20uIFRoZSBjYWxsZXIgcHJvdmVkIHBvc3Nlc3Npb24gb2YgJHttYWNoaW5lSWR9J3Mga2V5LCBzbyBlaXRoZXIgc29tZW9uZWBcbiAgICAgICAgKyBgIGVsc2UgaGFzIGEgY29weSBvZiB0aGUga2V5LCBvciB0aGUgbWFjaGluZSdzIGFkZHJlc3MgY2hhbmdlZC5gXG4gICAgICAgICsgYFxcblxcbk1hY2hpbmUgJHttYWNoaW5lSWR9IGlzIGZyb3plbiBldmVyeXdoZXJlIG5vdywgYW5kIG5vdGhpbmcgYWNjZXB0cyBjYWxscyBmcm9tICR7bWFjaGluZUlkfS5gXG4gICAgICAgICsgYFxcblxcbklmIHRoaXMgd2FzIGFuIGF0dGFjaywgcmVtb3ZlIFxcYG1hY2hpbmVzLyR7bWFjaGluZUlkfS5qc29uXFxgIGZyb20gXFxgJHtzb3VyY2VVUkx9XFxgIG5vdy5gXG4gICAgICAgICsgYFxcbklmIHRoZSBuZXcgYWRkcmVzcyBpcyBsZWdpdGltYXRlLCBydW4gXFxgeWFybiB1bnJldm9rZSBnaXRcXGAgaW4gXFxgJHtzb3VyY2VVUkx9XFxgLiBUaGVgXG4gICAgICAgICsgYCB1bnJldm9rZSBhbGxvd3MgJHttYWNoaW5lSWR9IGZyb20gJHtpcH0sIGFuZCB0YWtlcyBlZmZlY3QgYXMgZWFjaCBtYWNoaW5lIHBpY2tzIGl0IHVwLmBcbiAgICAgICAgKyBgXFxuXFxubWFjaGluZTogXFxgJHttYWNoaW5lSWR9XFxgYFxuICAgICAgICArIGBcXG5mcm96ZW4gYnk6IFxcYCR7aG9zdExhYmVsfVxcYGBcbiAgICApO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG4vKiogV2hldGhlciB3ZSB3aWxsIHRhbGsgdG8gdGhpcyBtYWNoaW5lLCBjb21pbmcgZnJvbSB0aGlzIGFkZHJlc3MuXG5cbiAgICBCb3RoIGhhbHZlcyBhcmUgcmVxdWlyZWQgYW5kIG5laXRoZXIgaXMgYSBndWVzczogdGhlIGNhbGxlciBrbm93cyB0aGUgbWFjaGluZSBpZCBiZWNhdXNlIHRoZVxuICAgIGNvbm5lY3Rpb24gcHJvdmVkIGl0LCBhbmQga25vd3MgdGhlIGFkZHJlc3MgYmVjYXVzZSB0aGUgcGFja2V0cyBjYW1lIGZyb20gdGhlcmUuIEEgbWFjaGluZSB3ZVxuICAgIGRvIG5vdCBsaXN0IGlzIHNpbXBseSBub3QgYWNjZXB0ZWQuIEEgbWFjaGluZSB3ZSBkbyBsaXN0LCBhcnJpdmluZyBmcm9tIGFuIGFkZHJlc3MgaXQgZG9lcyBub3RcbiAgICBoYXZlLCBpcyB0cmVhdGVkIGFzIHRoZSBzYW1lIGtpbmQgb2YgZXZlbnQgYXMgYSBzdG9sZW4gc3NoIGtleSAtIGl0IGlzIHJldm9rZWQgZXZlcnl3aGVyZSwgYW5kXG4gICAgc3RheXMgcmV2b2tlZCB1bnRpbCBhbiB1bnJldm9rZSBhbGxvd3MgdGhhdCBtYWNoaW5lIGZyb20gdGhhdCBhZGRyZXNzLlxuXG4gICAgU2F5cyB3aHkgd2hlbiB0aGUgYW5zd2VyIGlzIG5vLCBiZWNhdXNlIHRoZSB0aHJlZSB3YXlzIHRvIGJlIHJlZnVzZWQgYXJlIGVudGlyZWx5IGRpZmZlcmVudFxuICAgIHRoaW5ncyB0byBhIHBlcnNvbiByZWFkaW5nIGl0OiBuZXZlciB0cnVzdGVkIGF0IGFsbCwgdHJ1c3RlZCBidXQgZnJvemVuLCBvciB0cnVzdGVkIGFuZCB0YWxraW5nXG4gICAgZnJvbSBzb21ld2hlcmUgaXQgc2hvdWxkIG5vdCBiZS5cblxuICAgIFRocm93cyB3aGVuIHRoZSByZXBvIGl0c2VsZiBjYW5ub3QgYmUgcmVhZCBvciBpcyBub3Qgc2lnbmVkLCByYXRoZXIgdGhhbiBhbnN3ZXJpbmcgZmFsc2U6IHRoYXRcbiAgICBpcyBhIGJyb2tlbiBpbnN0YWxsYXRpb24sIG5vdCBhIHJlamVjdGVkIG1hY2hpbmUsIGFuZCB0aGUgdHdvIGRlc2VydmUgZGlmZmVyZW50IGhhbmRsaW5nLiAqL1xuZXhwb3J0IHR5cGUgTWFjaGluZVZlcmRpY3QgPSB7IGFjY2VwdGVkOiBib29sZWFuOyByZWFzb246IHN0cmluZyB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNNYWNoaW5lQWNjZXB0ZWQoY29uZmlnOiB7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICAvLyBVc2VkIGZvciBsb2NhbCBsb29wYmFjayBhY2NlcHRhbmNlLCBhbmQgZm9yIGJldHRlciBlcnJvciBtZXNzYWdlcy5cbiAgICBkb21haW4/OiBzdHJpbmc7XG59KTogUHJvbWlzZTxNYWNoaW5lVmVyZGljdD4ge1xuICAgIGxldCB7IG1hY2hpbmVJZCwgaXAsIGRvbWFpbiB9ID0gY29uZmlnO1xuICAgIGlmICghbWFjaGluZUlkIHx8ICFpcCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgbWFjaGluZUlkIGFuZCBhbiBpcCwgd2FzICR7SlNPTi5zdHJpbmdpZnkobWFjaGluZUlkKX0gYW5kICR7SlNPTi5zdHJpbmdpZnkoaXApfWApO1xuICAgIH1cblxuICAgIC8vIFRoZSB3aG9sZSBjaGVjaywgcGx1cyB3aGV0aGVyIGl0IGZyb3plIHRoZSBtYWNoaW5lLiBBIHJlamVjdGlvbiB0aGF0IGZyb3plIGl0IGlzIGZpbmFsLCBzb1xuICAgIC8vIHRoZXJlIGlzIG5vdGhpbmcgdG8gZ2FpbiBmcm9tIGxvb2tpbmcgYWdhaW4uIEFueSBvdGhlciByZWplY3Rpb24gbWlnaHQganVzdCBiZSBhIHN0YWxlIHZpZXcgLVxuICAgIC8vIGEgbWFjaGluZSBhZGRlZCBzZWNvbmRzIGFnbyB0aGF0IG91ciBjYWNoZWQgbGlzdCBoYXMgbm90IGNhdWdodCB1cCB0byAtIHNvIGl0IGlzIHdvcnRoIG9uZVxuICAgIC8vIGZyZXNoIGxvb2ssIHdoaWNoIGlzIHdoYXQgdGhlIHJldHJ5IGJlbG93IGRvZXMuXG4gICAgbGV0IGV2YWx1YXRlID0gYXN5bmMgKCk6IFByb21pc2U8eyB2ZXJkaWN0OiBNYWNoaW5lVmVyZGljdDsgZnJvemU6IGJvb2xlYW4gfT4gPT4ge1xuICAgICAgICBpZiAoTE9PUEJBQ0suaW5jbHVkZXMoaXApICYmICEhZG9tYWluICYmIG1hY2hpbmVJZCA9PT0gZ2V0T3duTWFjaGluZUlkKGRvbWFpbikpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IHRydWUsIHJlYXNvbjogXCJcIiB9LCBmcm96ZTogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeyBzb3VyY2VVUkwgfSA9IGF3YWl0IGtleXNSZXBvKCk7XG4gICAgICAgIGF3YWl0IHN5bmNSZXZvY2F0aW9ucyhzb3VyY2VVUkwpO1xuICAgICAgICAvLyBUaGUgbGlzdCBoYXMgcmV2b2NhdGlvbnMgYWxyZWFkeSBhcHBsaWVkIC0gcmVhZFNpZ25lZFJlcG8gZHJvcHMgZnJvemVuIG1hY2hpbmVzIC0gc28gYVxuICAgICAgICAvLyBtYWNoaW5lIGluIGl0IGlzIHRydXN0ZWQsIGFuZCBhIG1hY2hpbmUgbWlzc2luZyBmcm9tIGl0IGlzIGVpdGhlciB1bmtub3duIG9yIGZyb3plbi5cbiAgICAgICAgbGV0IG1hY2hpbmUgPSAoYXdhaXQgZ2V0VHJ1c3RlZE1hY2hpbmVzKCkpLmZpbmQoZW50cnkgPT4gZW50cnkubWFjaGluZUlkID09PSBtYWNoaW5lSWQpO1xuICAgICAgICBpZiAoIW1hY2hpbmUpIHtcbiAgICAgICAgICAgIGxldCBmcm96ZW4gPSBpZGVudGl0eUZyb3plbkJ5KG1hY2hpbmVJZCk7XG4gICAgICAgICAgICBpZiAoZnJvemVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmVyZGljdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBNYWNoaW5lICR7bWFjaGluZUlkfSBpcyBmcm96ZW46IGl0IHdhcyB1c2VkIGZyb20gJHtmcm96ZW4uaXAgfHwgXCJhbiBhZGRyZXNzIG5vdGhpbmcgcmVjb3JkZWRcIn1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBgJHtmcm96ZW4ucmV2b2tlZEF0ICYmIGAsIGF0ICR7ZnJvemVuLnJldm9rZWRBdH1gIHx8IFwiXCJ9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYCR7ZnJvemVuLnJldm9rZWRCeSAmJiBgLCBub3RpY2VkIGJ5ICR7ZnJvemVuLnJldm9rZWRCeX1gIHx8IFwiXCJ9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYCwgd2hpY2ggaXMgbm90IGFuIGFkZHJlc3MgaXQgaXMgYWxsb3dlZCBmcm9tIChyZXZvY2F0aW9uICR7ZnJvemVuLnJldm9jYXRpb25JZH0pLmBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGAgVG8gZ2l2ZSBpdCBhY2Nlc3MgYWdhaW4sIHJ1biBpbiB0aGUga2V5cyByZXBvOiB5YXJuIHVucmV2b2tlIGdpdGAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZyb3plOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgdmVyZGljdDogeyBhY2NlcHRlZDogZmFsc2UsIHJlYXNvbjogYE1hY2hpbmUgJHttYWNoaW5lSWR9IGlzIG5vdCB0cnVzdGVkLiAke2FkZE1hY2hpbmVDb21tYW5kKHsgbWFjaGluZUlkLCBpcCwgZG9tYWluIH0pfWAgfSwgZnJvemU6IGZhbHNlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWFjaGluZS5pcHMuaW5jbHVkZXMoaXApKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2ZXJkaWN0OiB7IGFjY2VwdGVkOiB0cnVlLCByZWFzb246IFwiXCIgfSwgZnJvemU6IGZhbHNlIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMaXN0ZWQsIGJ1dCB0YWxraW5nIHRvIHVzIGZyb20gc29tZXdoZXJlIGl0IHNob3VsZCBub3QgYmUuIFJlY29yZGVkIG9uY2UgZm9yIHRoaXMgbWFjaGluZVxuICAgICAgICAvLyBhbmQgYWRkcmVzcywgc28gYmVpbmcgdGFsa2VkIHRvIHJlcGVhdGVkbHkgZG9lcyBub3Qgd3JpdGUgcmVwZWF0ZWRseS5cbiAgICAgICAgaWYgKCFpc1BhaXJSZXZva2VkKG1hY2hpbmVJZCwgaXApICYmICFpc1BhaXJVbnJldm9rZWQobWFjaGluZUlkLCBpcCkpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgdGhlIG1hY2hpbmUgdGhhdCBhY3R1YWxseSB3cm90ZSB0aGUgcmV2b2NhdGlvbiBtYXkgc2F5IGl0IGZyb3plIGFueXRoaW5nLiBPbmVcbiAgICAgICAgICAgIC8vIHRoYXQgY291bGQgbm90IHJlYWNoIHRoZSByZXZva2UgcmVwbyBoYXMgcmVmdXNlZCB0aGlzIGNhbGwgYW5kIG5vdGhpbmcgbW9yZS5cbiAgICAgICAgICAgIGxldCBmcm96ZSA9IGF3YWl0IHJlY29yZE1hY2hpbmVSZXZvY2F0aW9uKHsgc291cmNlVVJMLCBtYWNoaW5lSWQsIGlwLCBob3N0TGFiZWw6IG9zLmhvc3RuYW1lKCkgfSk7XG4gICAgICAgICAgICBsZXQgcmVhc29uID0gZnJvemVcbiAgICAgICAgICAgICAgICAmJiBgTWFjaGluZSAke21hY2hpbmVJZH0gaXMgbm90IGFsbG93ZWQgZnJvbSAke2lwfSwgYW5kIGlzIG5vdyBmcm96ZW4gZXZlcnl3aGVyZS5gXG4gICAgICAgICAgICAgICAgfHwgYE1hY2hpbmUgJHttYWNoaW5lSWR9IGlzIG5vdCBhbGxvd2VkIGZyb20gJHtpcH0uIEl0IGNvdWxkIG5vdCBiZSBmcm96ZW4sICR7cmV2b2tlUmVwb1VSTChzb3VyY2VVUkwpfSBjb3VsZCBub3QgYmUgd3JpdHRlbi5gO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmVyZGljdDogeyBhY2NlcHRlZDogZmFsc2UsIHJlYXNvbiB9LCBmcm96ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZlcmRpY3Q6IHsgYWNjZXB0ZWQ6IGZhbHNlLCByZWFzb246IGBNYWNoaW5lICR7bWFjaGluZUlkfSBpcyBub3QgYWxsb3dlZCBmcm9tICR7aXB9LmAgfSwgZnJvemU6IGZhbHNlIH07XG4gICAgfTtcblxuICAgIGxldCB7IHZlcmRpY3QsIGZyb3plIH0gPSBhd2FpdCBldmFsdWF0ZSgpO1xuICAgIC8vIEFuIGFjY2VwdCwgb3IgYSByZWplY3Rpb24gdGhhdCBqdXN0IGZyb3plIHRoZSBtYWNoaW5lLCBpcyB0aGUgZmluYWwgd29yZC4gQW55IG90aGVyIHJlamVjdGlvblxuICAgIC8vIG1pZ2h0IGp1c3QgYmUgYSBzdGFsZSBsaXN0IC0gYSBtYWNoaW5lIGFkZGVkIHNlY29uZHMgYWdvIHdlIGhhdmUgbm90IGNhdWdodCB1cCB0byAtIHNvIGl0IGlzXG4gICAgLy8gd29ydGggb25lIGZyZXNoIGxvb2suXG4gICAgaWYgKHZlcmRpY3QuYWNjZXB0ZWQgfHwgZnJvemUpIHtcbiAgICAgICAgcmV0dXJuIHZlcmRpY3Q7XG4gICAgfVxuICAgIC8vIFJlLXJlYWQgdGhlIGxpc3QgYXQgbW9zdCBvbmNlIGEgbWludXRlLCBzbyBhIGJ1cnN0IG9mIGJhZCBjYWxsZXJzIGNhbm5vdCBtYWtlIHVzIHJlLXJlYWQgb25cbiAgICAvLyBldmVyeSBvbmUgb2YgdGhlbS4gRm9yY2UgdGhlIGNoZWNrb3V0IGJhY2sgdG8gdGhlIHJlbW90ZSBmaXJzdCwgc28gYSBtYWNoaW5lIGFkZGVkIGFuZCBzaWduZWRcbiAgICAvLyBzZWNvbmRzIGFnbyBpcyBwaWNrZWQgdXAgZXZlbiBpZiB0aGUgY2hlY2tvdXQgd2FzIGxlZnQgZGlydHksIHRoZW4gdGFrZSB0aGUgZnJlc2ggbG9vayBhc1xuICAgIC8vIGZpbmFsLlxuICAgIGlmIChEYXRlLm5vdygpIC0gbGFzdE1hY2hpbmVzSW52YWxpZGF0aW9uID4gTUFDSElORVNfSU5WQUxJREFUSU9OX0lOVEVSVkFMKSB7XG4gICAgICAgIGxhc3RNYWNoaW5lc0ludmFsaWRhdGlvbiA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCB7IHNvdXJjZVVSTCB9ID0gYXdhaXQga2V5c1JlcG8oKTtcbiAgICAgICAgYXdhaXQgc3luY1JlcG8oc291cmNlVVJMLCB7IGZvcmNlVXBkYXRlOiB0cnVlIH0pLmNhdGNoKGUgPT4gY29uc29sZS5sb2coYENvdWxkIG5vdCBmb3JjZSB1cGRhdGUgJHtzb3VyY2VVUkx9LiAke2V9YCkpO1xuICAgICAgICB0cnVzdGVkTWFjaGluZXMucmVzZXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCBldmFsdWF0ZSgpKS52ZXJkaWN0O1xufVxuIl19
|
|
395
|
+
/* _JS_SOURCE_HASH = "0d769879cc25963bc2f5cea2afae2bf6bbb8bb575665e942286d967e11aaedee"; */
|
|
@@ -1,21 +1,114 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
const certs_1 = require("../../misc/https/certs");
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const keysRepo_1 = require("../authorizedKeys/keysRepo");
|
|
5
|
+
const readSignedRepo_1 = require("../authorizedKeys/daemon/readSignedRepo");
|
|
6
|
+
const repoFiles_1 = require("../authorizedKeys/daemon/repoFiles");
|
|
7
|
+
const machines_1 = require("./machines");
|
|
8
|
+
// Who this machine is, and who it believes everyone else is. One command, because working out
|
|
9
|
+
// whether a machine is trusted means holding both halves at once: our own id under each domain,
|
|
10
|
+
// and the ids the signed repo lists with the addresses each is allowed from.
|
|
11
|
+
async function printOwnIds() {
|
|
7
12
|
let domains = (0, certs_1.DEV_listIdentityDomains)();
|
|
8
13
|
if (!domains.length) {
|
|
9
|
-
|
|
14
|
+
console.log(`This machine has no identities yet. One is created the first time it needs one.`);
|
|
15
|
+
return;
|
|
10
16
|
}
|
|
17
|
+
console.log(`This machine:`);
|
|
18
|
+
let ids = [];
|
|
11
19
|
for (let domain of domains) {
|
|
12
20
|
await (0, certs_1.loadIdentityCA)(domain);
|
|
13
|
-
|
|
21
|
+
let machineId = (0, certs_1.getOwnMachineId)(domain);
|
|
22
|
+
ids.push(machineId);
|
|
23
|
+
console.log(` ${domain} ${machineId}`);
|
|
24
|
+
}
|
|
25
|
+
return ids;
|
|
26
|
+
}
|
|
27
|
+
async function printRepo(ownIds) {
|
|
28
|
+
let repo;
|
|
29
|
+
try {
|
|
30
|
+
repo = await (0, keysRepo_1.resolveKeysRepo)();
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
console.log(`\nNo keys repo to read, so there is nothing to say about who is trusted. ${e}`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
let { repoPath, sourceURL } = repo;
|
|
37
|
+
console.log(`\nKeys repo ${repoPath}`);
|
|
38
|
+
console.log(` from ${sourceURL}`);
|
|
39
|
+
// Pulled first, or a revocation another machine wrote minutes ago is missing from a picture
|
|
40
|
+
// whose whole purpose is to explain why something is being refused.
|
|
41
|
+
try {
|
|
42
|
+
await (0, repoFiles_1.syncRepoFiles)((0, repoFiles_1.revokeRepo)(sourceURL));
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
console.log(` Could not pull the revocations, showing the ones already here. ${e}`);
|
|
46
|
+
}
|
|
47
|
+
let files;
|
|
48
|
+
try {
|
|
49
|
+
files = (await (0, readSignedRepo_1.readSignedRepo)({ repoPath, sourceURL })).files;
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
console.log(`\nIts signature does not check out, so nothing in it counts. ${e}`);
|
|
53
|
+
return;
|
|
14
54
|
}
|
|
55
|
+
// Only the machine files the signature covers - readSignedRepo has already dropped anything
|
|
56
|
+
// unsigned or frozen, so this is the list this machine would actually accept.
|
|
57
|
+
let machines = [];
|
|
58
|
+
for (let [filePath, contents] of files) {
|
|
59
|
+
if (!filePath.startsWith(`${machines_1.MACHINES_DIR}/`) || !filePath.endsWith(".json")) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
let parsed = JSON.parse(contents.toString("utf8"));
|
|
64
|
+
machines.push({
|
|
65
|
+
machineId: parsed.machineId || filePath.slice(machines_1.MACHINES_DIR.length + 1, -".json".length),
|
|
66
|
+
ips: parsed.ips || [],
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
console.log(` Ignoring unreadable ${filePath}. ${e}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
console.log(`\nTrusted machines (${machines.length}), and the addresses each may talk from:`);
|
|
74
|
+
for (let machine of machines) {
|
|
75
|
+
let us = ownIds.includes(machine.machineId) && " <- this machine" || "";
|
|
76
|
+
console.log(` ${machine.machineId} ${machine.ips.join(", ") || "(no addresses, so it is never accepted)"}${us}`);
|
|
77
|
+
}
|
|
78
|
+
// Frozen machines are already gone from the list above, which is exactly why they have to be
|
|
79
|
+
// named here - otherwise a machine being refused everywhere simply is not mentioned anywhere.
|
|
80
|
+
let revocations = (0, readSignedRepo_1.listRevocations)();
|
|
81
|
+
let frozen = revocations.filter(revocation => !revocation.forgiven);
|
|
82
|
+
console.log(`\nFrozen (${frozen.length}), refused everywhere until unrevoked:`);
|
|
83
|
+
for (let revocation of frozen) {
|
|
84
|
+
let us = ownIds.includes(revocation.identity) && " <- this machine" || "";
|
|
85
|
+
console.log(` ${revocation.identity} used from ${revocation.ip || "an unrecorded address"}`
|
|
86
|
+
+ `${revocation.revokedAt && ` at ${revocation.revokedAt}` || ""}`
|
|
87
|
+
+ `${revocation.revokedBy && `, noticed by ${revocation.revokedBy}` || ""}${us}`);
|
|
88
|
+
console.log(` ${revocation.revocationId}`);
|
|
89
|
+
}
|
|
90
|
+
if (!frozen.length) {
|
|
91
|
+
console.log(` (nothing is frozen)`);
|
|
92
|
+
}
|
|
93
|
+
let forgiven = revocations.filter(revocation => revocation.forgiven);
|
|
94
|
+
if (forgiven.length) {
|
|
95
|
+
console.log(`\nRevoked, then allowed again (${forgiven.length}):`);
|
|
96
|
+
for (let revocation of forgiven) {
|
|
97
|
+
console.log(` ${revocation.identity} from ${revocation.ip || "an unrecorded address"}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
console.log(`\nSigned files (${files.size}):`);
|
|
101
|
+
for (let filePath of [...files.keys()].sort()) {
|
|
102
|
+
console.log(` ${filePath}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function main() {
|
|
106
|
+
let ownIds = await printOwnIds();
|
|
107
|
+
await printRepo(ownIds || []);
|
|
15
108
|
}
|
|
16
109
|
main().catch(e => {
|
|
17
110
|
console.error(`${e}`);
|
|
18
111
|
process.exitCode = 1;
|
|
19
112
|
}).finally(() => process.exit());
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRNYWNoaW5lSWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmludE1hY2hpbmVJZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtEQUFrRztBQUVsRyxnR0FBZ0c7QUFDaEcsNkVBQTZFO0FBQzdFLEtBQUssVUFBVSxJQUFJO0lBQ2YsSUFBSSxPQUFPLEdBQUcsSUFBQSwrQkFBdUIsR0FBRSxDQUFDO0lBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBQSxzQkFBYyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLElBQUksSUFBQSx1QkFBZSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0FBQ0wsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFVl9saXN0SWRlbnRpdHlEb21haW5zLCBnZXRPd25NYWNoaW5lSWQsIGxvYWRJZGVudGl0eUNBIH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcblxuLy8gUHJpbnRzIHRoaXMgbWFjaGluZSdzIGlkIHVuZGVyIGV2ZXJ5IGRvbWFpbiBpdCBoYXMgYW4gaWRlbnRpdHkgZm9yLiBBIG1hY2hpbmUgaGFzIGEgZGlmZmVyZW50XG4vLyBpZGVudGl0eSwgYW5kIHNvIGEgZGlmZmVyZW50IG1hY2hpbmUgaWQsIHVuZGVyIGV2ZXJ5IGRvbWFpbiBpdCBydW5zIHVuZGVyLlxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgICBsZXQgZG9tYWlucyA9IERFVl9saXN0SWRlbnRpdHlEb21haW5zKCk7XG4gICAgaWYgKCFkb21haW5zLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgbWFjaGluZSBoYXMgbm8gaWRlbnRpdGllc2ApO1xuICAgIH1cbiAgICBmb3IgKGxldCBkb21haW4gb2YgZG9tYWlucykge1xuICAgICAgICBhd2FpdCBsb2FkSWRlbnRpdHlDQShkb21haW4pO1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtkb21haW59ICR7Z2V0T3duTWFjaGluZUlkKGRvbWFpbil9YCk7XG4gICAgfVxufVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihgJHtlfWApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xufSkuZmluYWxseSgoKSA9PiBwcm9jZXNzLmV4aXQoKSk7XG4iXX0//=
|
|
21
|
-
/* _JS_SOURCE_HASH = "
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRNYWNoaW5lSWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmludE1hY2hpbmVJZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtEQUFrRztBQUNsRyx5REFBNkQ7QUFDN0QsNEVBQTBGO0FBQzFGLGtFQUErRTtBQUMvRSx5Q0FBMEM7QUFFMUMsOEZBQThGO0FBQzlGLGdHQUFnRztBQUNoRyw2RUFBNkU7QUFFN0UsS0FBSyxVQUFVLFdBQVc7SUFDdEIsSUFBSSxPQUFPLEdBQUcsSUFBQSwrQkFBdUIsR0FBRSxDQUFDO0lBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO1FBQy9GLE9BQU87SUFDWCxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3QixJQUFJLEdBQUcsR0FBYSxFQUFFLENBQUM7SUFDdkIsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUEsc0JBQWMsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixJQUFJLFNBQVMsR0FBRyxJQUFBLHVCQUFlLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sTUFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELEtBQUssVUFBVSxTQUFTLENBQUMsTUFBZ0I7SUFDckMsSUFBSSxJQUFJLENBQUM7SUFDVCxJQUFJLENBQUM7UUFDRCxJQUFJLEdBQUcsTUFBTSxJQUFBLDBCQUFlLEdBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsNEVBQTRFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0YsT0FBTztJQUNYLENBQUM7SUFDRCxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztJQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksU0FBUyxFQUFFLENBQUMsQ0FBQztJQUVyQyw0RkFBNEY7SUFDNUYsb0VBQW9FO0lBQ3BFLElBQUksQ0FBQztRQUNELE1BQU0sSUFBQSx5QkFBYSxFQUFDLElBQUEsc0JBQVUsRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLENBQUM7UUFDRCxLQUFLLEdBQUcsQ0FBQyxNQUFNLElBQUEsK0JBQWMsRUFBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2xFLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixPQUFPO0lBQ1gsQ0FBQztJQUVELDRGQUE0RjtJQUM1Riw4RUFBOEU7SUFDOUUsSUFBSSxRQUFRLEdBQTJDLEVBQUUsQ0FBQztJQUMxRCxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyx1QkFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxTQUFTO1FBQ2IsQ0FBQztRQUNELElBQUksQ0FBQztZQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ25ELFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyx1QkFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN2RixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFO2FBQ3hCLENBQUMsQ0FBQztRQUNQLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixRQUFRLENBQUMsTUFBTSwwQ0FBMEMsQ0FBQyxDQUFDO0lBQzlGLEtBQUssSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDM0IsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksbUJBQW1CLElBQUksRUFBRSxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxPQUFPLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHlDQUF5QyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekgsQ0FBQztJQUVELDZGQUE2RjtJQUM3Riw4RkFBOEY7SUFDOUYsSUFBSSxXQUFXLEdBQUcsSUFBQSxnQ0FBZSxHQUFFLENBQUM7SUFDcEMsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsQ0FBQyxDQUFDO0lBQ2hGLEtBQUssSUFBSSxVQUFVLElBQUksTUFBTSxFQUFFLENBQUM7UUFDNUIsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLElBQUksRUFBRSxDQUFDO1FBQzNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxVQUFVLENBQUMsUUFBUSxlQUFlLFVBQVUsQ0FBQyxFQUFFLElBQUksdUJBQXVCLEVBQUU7Y0FDekYsR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLE9BQU8sVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtjQUNoRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ25FLEtBQUssSUFBSSxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxRQUFRLFVBQVUsVUFBVSxDQUFDLEVBQUUsSUFBSSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMvQyxLQUFLLElBQUksUUFBUSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDTCxDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7SUFDZixJQUFJLE1BQU0sR0FBRyxNQUFNLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVWX2xpc3RJZGVudGl0eURvbWFpbnMsIGdldE93bk1hY2hpbmVJZCwgbG9hZElkZW50aXR5Q0EgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUtleXNSZXBvIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2tleXNSZXBvXCI7XG5pbXBvcnQgeyBsaXN0UmV2b2NhdGlvbnMsIHJlYWRTaWduZWRSZXBvIH0gZnJvbSBcIi4uL2F1dGhvcml6ZWRLZXlzL2RhZW1vbi9yZWFkU2lnbmVkUmVwb1wiO1xuaW1wb3J0IHsgcmV2b2tlUmVwbywgc3luY1JlcG9GaWxlcyB9IGZyb20gXCIuLi9hdXRob3JpemVkS2V5cy9kYWVtb24vcmVwb0ZpbGVzXCI7XG5pbXBvcnQgeyBNQUNISU5FU19ESVIgfSBmcm9tIFwiLi9tYWNoaW5lc1wiO1xuXG4vLyBXaG8gdGhpcyBtYWNoaW5lIGlzLCBhbmQgd2hvIGl0IGJlbGlldmVzIGV2ZXJ5b25lIGVsc2UgaXMuIE9uZSBjb21tYW5kLCBiZWNhdXNlIHdvcmtpbmcgb3V0XG4vLyB3aGV0aGVyIGEgbWFjaGluZSBpcyB0cnVzdGVkIG1lYW5zIGhvbGRpbmcgYm90aCBoYWx2ZXMgYXQgb25jZTogb3VyIG93biBpZCB1bmRlciBlYWNoIGRvbWFpbixcbi8vIGFuZCB0aGUgaWRzIHRoZSBzaWduZWQgcmVwbyBsaXN0cyB3aXRoIHRoZSBhZGRyZXNzZXMgZWFjaCBpcyBhbGxvd2VkIGZyb20uXG5cbmFzeW5jIGZ1bmN0aW9uIHByaW50T3duSWRzKCkge1xuICAgIGxldCBkb21haW5zID0gREVWX2xpc3RJZGVudGl0eURvbWFpbnMoKTtcbiAgICBpZiAoIWRvbWFpbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUaGlzIG1hY2hpbmUgaGFzIG5vIGlkZW50aXRpZXMgeWV0LiBPbmUgaXMgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBpdCBuZWVkcyBvbmUuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYFRoaXMgbWFjaGluZTpgKTtcbiAgICBsZXQgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IGRvbWFpbiBvZiBkb21haW5zKSB7XG4gICAgICAgIGF3YWl0IGxvYWRJZGVudGl0eUNBKGRvbWFpbik7XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSBnZXRPd25NYWNoaW5lSWQoZG9tYWluKTtcbiAgICAgICAgaWRzLnB1c2gobWFjaGluZUlkKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgICAke2RvbWFpbn0gJHttYWNoaW5lSWR9YCk7XG4gICAgfVxuICAgIHJldHVybiBpZHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByaW50UmVwbyhvd25JZHM6IHN0cmluZ1tdKSB7XG4gICAgbGV0IHJlcG87XG4gICAgdHJ5IHtcbiAgICAgICAgcmVwbyA9IGF3YWl0IHJlc29sdmVLZXlzUmVwbygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcbk5vIGtleXMgcmVwbyB0byByZWFkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIHNheSBhYm91dCB3aG8gaXMgdHJ1c3RlZC4gJHtlfWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB7IHJlcG9QYXRoLCBzb3VyY2VVUkwgfSA9IHJlcG87XG4gICAgY29uc29sZS5sb2coYFxcbktleXMgcmVwbyAke3JlcG9QYXRofWApO1xuICAgIGNvbnNvbGUubG9nKGAgICAgZnJvbSAke3NvdXJjZVVSTH1gKTtcblxuICAgIC8vIFB1bGxlZCBmaXJzdCwgb3IgYSByZXZvY2F0aW9uIGFub3RoZXIgbWFjaGluZSB3cm90ZSBtaW51dGVzIGFnbyBpcyBtaXNzaW5nIGZyb20gYSBwaWN0dXJlXG4gICAgLy8gd2hvc2Ugd2hvbGUgcHVycG9zZSBpcyB0byBleHBsYWluIHdoeSBzb21ldGhpbmcgaXMgYmVpbmcgcmVmdXNlZC5cbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBzeW5jUmVwb0ZpbGVzKHJldm9rZVJlcG8oc291cmNlVVJMKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAgIENvdWxkIG5vdCBwdWxsIHRoZSByZXZvY2F0aW9ucywgc2hvd2luZyB0aGUgb25lcyBhbHJlYWR5IGhlcmUuICR7ZX1gKTtcbiAgICB9XG5cbiAgICBsZXQgZmlsZXM7XG4gICAgdHJ5IHtcbiAgICAgICAgZmlsZXMgPSAoYXdhaXQgcmVhZFNpZ25lZFJlcG8oeyByZXBvUGF0aCwgc291cmNlVVJMIH0pKS5maWxlcztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5JdHMgc2lnbmF0dXJlIGRvZXMgbm90IGNoZWNrIG91dCwgc28gbm90aGluZyBpbiBpdCBjb3VudHMuICR7ZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdGhlIG1hY2hpbmUgZmlsZXMgdGhlIHNpZ25hdHVyZSBjb3ZlcnMgLSByZWFkU2lnbmVkUmVwbyBoYXMgYWxyZWFkeSBkcm9wcGVkIGFueXRoaW5nXG4gICAgLy8gdW5zaWduZWQgb3IgZnJvemVuLCBzbyB0aGlzIGlzIHRoZSBsaXN0IHRoaXMgbWFjaGluZSB3b3VsZCBhY3R1YWxseSBhY2NlcHQuXG4gICAgbGV0IG1hY2hpbmVzOiB7IG1hY2hpbmVJZDogc3RyaW5nOyBpcHM6IHN0cmluZ1tdIH1bXSA9IFtdO1xuICAgIGZvciAobGV0IFtmaWxlUGF0aCwgY29udGVudHNdIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmICghZmlsZVBhdGguc3RhcnRzV2l0aChgJHtNQUNISU5FU19ESVJ9L2ApIHx8ICFmaWxlUGF0aC5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudHMudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgICAgIG1hY2hpbmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcGFyc2VkLm1hY2hpbmVJZCB8fCBmaWxlUGF0aC5zbGljZShNQUNISU5FU19ESVIubGVuZ3RoICsgMSwgLVwiLmpzb25cIi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIGlwczogcGFyc2VkLmlwcyB8fCBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgIElnbm9yaW5nIHVucmVhZGFibGUgJHtmaWxlUGF0aH0uICR7ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBcXG5UcnVzdGVkIG1hY2hpbmVzICgke21hY2hpbmVzLmxlbmd0aH0pLCBhbmQgdGhlIGFkZHJlc3NlcyBlYWNoIG1heSB0YWxrIGZyb206YCk7XG4gICAgZm9yIChsZXQgbWFjaGluZSBvZiBtYWNoaW5lcykge1xuICAgICAgICBsZXQgdXMgPSBvd25JZHMuaW5jbHVkZXMobWFjaGluZS5tYWNoaW5lSWQpICYmIFwiICA8LSB0aGlzIG1hY2hpbmVcIiB8fCBcIlwiO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAgICR7bWFjaGluZS5tYWNoaW5lSWR9ICAke21hY2hpbmUuaXBzLmpvaW4oXCIsIFwiKSB8fCBcIihubyBhZGRyZXNzZXMsIHNvIGl0IGlzIG5ldmVyIGFjY2VwdGVkKVwifSR7dXN9YCk7XG4gICAgfVxuXG4gICAgLy8gRnJvemVuIG1hY2hpbmVzIGFyZSBhbHJlYWR5IGdvbmUgZnJvbSB0aGUgbGlzdCBhYm92ZSwgd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhleSBoYXZlIHRvIGJlXG4gICAgLy8gbmFtZWQgaGVyZSAtIG90aGVyd2lzZSBhIG1hY2hpbmUgYmVpbmcgcmVmdXNlZCBldmVyeXdoZXJlIHNpbXBseSBpcyBub3QgbWVudGlvbmVkIGFueXdoZXJlLlxuICAgIGxldCByZXZvY2F0aW9ucyA9IGxpc3RSZXZvY2F0aW9ucygpO1xuICAgIGxldCBmcm96ZW4gPSByZXZvY2F0aW9ucy5maWx0ZXIocmV2b2NhdGlvbiA9PiAhcmV2b2NhdGlvbi5mb3JnaXZlbik7XG4gICAgY29uc29sZS5sb2coYFxcbkZyb3plbiAoJHtmcm96ZW4ubGVuZ3RofSksIHJlZnVzZWQgZXZlcnl3aGVyZSB1bnRpbCB1bnJldm9rZWQ6YCk7XG4gICAgZm9yIChsZXQgcmV2b2NhdGlvbiBvZiBmcm96ZW4pIHtcbiAgICAgICAgbGV0IHVzID0gb3duSWRzLmluY2x1ZGVzKHJldm9jYXRpb24uaWRlbnRpdHkpICYmIFwiICA8LSB0aGlzIG1hY2hpbmVcIiB8fCBcIlwiO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAgICR7cmV2b2NhdGlvbi5pZGVudGl0eX0gIHVzZWQgZnJvbSAke3Jldm9jYXRpb24uaXAgfHwgXCJhbiB1bnJlY29yZGVkIGFkZHJlc3NcIn1gXG4gICAgICAgICAgICArIGAke3Jldm9jYXRpb24ucmV2b2tlZEF0ICYmIGAgYXQgJHtyZXZvY2F0aW9uLnJldm9rZWRBdH1gIHx8IFwiXCJ9YFxuICAgICAgICAgICAgKyBgJHtyZXZvY2F0aW9uLnJldm9rZWRCeSAmJiBgLCBub3RpY2VkIGJ5ICR7cmV2b2NhdGlvbi5yZXZva2VkQnl9YCB8fCBcIlwifSR7dXN9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICAgICAgICR7cmV2b2NhdGlvbi5yZXZvY2F0aW9uSWR9YCk7XG4gICAgfVxuICAgIGlmICghZnJvemVuLmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAgIChub3RoaW5nIGlzIGZyb3plbilgKTtcbiAgICB9XG5cbiAgICBsZXQgZm9yZ2l2ZW4gPSByZXZvY2F0aW9ucy5maWx0ZXIocmV2b2NhdGlvbiA9PiByZXZvY2F0aW9uLmZvcmdpdmVuKTtcbiAgICBpZiAoZm9yZ2l2ZW4ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5SZXZva2VkLCB0aGVuIGFsbG93ZWQgYWdhaW4gKCR7Zm9yZ2l2ZW4ubGVuZ3RofSk6YCk7XG4gICAgICAgIGZvciAobGV0IHJldm9jYXRpb24gb2YgZm9yZ2l2ZW4pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgJHtyZXZvY2F0aW9uLmlkZW50aXR5fSAgZnJvbSAke3Jldm9jYXRpb24uaXAgfHwgXCJhbiB1bnJlY29yZGVkIGFkZHJlc3NcIn1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBcXG5TaWduZWQgZmlsZXMgKCR7ZmlsZXMuc2l6ZX0pOmApO1xuICAgIGZvciAobGV0IGZpbGVQYXRoIG9mIFsuLi5maWxlcy5rZXlzKCldLnNvcnQoKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAgICR7ZmlsZVBhdGh9YCk7XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICAgIGxldCBvd25JZHMgPSBhd2FpdCBwcmludE93bklkcygpO1xuICAgIGF3YWl0IHByaW50UmVwbyhvd25JZHMgfHwgW10pO1xufVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihgJHtlfWApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xufSkuZmluYWxseSgoKSA9PiBwcm9jZXNzLmV4aXQoKSk7XG4iXX0//=
|
|
114
|
+
/* _JS_SOURCE_HASH = "20d477b9dfec3400b0338edeb17c4064d10f3da0725ae6f5953cc9676f703db6"; */
|