@bitgo/sdk-coin-eth 26.0.7 → 26.1.0

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.
@@ -44,8 +44,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
44
44
  * - verifyTransaction (TSS and multisig paths)
45
45
  * - verifyTransaction (confidential transfer / SendERC7984 path)
46
46
  * - decodeTokenAddressesFromDelegationCalldata (round-trip and forwarder-wrapped)
47
+ * - recover() (ERC-7984 confidential token recovery)
48
+ * - queryConfidentialBalance()
47
49
  */
48
50
  const should_1 = __importDefault(require("should"));
51
+ const sinon_1 = __importDefault(require("sinon"));
49
52
  const sdk_api_1 = require("@bitgo/sdk-api");
50
53
  const sdk_test_1 = require("@bitgo/sdk-test");
51
54
  const sdk_core_1 = require("@bitgo/sdk-core");
@@ -1031,4 +1034,280 @@ describe('verifyTransaction – confidential consolidation (FlushERC7984Forwarde
1031
1034
  .should.be.rejectedWith(/parent address mismatch/);
1032
1035
  });
1033
1036
  });
1034
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJjNzk4NFRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2VyYzc5ODRUb2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsb0RBQTRCO0FBQzVCLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFDMUQsOENBQTBEO0FBQzFELHNEQU82QjtBQUc3Qiw2Q0FBMEM7QUFDMUMsaURBQThDO0FBQzlDLDJEQUE2QztBQUU3Qyw4RUFBOEU7QUFDOUUsWUFBWTtBQUNaLDhFQUE4RTtBQUU5RSwwRUFBMEU7QUFDMUUsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMsQ0FBQztBQUN0RSxNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO0FBRXRFLHNFQUFzRTtBQUN0RSxNQUFNLG9CQUFvQixHQUFHLDRDQUE0QyxDQUFDO0FBQzFFLHFFQUFxRTtBQUNyRSxNQUFNLG1CQUFtQixHQUFHLDRDQUE0QyxDQUFDO0FBRXpFLE1BQU0sbUJBQW1CLEdBQUcsNENBQTRDLENBQUM7QUFDekUsTUFBTSxpQkFBaUIsR0FBRyw0Q0FBNEMsQ0FBQztBQUN2RSxNQUFNLGlCQUFpQixHQUFHLDRDQUE0QyxDQUFDO0FBRXZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFFM0QsOEVBQThFO0FBQzlFLFVBQVU7QUFDViw4RUFBOEU7QUFFOUU7O0dBRUc7QUFDSCxLQUFLLFVBQVUsb0JBQW9CLENBQUMsVUFBa0IsRUFBRSxjQUF3QixFQUFFLEtBQUssR0FBRyxHQUFHO0lBQzNGLE1BQU0sU0FBUyxHQUFHLElBQUEsdUJBQVUsRUFBQyxPQUFPLENBQXVCLENBQUM7SUFDNUQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFF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QUFFLGtCQUFrQjtnQkFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBQ3pEO1lBQ1IsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFTO1lBQzVCLE1BQU07U0FDUCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4SEFBOEgsRUFBRSxLQUFLO1FBQ3RJLE1BQU0sS0FBSyxHQUFHLE1BQU0sNkJBQTZCLEVBQUUsQ0FBQztRQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtZQUNyQyxZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsNENBQTRDLEVBQUU7U0FDNUUsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJO2FBQ1AsaUJBQWlCLENBQUM7WUFDakIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUN6RDtZQUNSLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBUztZQUM1QixNQUFNO1NBQ1AsQ0FBQzthQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pdCB0ZXN0cyBmb3IgRXJjNzk4NFRva2VuLlxuICpcbiAqIENvdmVyczpcbiAqICAgLSBnZXRUb2tlbkVuYWJsZW1lbnRDb25maWdcbiAqICAgLSB2ZXJpZnlUcmFuc2FjdGlvbiAoVFNTIGFuZCBtdWx0aXNpZyBwYXRocylcbiAqICAgLSB2ZXJpZnlUcmFuc2FjdGlvbiAoY29uZmlkZW50aWFsIHRyYW5zZmVyIC8gU2VuZEVSQzc5ODQgcGF0aClcbiAqICAgLSBkZWNvZGVUb2tlbkFkZHJlc3Nlc0Zyb21EZWxlZ2F0aW9uQ2FsbGRhdGEgKHJvdW5kLXRyaXAgYW5kIGZvcndhcmRlci13cmFwcGVkKVxuICovXG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSwgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhLFxuICBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEsXG4gIHNlbmRNdWx0aVNpZ0RhdGEsXG4gIHdyYXBJbkNhbGxGcm9tUGFyZW50LFxuICBkZWNvZGVUb2tlbkFkZHJlc3Nlc0Zyb21EZWxlZ2F0aW9uQ2FsbGRhdGEsXG4gIFRyYW5zZmVyQnVpbGRlckVSQzc5ODQsXG59IGZyb20gJ0BiaXRnby9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgRXJjNzk4NFRva2VuIH0gZnJvbSAnLi4vLi4vc3JjL2VyYzc5ODRUb2tlbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IGdldEJ1aWxkZXIgfSBmcm9tICcuL2dldEJ1aWxkZXInO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tICcuLi8uLi9zcmMvcmVnaXN0ZXInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2V0aCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uc3RhbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSG9vZGkgQUNMIGNvbnRyYWN0IGFkZHJlc3MgKE5ldHdvcmtzLnRlc3QuaG9vZGkuemFtYUFjbENvbnRyYWN0QWRkcmVzcylcbmNvbnN0IFpBTUFfQUNMX0FERFJFU1MgPSAnMHg2ZDNmYWY2Zjg2ZTFmZjlmM2IwODMxZGRhOTIwYWJhMWNiZDViZDY4JztcbmNvbnN0IERFTEVHQVRFX0FERFJFU1MgPSAnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJztcblxuLy8gaHRldGg6Y3Rlc3QxIHRva2VuIGNvbnRyYWN0IGFkZHJlc3MgKGZyb20gc3RhdGljcy9lcmM3OTg0VG9rZW5zLnRzKVxuY29uc3QgQ1RFU1QxX1RPS0VOX0FERFJFU1MgPSAnMHg3YjFkNTliYmNkMjkxZGFhNTljYjZjOGM1YmMwNGRlMWFmYzRhYmExJztcbi8vIGh0ZXRoOmN1c2R0IHRva2VuIGNvbnRyYWN0IGFkZHJlc3MgKGZyb20gc3RhdGljcy9lcmM3OTg0VG9rZW5zLnRzKVxuY29uc3QgQ1VTRFRfVE9LRU5fQUREUkVTUyA9ICcweDJkZWJiZTA0ODdlZjkyMWRmNDQ1N2Y5ZTM2ZWQwNWJlMmRmMWFjNzUnO1xuXG5jb25zdCBXUk9OR19UT0tFTl9BRERSRVNTID0gJzB4ZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZic7XG5jb25zdCBXUk9OR19BQ0xfQUREUkVTUyA9ICcweGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnO1xuY29uc3QgRk9SV0FSREVSX0FERFJFU1MgPSAnMHgxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwJztcblxuY29uc3QgRVhQSVJZID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkgKyAzNjUgKiA4NjQwMDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBCdWlsZHMgYSByb290LXdhbGxldCBkZWxlZ2F0aW9uIHR4IGhleCAodG8gPSBBQ0wsIGRhdGEgPSBtdWx0aWNhbGwpLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZERlbGVnYXRpb25UeEhleChhY2xBZGRyZXNzOiBzdHJpbmcsIHRva2VuQWRkcmVzc2VzOiBzdHJpbmdbXSwgdmFsdWUgPSAnMCcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzIwMDAwMCcgfSk7XG4gIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgdHhCdWlsZGVyLmNvbnRyYWN0KGFjbEFkZHJlc3MpO1xuICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIHRva2VuQWRkcmVzc2VzLCBFWFBJUlkpO1xuICB0eEJ1aWxkZXIuZGF0YShjYWxsZGF0YSk7XG4gIGlmICh2YWx1ZSAhPT0gJzAnKSB7XG4gICAgdHhCdWlsZGVyLnZhbHVlKHZhbHVlKTtcbiAgfVxuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBmb3J3YXJkZXIgZGVsZWdhdGlvbiB0eCBoZXggKHRvID0gZm9yd2FyZGVyLCBkYXRhID0gY2FsbEZyb21QYXJlbnQoQUNMLCAwLCBtdWx0aWNhbGwpKS5cbiAqIFRoaXMgbWlycm9ycyB3aGF0IERlY3J5cHRpb25EZWxlZ2F0aW9uQnVpbGRlci5idWlsZCgpIHJldHVybnMgd2hlbiBmb3J3YXJkZXJBZGRyZXNzIGlzIHNldC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRGb3J3YXJkZXJEZWxlZ2F0aW9uVHhIZXgoXG4gIGZvcndhcmRlckFkZHJlc3M6IHN0cmluZyxcbiAgYWNsQWRkcmVzczogc3RyaW5nLFxuICB0b2tlbkFkZHJlc3Nlczogc3RyaW5nW11cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTAwMDAwMDAwMCcsIGdhc0xpbWl0OiAnMjAwMDAwJyB9KTtcbiAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICB0eEJ1aWxkZXIuY29udHJhY3QoZm9yd2FyZGVyQWRkcmVzcyk7XG4gIGNvbnN0IGlubmVyQ2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCB0b2tlbkFkZHJlc3NlcywgRVhQSVJZKTtcbiAgY29uc3Qgb3V0ZXJDYWxsZGF0YSA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KGFjbEFkZHJlc3MsIGlubmVyQ2FsbGRhdGEpO1xuICB0eEJ1aWxkZXIuZGF0YShvdXRlckNhbGxkYXRhKTtcbiAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgcmV0dXJuIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVzdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZSgnRXJjNzk4NFRva2VuJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGNvaW46IEVyYzc5ODRUb2tlbjtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIHJlZ2lzdGVyKGJpdGdvKTtcbiAgICBjb2luID0gYml0Z28uY29pbignaHRldGg6Y3Rlc3QxJykgYXMgRXJjNzk4NFRva2VuO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGRlc2NyaWJlKCdnZXRUb2tlbkVuYWJsZW1lbnRDb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcmVxdWlyZXNUb2tlbkVuYWJsZW1lbnQ6IHRydWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBjb2luLmdldFRva2VuRW5hYmxlbWVudENvbmZpZygpO1xuICAgICAgY29uZmlnLnJlcXVpcmVzVG9rZW5FbmFibGVtZW50LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiB0cnVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29uZmlnID0gY29pbi5nZXRUb2tlbkVuYWJsZW1lbnRDb25maWcoKTtcbiAgICAgIGNvbmZpZy5zdXBwb3J0c011bHRpcGxlVG9rZW5FbmFibGVtZW50cy5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIOKAkyBub24tZW5hYmxlLXRva2VuJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcm91dGUgdG8gY29uZmlkZW50aWFsIHRyYW5zZmVyIHBhdGggd2hlbiB0eXBlIGlzIG5vdCBlbmFibGV0b2tlbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIE5vbi1lbmFibGV0b2tlbiB0cmFuc2FjdGlvbnMgcm91dGUgdG8gdmVyaWZ5Q29uZmlkZW50aWFsVHJhbnNmZXIuXG4gICAgICAvLyBFbXB0eSByZWNpcGllbnRzIHRyaWdnZXJzIG91ciBFUkM3OTg0LXNwZWNpZmljIHZhbGlkYXRpb24gZXJyb3IsXG4gICAgICAvLyBjb25maXJtaW5nIHRoZSBvdmVycmlkZSBvbmx5IGludGVyY2VwdHMgdGhlIGVuYWJsZXRva2VuIHR5cGUuXG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7fSBhcyBhbnksXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9yZWNpcGllbnRzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgZW50cnkvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb24g4oCTIFRTUyBwYXRoJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgc2luZ2xlLXRva2VuIGRlbGVnYXRpb24gdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGVsZWdhdGlvblR4SGV4KFpBTUFfQUNMX0FERFJFU1MsIFtDVEVTVDFfVE9LRU5fQUREUkVTU10pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0VHlwZTogJ3RzcycsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIG11bHRpLXRva2VuIGRlbGVnYXRpb24gdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGVsZWdhdGlvblR4SGV4KFpBTUFfQUNMX0FERFJFU1MsIFtDVEVTVDFfVE9LRU5fQUREUkVTUywgQ1VTRFRfVE9LRU5fQUREUkVTU10pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH0sIHsgbmFtZTogJ2h0ZXRoOmN1c2R0JyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIEFDTCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZERlbGVnYXRpb25UeEhleChXUk9OR19BQ0xfQUREUkVTUywgW0NURVNUMV9UT0tFTl9BRERSRVNTXSk7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2RvZXMgbm90IG1hdGNoIEFDTCBjb250cmFjdC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGNhbGxkYXRhIGNvbnRhaW5zIHdyb25nIHRva2VuIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGVsZWdhdGlvblR4SGV4KFpBTUFfQUNMX0FERFJFU1MsIFtXUk9OR19UT0tFTl9BRERSRVNTXSk7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCBmb3VuZCBpbiBkZWxlZ2F0aW9uIGNhbGxkYXRhLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIGZvcndhcmRlciBkZWxlZ2F0aW9uIHR4IChjYWxsRnJvbVBhcmVudCBzaGFwZSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRm9yd2FyZGVyRGVsZWdhdGlvblR4SGV4KEZPUldBUkRFUl9BRERSRVNTLCBaQU1BX0FDTF9BRERSRVNTLCBbQ1RFU1QxX1RPS0VOX0FERFJFU1NdKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnaHRldGg6Y3Rlc3QxJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSBmb3J3YXJkZXIgZGVsZWdhdGlvbiB0eCB3aXRoIG11bHRpcGxlIHRva2VucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRGb3J3YXJkZXJEZWxlZ2F0aW9uVHhIZXgoRk9SV0FSREVSX0FERFJFU1MsIFpBTUFfQUNMX0FERFJFU1MsIFtcbiAgICAgICAgQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICAgIENVU0RUX1RPS0VOX0FERFJFU1MsXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnaHRldGg6Y3Rlc3QxJyB9LCB7IG5hbWU6ICdodGV0aDpjdXNkdCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBmb3J3YXJkZXIgY2FsbGRhdGEgY29udGFpbnMgd3JvbmcgdG9rZW4gYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRGb3J3YXJkZXJEZWxlZ2F0aW9uVHhIZXgoRk9SV0FSREVSX0FERFJFU1MsIFpBTUFfQUNMX0FERFJFU1MsIFtXUk9OR19UT0tFTl9BRERSRVNTXSk7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCBmb3VuZCBpbiBkZWxlZ2F0aW9uIGNhbGxkYXRhLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gY2FsbGRhdGEgaGFzIHVucmVjb2duaXNlZCBtZXRob2QgSUQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBCdWlsZCBhIHR4IHdpdGggYXJiaXRyYXJ5IGNhbGxkYXRhIHRoYXQgaXMgbmVpdGhlciBtdWx0aWNhbGwgbm9yIGNhbGxGcm9tUGFyZW50XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcxMDAwMDAwMDAwJywgZ2FzTGltaXQ6ICcyMDAwMDAnIH0pO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdChaQU1BX0FDTF9BRERSRVNTKTtcbiAgICAgIHR4QnVpbGRlci5kYXRhKCcweGRlYWRiZWVmJyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3VucmVjb2duaXNlZCBjYWxsZGF0YSBtZXRob2QgSUQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0cmFuc2FjdGlvbiB2YWx1ZSBpcyBub3QgMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGREZWxlZ2F0aW9uVHhIZXgoWkFNQV9BQ0xfQUREUkVTUywgW0NURVNUMV9UT0tFTl9BRERSRVNTXSwgJzEnKTtcbiAgICAgIGF3YWl0IGNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIGVuYWJsZVRva2VuczogW3sgbmFtZTogJ2h0ZXRoOmN0ZXN0MScgfV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZXhwZWN0ZWQgdHJhbnNhY3Rpb24gdmFsdWUgMC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGVuYWJsZVRva2VucyBpcyBlbXB0eScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGREZWxlZ2F0aW9uVHhIZXgoWkFNQV9BQ0xfQUREUkVTUywgW0NURVNUMV9UT0tFTl9BRERSRVNTXSk7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2VuYWJsZVRva2VucyBtdXN0IGJlIG5vbi1lbXB0eS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDoge30gYXMgYW55LFxuICAgICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0eEhleC8pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbiDigJMgbXVsdGlzaWcgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB2YWxpZCBidWlsZFBhcmFtcyByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9XSBhcyBhbnksXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IHRva2VuTmFtZTogJ2h0ZXRoOmN0ZXN0MScsIGFkZHJlc3M6ICcweGFiYycsIGFtb3VudDogJzAnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0VHlwZTogJ29uY2hhaW4nLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgbXVsdGlwbGUgdG9rZW4gcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9LFxuICAgICAgICAgICAgeyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFkZHJlc3M6ICcweGFiYycsIGFtb3VudDogJzAnIH0sXG4gICAgICAgICAgXSBhcyBhbnksXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAgeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9LFxuICAgICAgICAgICAgICB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYWRkcmVzczogJzB4YWJjJywgYW1vdW50OiAnMCcgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICB3YWxsZXRUeXBlOiAnb25jaGFpbicsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYnVpbGRQYXJhbXMgcmVjaXBpZW50cyBoYXZlIHdyb25nIHRva2VuTmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IHRva2VuTmFtZTogJ2h0ZXRoOmN0ZXN0MScsIGFkZHJlc3M6ICcweGFiYycsIGFtb3VudDogJzAnIH1dIGFzIGFueSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IHRva2VuTmFtZTogJ2h0ZXRoOndyb25ndG9rZW4nLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ29uY2hhaW4nLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm90IGZvdW5kIGluIGJ1aWxkUGFyYW1zIHJlY2lwaWVudHMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhbW91bnQgaXMgbm90IDAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9XSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgICB0eXBlOiAnZW5hYmxldG9rZW4nLFxuICAgICAgICAgICAgICByZWNpcGllbnRzOiBbeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcxMDAnIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9leHBlY3RlZCBhbW91bnQgMC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudHMgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7fSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIGJ1aWxkUGFyYW1zLnJlY2lwaWVudHMvKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB2ZXJpZnlUcmFuc2FjdGlvbiDigJMgY29uZmlkZW50aWFsIHRyYW5zZmVyIChTZW5kRVJDNzk4NCkgdGVzdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEJ1aWxkIGEgcmF3IHNpZ25lZCBzZW5kTXVsdGlTaWcgdHggaGV4IHRoYXQgd3JhcHMgYSBjb25maWRlbnRpYWxUcmFuc2ZlciBjYWxsLlxuICogVGhlIHdhbGxldCBjb250cmFjdCAoc2VuZE11bHRpU2lnIHdyYXBwZXIpIGlzIGB3YWxsZXRDb250cmFjdEFkZHJlc3NgLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyVHhIZXgob3B0czoge1xuICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgcmVjaXBpZW50QWRkcmVzczogc3RyaW5nO1xuICBlbmNyeXB0ZWRIYW5kbGU6IHN0cmluZztcbiAgaW5wdXRQcm9vZjogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGtleSA9IHRlc3REYXRhLktFWVBBSVJfUFJWLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nO1xuICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzEyMTAwMDAwJyB9KTtcbiAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIHR4QnVpbGRlci5jb250cmFjdChvcHRzLndhbGxldENvbnRyYWN0QWRkcmVzcyk7XG4gIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDNzk4NCk7XG5cbiAgY29uc3QgdHJhbnNmZXJCdWlsZGVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKCkgYXMgVHJhbnNmZXJCdWlsZGVyRVJDNzk4NDtcbiAgdHJhbnNmZXJCdWlsZGVyXG4gICAgLmZyb20oJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0ZCcpXG4gICAgLnRvKG9wdHMucmVjaXBpZW50QWRkcmVzcylcbiAgICAudG9rZW5Db250cmFjdEFkZHJlc3Mob3B0cy50b2tlbkNvbnRyYWN0QWRkcmVzcylcbiAgICAuZW5jcnlwdGVkSGFuZGxlKG9wdHMuZW5jcnlwdGVkSGFuZGxlKVxuICAgIC5pbnB1dFByb29mKG9wdHMuaW5wdXRQcm9vZilcbiAgICAuY29udHJhY3RTZXF1ZW5jZUlkKDEpXG4gICAgLmV4cGlyYXRpb25UaW1lKE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApICsgMzYwMClcbiAgICAua2V5KGtleSk7XG5cbiAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIOKAkyBjb25maWRlbnRpYWwgdHJhbnNmZXIgKFNlbmRFUkM3OTg0KScsIGZ1bmN0aW9uICgpIHtcbiAgLy8gV2FsbGV0IGNvbnRyYWN0IHRoYXQgd3JhcHMgdGhlIHNlbmRNdWx0aVNpZyBjYWxsXG4gIGNvbnN0IFdBTExFVF9DT05UUkFDVCA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAvLyBSZWNpcGllbnQgb2YgdGhlIGNvbmZpZGVudGlhbCB0cmFuc2ZlclxuICBjb25zdCBSRUNJUElFTlQgPSAnMHgxOTY0NTAzMmM3ZjE1MzMzOTVkNDRhNjI5NDYyZTc1MTA4NGQzZTRjJztcbiAgLy8gRW5jcnlwdGVkIGhhbmRsZTogc3ludGhldGljIDMyIGJ5dGVzXG4gIGNvbnN0IEhBTkRMRSA9ICcweCcgKyAnYWInLnJlcGVhdCgzMik7XG4gIC8vIElucHV0IHByb29mOiBzeW50aGV0aWMgNTAgYnl0ZXNcbiAgY29uc3QgUFJPT0YgPSAnMHgnICsgJ2NkJy5yZXBlYXQoNTApO1xuICAvLyBBIGRpZmZlcmVudCByZWNpcGllbnQgdG8gdHJpZ2dlciBtaXNtYXRjaFxuICBjb25zdCBXUk9OR19SRUNJUElFTlQgPSAnMHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJztcbiAgLy8gQSBkaWZmZXJlbnQgdG9rZW4gY29udHJhY3QgdG8gdHJpZ2dlciBtaXNtYXRjaFxuICBjb25zdCBXUk9OR19UT0tFTiA9ICcweGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmInO1xuXG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgY29pbjogRXJjNzk4NFRva2VuO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgcmVnaXN0ZXIoYml0Z28pO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCdodGV0aDpjdGVzdDEnKSBhcyBFcmM3OTg0VG9rZW47XG4gIH0pO1xuXG4gIC8vIFJlcHJlc2VudGF0aXZlIHBsYWludGV4dCBhbW91bnQgaW4gYmFzZSB1bml0cyAoZS5nLiwgMSBjVEVTVDEgPSAxXzAwMF8wMDAgdW5pdHMgYXQgNiBkZWNpbWFscylcbiAgY29uc3QgQU1PVU5UID0gJzEwMDAwMDAnO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgY29uZmlkZW50aWFsIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWF0Y2hpbmcgYW1vdW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXgsIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSB9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBubyByZWNpcGllbnQgaW5mbyBpcyBwcm92aWRlZCBpbiBlaXRoZXIgdHhQYXJhbXMgb3IgYnVpbGRQYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyVHhIZXgoe1xuICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiBXQUxMRVRfQ09OVFJBQ1QsXG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyBleHBlY3RlZCByZWNpcGllbnQvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgc3VjY2Vzc2Z1bGx5IHVzaW5nIGJ1aWxkUGFyYW1zLnJlY2lwaWVudHMgd2hlbiB0eFBhcmFtcyBoYXMgbm8gcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7fSxcbiAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgdHhIZXgsXG4gICAgICAgIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIH0gYXMgYW55LFxuICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHRva2VuIGNvbnRyYWN0IGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggdGhpcyBjb2luJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IFdST05HX1RPS0VOLFxuICAgICAgcmVjaXBpZW50QWRkcmVzczogUkVDSVBJRU5ULFxuICAgICAgZW5jcnlwdGVkSGFuZGxlOiBIQU5ETEUsXG4gICAgICBpbnB1dFByb29mOiBQUk9PRixcbiAgICB9KTtcblxuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3Rva2VuIGNvbnRyYWN0IGFkZHJlc3MgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHR4UGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IENURVNUMV9UT0tFTl9BRERSRVNTLFxuICAgICAgcmVjaXBpZW50QWRkcmVzczogUkVDSVBJRU5ULFxuICAgICAgZW5jcnlwdGVkSGFuZGxlOiBIQU5ETEUsXG4gICAgICBpbnB1dFByb29mOiBQUk9PRixcbiAgICB9KTtcblxuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFdST05HX1JFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3JlY2lwaWVudCBhZGRyZXNzIG1pc21hdGNoLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBjYWxsZGF0YSBpcyBub3QgYSBjb25maWRlbnRpYWwgdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzIwMDAwMCcgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KFdBTExFVF9DT05UUkFDVCk7XG4gICAgdHhCdWlsZGVyLmRhdGEoJzB4ZGVhZGJlZWYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZmFpbGVkIHRvIGRlY29kZSBjb25maWRlbnRpYWwgdHJhbnNmZXIgY2FsbGRhdGEvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4UGFyYW1zIGFtb3VudCBkb2VzIG5vdCBtYXRjaCBidWlsZFBhcmFtcyBhbW91bnQgKHdpdGggdHhIZXgpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IENURVNUMV9UT0tFTl9BRERSRVNTLFxuICAgICAgcmVjaXBpZW50QWRkcmVzczogUkVDSVBJRU5ULFxuICAgICAgZW5jcnlwdGVkSGFuZGxlOiBIQU5ETEUsXG4gICAgICBpbnB1dFByb29mOiBQUk9PRixcbiAgICB9KTtcblxuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiAnOTk5OTk5OScgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4LFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hbW91bnQgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4UGFyYW1zIGFtb3VudCBpcyAwICh3aXRoIHR4SGV4KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBjb2luXG4gICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBSRUNJUElFTlQsIGFtb3VudDogJzAnIH1dIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hbW91bnQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgc3RyaW5nLyk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBGaXJzdC1zaWduZXIgKG5vIHR4SGV4KSB0ZXN0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpdCgnc2hvdWxkIHZlcmlmeSB2YWxpZCBmaXJzdC1zaWduZXIgcGFyYW1zIHdoZW4gbm8gdHhIZXggaXMgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHt9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGZpcnN0LXNpZ25lciBwYXJhbXMgd2hlbiB0eFBhcmFtcyBhbmQgYnVpbGRQYXJhbXMgYW1vdW50cyBtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9IH0gYXMgYW55LFxuICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudHMgaXMgZW1wdHkgYW5kIG5vIHR4SGV4IGlzIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcmVjaXBpZW50cyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGVudHJ5Lyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiByZWNpcGllbnQgYWRkcmVzcyBpcyBpbnZhbGlkIGFuZCBubyB0eEhleCBpcyBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICdub3QtYW4tYWRkcmVzcycsIGFtb3VudDogQU1PVU5UIH1dIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3JlY2lwaWVudCBhZGRyZXNzIGlzIG1pc3Npbmcgb3IgaW52YWxpZC8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYW1vdW50IGlzIDAgYW5kIG5vIHR4SGV4IGlzIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6ICcwJyB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hbW91bnQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgc3RyaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhbW91bnQgaXMgZW1wdHkgYW5kIG5vIHR4SGV4IGlzIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6ICcnIH1dIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2Ftb3VudCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4UGFyYW1zIGFuZCBidWlsZFBhcmFtcyBhbW91bnRzIG1pc21hdGNoIGFuZCBubyB0eEhleCBpcyBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiAnOTk5OTk5OScgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyBidWlsZFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBSRUNJUElFTlQsIGFtb3VudDogQU1PVU5UIH1dIH0gfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hbW91bnQgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4UGFyYW1zIGFuZCBidWlsZFBhcmFtcyByZWNpcGllbnQgYWRkcmVzc2VzIG1pc21hdGNoIGFuZCBubyB0eEhleCBpcyBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFdST05HX1JFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9yZWNpcGllbnQgYWRkcmVzcyBtaXNtYXRjaC8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZlcmlmeSB3aGVuIHR4SGV4IGFic2VudCBhbmQgYnVpbGRQYXJhbXMgaGFzIG1hdGNoaW5nIHJlY2lwaWVudCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICBidWlsZFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBSRUNJUElFTlQsIGFtb3VudDogQU1PVU5UIH1dIH0sXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGRlY29kZWQgcmVjaXBpZW50IGFnYWluc3QgYnVpbGRQYXJhbXMgd2hlbiB0eFBhcmFtcy5yZWNpcGllbnRzIGlzIGFic2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG5cbiAgICAvLyBObyByZWNpcGllbnRzIGluIHR4UGFyYW1zIOKAlCBmYWxscyBiYWNrIHRvIGJ1aWxkUGFyYW1zIGZvciByZWNpcGllbnQgdmVyaWZpY2F0aW9uXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczoge30sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4LFxuICAgICAgICBidWlsZFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBSRUNJUElFTlQsIGFtb3VudDogQU1PVU5UIH1dIH0sXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBkZWNvZGVkIHJlY2lwaWVudCBkb2VzIG5vdCBtYXRjaCBidWlsZFBhcmFtcyByZWNpcGllbnQgKHR4UGFyYW1zIGFic2VudCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyVHhIZXgoe1xuICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiBXQUxMRVRfQ09OVFJBQ1QsXG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXgsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogV1JPTkdfUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3JlY2lwaWVudCBhZGRyZXNzIG1pc21hdGNoLyk7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdmVyaWZ5VHJhbnNhY3Rpb24g4oCTIGRpcmVjdCBjb25maWRlbnRpYWxUcmFuc2ZlciAoaG90L1RTUyBFT0Egd2FsbGV0KSB0ZXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQnVpbGRzIGEgcmF3IHR4IGhleCB3aGVyZSB0aGUgRU9BIGNhbGxzIGNvbmZpZGVudGlhbFRyYW5zZmVyIGRpcmVjdGx5IG9uIHRoZSB0b2tlblxuICogY29udHJhY3QgKG5vIHNlbmRNdWx0aVNpZyB3cmFwcGVyKS4gVGhpcyBpcyB0aGUgaG90L1RTUyB3YWxsZXQgcGF0aC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGREaXJlY3RDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KG9wdHM6IHtcbiAgdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgcmVjaXBpZW50QWRkcmVzczogc3RyaW5nO1xuICBlbmNyeXB0ZWRIYW5kbGU6IHN0cmluZztcbiAgaW5wdXRQcm9vZjogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTAwMDAwMDAwMCcsIGdhc0xpbWl0OiAnMjAwMDAwJyB9KTtcbiAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAvLyB0eC50byA9IHRva2VuIGNvbnRyYWN0IChFT0EgY2FsbHMgaXQgZGlyZWN0bHkpXG4gIHR4QnVpbGRlci5jb250cmFjdChvcHRzLnRva2VuQ29udHJhY3RBZGRyZXNzKTtcbiAgLy8gSW5uZXIgY2FsbGRhdGE6IGNvbmZpZGVudGlhbFRyYW5zZmVyKGFkZHJlc3MsIGJ5dGVzMzIsIGJ5dGVzKSDigJQgbm8gc2VuZE11bHRpU2lnIHdyYXBwZXJcbiAgY29uc3QgY2FsbGRhdGEgPSBuZXcgVHJhbnNmZXJCdWlsZGVyRVJDNzk4NCgpXG4gICAgLnRvKG9wdHMucmVjaXBpZW50QWRkcmVzcylcbiAgICAudG9rZW5Db250cmFjdEFkZHJlc3Mob3B0cy50b2tlbkNvbnRyYWN0QWRkcmVzcylcbiAgICAuZW5jcnlwdGVkSGFuZGxlKG9wdHMuZW5jcnlwdGVkSGFuZGxlKVxuICAgIC5pbnB1dFByb29mKG9wdHMuaW5wdXRQcm9vZilcbiAgICAuYnVpbGQoKTtcbiAgdHhCdWlsZGVyLmRhdGEoY2FsbGRhdGEpO1xuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIOKAkyBkaXJlY3QgY29uZmlkZW50aWFsVHJhbnNmZXIgKGhvdC9UU1MgRU9BIHdhbGxldCknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IFJFQ0lQSUVOVCA9ICcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnO1xuICBjb25zdCBIQU5ETEUgPSAnMHgnICsgJ2FiJy5yZXBlYXQoMzIpO1xuICBjb25zdCBQUk9PRiA9ICcweCcgKyAnY2QnLnJlcGVhdCg1MCk7XG4gIGNvbnN0IFdST05HX1JFQ0lQSUVOVCA9ICcweGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnO1xuICBjb25zdCBXUk9OR19UT0tFTiA9ICcweGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmInO1xuICBjb25zdCBBTU9VTlQgPSAnMTAwMDAwMCc7XG5cbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBjb2luOiBFcmM3OTg0VG9rZW47XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICByZWdpc3RlcihiaXRnbyk7XG4gICAgY29pbiA9IGJpdGdvLmNvaW4oJ2h0ZXRoOmN0ZXN0MScpIGFzIEVyYzc5ODRUb2tlbjtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBkaXJlY3QgY29uZmlkZW50aWFsVHJhbnNmZXIgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZERpcmVjdENvbmZpZGVudGlhbFRyYW5zZmVyVHhIZXgoe1xuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IENURVNUMV9UT0tFTl9BRERSRVNTLFxuICAgICAgcmVjaXBpZW50QWRkcmVzczogUkVDSVBJRU5ULFxuICAgICAgZW5jcnlwdGVkSGFuZGxlOiBIQU5ETEUsXG4gICAgICBpbnB1dFByb29mOiBQUk9PRixcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXgsIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSB9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IHVzaW5nIGJ1aWxkUGFyYW1zLnJlY2lwaWVudHMgd2hlbiB0eFBhcmFtcyBoYXMgbm8gcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICB0eEhleCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgfSBhcyBhbnksXG4gICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICB9KTtcbiAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gdG9rZW4gY29udHJhY3QgYWRkcmVzcyAodHgudG8pIGRvZXMgbm90IG1hdGNoIHRoaXMgY29pbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogV1JPTkdfVE9LRU4sXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3Rva2VuIGNvbnRyYWN0IGFkZHJlc3MgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHR4UGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGREaXJlY3RDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogV1JPTkdfUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcmVjaXBpZW50IGFkZHJlc3MgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIG5vIHJlY2lwaWVudCBpbmZvIGlzIHByb3ZpZGVkIGluIGVpdGhlciB0eFBhcmFtcyBvciBidWlsZFBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7fSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21pc3NpbmcgZXhwZWN0ZWQgcmVjaXBpZW50Lyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0eFBhcmFtcyBhbW91bnQgZG9lcyBub3QgbWF0Y2ggYnVpbGRQYXJhbXMgYW1vdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGREaXJlY3RDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6ICc5OTk5OTk5JyB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXgsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2Ftb3VudCBtaXNtYXRjaC8pO1xuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YSB0ZXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmRlc2NyaWJlKCdkZWNvZGVUb2tlbkFkZHJlc3Nlc0Zyb21EZWxlZ2F0aW9uQ2FsbGRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdzaG91bGQgZGVjb2RlIGEgc2luZ2xlLXRva2VuIG11bHRpY2FsbCBjYWxsZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtDVEVTVDFfVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgY29uc3QgYWRkcmVzc2VzID0gZGVjb2RlVG9rZW5BZGRyZXNzZXNGcm9tRGVsZWdhdGlvbkNhbGxkYXRhKGNhbGxkYXRhKTtcbiAgICBhZGRyZXNzZXMuc2hvdWxkLmRlZXBFcXVhbChbQ1RFU1QxX1RPS0VOX0FERFJFU1MudG9Mb3dlckNhc2UoKV0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlY29kZSBhIG11bHRpLXRva2VuIG11bHRpY2FsbCBjYWxsZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKFxuICAgICAgREVMRUdBVEVfQUREUkVTUyxcbiAgICAgIFtDVEVTVDFfVE9LRU5fQUREUkVTUywgQ1VTRFRfVE9LRU5fQUREUkVTU10sXG4gICAgICBFWFBJUllcbiAgICApO1xuICAgIGNvbnN0IGFkZHJlc3NlcyA9IGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YShjYWxsZGF0YSk7XG4gICAgYWRkcmVzc2VzLnNob3VsZC5kZWVwRXF1YWwoW0NURVNUMV9UT0tFTl9BRERSRVNTLnRvTG93ZXJDYXNlKCksIENVU0RUX1RPS0VOX0FERFJFU1MudG9Mb3dlckNhc2UoKV0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBhZGRyZXNzZXMgaW4gbG93ZXJjYXNlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1peGVkQ2FzZSA9ICcweDdCMUQ1OWJiQ0QyOTFkYUE1OWNCNkM4QzViYzA0RGUxQUZDNGFCQTEnO1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW21peGVkQ2FzZV0sIEVYUElSWSk7XG4gICAgY29uc3QgYWRkcmVzc2VzID0gZGVjb2RlVG9rZW5BZGRyZXNzZXNGcm9tRGVsZWdhdGlvbkNhbGxkYXRhKGNhbGxkYXRhKTtcbiAgICBhZGRyZXNzZXNbMF0uc2hvdWxkLmVxdWFsKG1peGVkQ2FzZS50b0xvd2VyQ2FzZSgpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgY2FsbEZyb21QYXJlbnQtd3JhcHBlZCBtdWx0aWNhbGwgY2FsbGRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5uZXIgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShcbiAgICAgIERFTEVHQVRFX0FERFJFU1MsXG4gICAgICBbQ1RFU1QxX1RPS0VOX0FERFJFU1MsIENVU0RUX1RPS0VOX0FERFJFU1NdLFxuICAgICAgRVhQSVJZXG4gICAgKTtcbiAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoWkFNQV9BQ0xfQUREUkVTUywgaW5uZXIpO1xuICAgIGNvbnN0IGFkZHJlc3NlcyA9IGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YSh3cmFwcGVkKTtcbiAgICBhZGRyZXNzZXMuc2hvdWxkLmRlZXBFcXVhbChbQ1RFU1QxX1RPS0VOX0FERFJFU1MudG9Mb3dlckNhc2UoKSwgQ1VTRFRfVE9LRU5fQUREUkVTUy50b0xvd2VyQ2FzZSgpXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgd29yayB3aXRoIGNhbGxkYXRhIG1pc3NpbmcgMHggcHJlZml4JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW0NURVNUMV9UT0tFTl9BRERSRVNTXSwgRVhQSVJZKTtcbiAgICBjb25zdCBub1ByZWZpeCA9IGNhbGxkYXRhLnNsaWNlKDIpOyAvLyBzdHJpcCAweFxuICAgIGNvbnN0IGFkZHJlc3NlcyA9IGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YShub1ByZWZpeCk7XG4gICAgYWRkcmVzc2VzLnNob3VsZC5kZWVwRXF1YWwoW0NURVNUMV9UT0tFTl9BRERSRVNTLnRvTG93ZXJDYXNlKCldKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgdW5yZWNvZ25pc2VkIGNhbGxkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAoKSA9PiBkZWNvZGVUb2tlbkFkZHJlc3Nlc0Zyb21EZWxlZ2F0aW9uQ2FsbGRhdGEoJzB4ZGVhZGJlZWYwMDAwMDAwMCcpLFxuICAgICAgL05vdCBhIHZhbGlkIGRlbGVnYXRpb24gY2FsbGRhdGEvXG4gICAgKTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB2ZXJpZnlUcmFuc2FjdGlvbiDigJMgY29uZmlkZW50aWFsIGNvbnNvbGlkYXRpb24gKEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IE1VTFRJU0lHX1dBTExFVF9DT05UUkFDVCA9ICcweDNiNTg2ODQ1MjU1NjRiMzhhMzgxZTQ2YTczMTcwM2VkMDNmMzIxMjInO1xuY29uc3QgQ09OU09MSURBVElPTl9GT1JXQVJERVIgPSAnMHhmNGJjYjM2NmJiNWUzNGViYmVlNTFmYWU1ZGU5OGNjODc2YzAxNDZmJztcbmNvbnN0IENPTlNPTElEQVRJT05fQkFTRV9BRERSRVNTID0gJzB4M2I1ODY4NDUyNTU2NGIzOGEzODFlNDZhNzMxNzAzZWQwM2YzMjEyMic7XG5jb25zdCBDT05TT0xJREFUSU9OX0hBTkRMRSA9ICcweDY1ZGYxMzZiNjA5YWIzOTVjMWE5OWFlNDZmNzkzOWM3ZjhiMjBkZmY0YmZmMDAwMDAwMDA4OGJiMDA1MCc7XG5jb25zdCBEVU1NWV9NVUxUSVNJR19TSUdOQVRVUkUgPSAnMHgnICsgJzAwJy5yZXBlYXQoNjUpO1xuXG5hc3luYyBmdW5jdGlvbiBidWlsZE11bHRpc2lnQ29uc29saWRhdGlvblR4SGV4KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZsdXNoQ2FsbGRhdGEgPSBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoXG4gICAgQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgQ09OU09MSURBVElPTl9CQVNFX0FERFJFU1MsXG4gICAgQ09OU09MSURBVElPTl9IQU5ETEVcbiAgKTtcbiAgY29uc3Qgc2VuZERhdGEgPSBzZW5kTXVsdGlTaWdEYXRhKFxuICAgIENPTlNPTElEQVRJT05fRk9SV0FSREVSLFxuICAgICcwJyxcbiAgICBmbHVzaENhbGxkYXRhLFxuICAgIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApICsgMzYwMCxcbiAgICAxNCxcbiAgICBEVU1NWV9NVUxUSVNJR19TSUdOQVRVUkVcbiAgKTtcblxuICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzEyMTAwMDAwJyB9KTtcbiAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICB0eEJ1aWxkZXIuY29udHJhY3QoTVVMVElTSUdfV0FMTEVUX0NPTlRSQUNUKTtcbiAgdHhCdWlsZGVyLmRhdGEoc2VuZERhdGEpO1xuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGREaXJlY3RDb25zb2xpZGF0aW9uVHhIZXgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcxMDAwMDAwMDAwJywgZ2FzTGltaXQ6ICcyMDAwMDAnIH0pO1xuICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgdHhCdWlsZGVyLmNvbnRyYWN0KENPTlNPTElEQVRJT05fRk9SV0FSREVSKTtcbiAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoQ09OU09MSURBVElPTl9GT1JXQVJERVIpO1xuICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoQ1RFU1QxX1RPS0VOX0FERFJFU1MpO1xuICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyk7XG4gIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoQ09OU09MSURBVElPTl9IQU5ETEUpO1xuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIOKAkyBjb25maWRlbnRpYWwgY29uc29saWRhdGlvbiAoRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGNvaW46IEVyYzc5ODRUb2tlbjtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIHJlZ2lzdGVyKGJpdGdvKTtcbiAgICBjb2luID0gYml0Z28uY29pbignaHRldGg6Y3Rlc3QxJykgYXMgRXJjNzk4NFRva2VuO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIG11bHRpc2lnIGNvbnNvbGlkYXRpb24gdHggKHNlbmRNdWx0aVNpZyDihpIgY2FsbEZyb21QYXJlbnQg4oaSIGNvbmZpZGVudGlhbFRyYW5zZmVyTm9Qcm9vZiknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZE11bHRpc2lnQ29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiBDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyB0eXBlOiAnY29uc29saWRhdGUnIH0gYXMgYW55LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNmE0NGViYzAzMjZlMWJlNDVjMWQ3OTc1NDJjOGM2MzQnLFxuICAgICAgICB0eEhleCxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogQ09OU09MSURBVElPTl9GT1JXQVJERVIsIGFtb3VudDogJzAnIH1dLFxuICAgICAgfSBhcyBhbnksXG4gICAgICB3YWxsZXQsXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBkaXJlY3QgY2FsbEZyb21QYXJlbnQgY29uc29saWRhdGlvbiB0eCAoVFNTIHNoYXBlKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiBDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyB0eXBlOiAnY29uc29saWRhdGUnIH0gYXMgYW55LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNmE0NGViYzAzMjZlMWJlNDVjMWQ3OTc1NDJjOGM2MzQnLFxuICAgICAgICB0eEhleCxcbiAgICAgIH0gYXMgYW55LFxuICAgICAgd2FsbGV0LFxuICAgICAgdmVyaWZpY2F0aW9uOiB7IGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlIH0sXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgbXVsdGlzaWcgY29uc29saWRhdGlvbiB3aGVuIHBhcmVudCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdhbGxldCBiYXNlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZE11bHRpc2lnQ29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiAnMHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyB9LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgdHlwZTogJ2NvbnNvbGlkYXRlJyB9IGFzIGFueSxcbiAgICAgICAgdHhQcmVidWlsZDogeyBjb25zb2xpZGF0ZUlkOiAnYWJjMTIzJywgdHhIZXggfSBhcyBhbnksXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcGFyZW50IGFkZHJlc3MgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgbXVsdGlzaWcgY29uc29saWRhdGlvbiB1c2luZyBmb3J3YXJkZXIgYWRkcmVzcyBmcm9tIHR4UHJlYnVpbGQudHhJbmZvLnJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZE11bHRpc2lnQ29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiBDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyB9LFxuICAgIH0pO1xuXG4gICAgLy8gTm8gdG9wLWxldmVsIHJlY2lwaWVudHM7IGZvcndhcmRlciBjb21lcyBmcm9tIHR4SW5mby5yZWNpcGllbnRzXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyB0eXBlOiAnY29uc29saWRhdGUnIH0gYXMgYW55LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNmE0NGViYzAzMjZlMWJlNDVjMWQ3OTc1NDJjOGM2MzQnLFxuICAgICAgICB0eEhleCxcbiAgICAgICAgdHhJbmZvOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IENPTlNPTElEQVRJT05fRk9SV0FSREVSLCBhbW91bnQ6ICcwJyB9XSB9LFxuICAgICAgfSBhcyBhbnksXG4gICAgICB3YWxsZXQsXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgbXVsdGlzaWcgY29uc29saWRhdGlvbiB3aGVuIHR4SW5mby5yZWNpcGllbnRzIGZvcndhcmRlciBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHR4IGZvcndhcmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkTXVsdGlzaWdDb25zb2xpZGF0aW9uVHhIZXgoKTtcbiAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBjb2luLCB7XG4gICAgICBjb2luU3BlY2lmaWM6IHsgYmFzZUFkZHJlc3M6IENPTlNPTElEQVRJT05fQkFTRV9BRERSRVNTIH0sXG4gICAgfSk7XG5cbiAgICBhd2FpdCBjb2luXG4gICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczogeyB0eXBlOiAnY29uc29saWRhdGUnIH0gYXMgYW55LFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgY29uc29saWRhdGVJZDogJ2FiYzEyMycsXG4gICAgICAgICAgdHhIZXgsXG4gICAgICAgICAgdHhJbmZvOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnLCBhbW91bnQ6ICcwJyB9XSB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9mb3J3YXJkZXIgYWRkcmVzcyBtaXNtYXRjaC8pO1xuICB9KTtcblxuICAvLyBUU1MgTVBDdjIgc2lnbmluZyBwYXRoIOKAlCByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMgc2V0cyB0eXBlIGZyb20gaW50ZW50LmludGVudFR5cGUgKCdjb25zb2xpZGF0ZVRva2VuJyksXG4gIC8vIGFuZCB0eFByZWJ1aWxkIGhhcyBvbmx5IHR4SGV4IChubyBjb25zb2xpZGF0ZUlkLCBubyByZWNpcGllbnRzKS4gVGhpcyB3YXMgdGhlIGJyb2tlbiBwYXRoIGJlZm9yZVxuICAvLyBpc0NvbnNvbGlkYXRpb25UcmFuc2FjdGlvbiB3YXMgdXBkYXRlZCB0byByZWNvZ25pc2UgJ2NvbnNvbGlkYXRlVG9rZW4nLlxuICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIGRpcmVjdCBjYWxsRnJvbVBhcmVudCBjb25zb2xpZGF0aW9uIHR4IHdoZW4gdHlwZSBpcyBjb25zb2xpZGF0ZVRva2VuIChUU1MgTVBDdjIgc2lnbmluZyBwYXRoKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiBDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczoge1xuICAgICAgICB0eXBlOiAnY29uc29saWRhdGVUb2tlbicsXG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IENPTlNPTElEQVRJT05fRk9SV0FSREVSLCBhbW91bnQ6ICcwJyB9XSxcbiAgICAgIH0gYXMgYW55LFxuICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgIHdhbGxldCxcbiAgICB9KTtcbiAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCBjYWxsRnJvbVBhcmVudCBjb25zb2xpZGF0aW9uIHdpdGggdHlwZSBjb25zb2xpZGF0ZVRva2VuIHdoZW4gcGFyZW50IGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggd2FsbGV0IGJhc2UgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiAnMHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyB9LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB0eXBlOiAnY29uc29saWRhdGVUb2tlbicsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogQ09OU09MSURBVElPTl9GT1JXQVJERVIsIGFtb3VudDogJzAnIH1dLFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9wYXJlbnQgYWRkcmVzcyBtaXNtYXRjaC8pO1xuICB9KTtcbn0pO1xuIl19
1037
+ // ---------------------------------------------------------------------------
1038
+ // recover() – ERC-7984 confidential token recovery
1039
+ // ---------------------------------------------------------------------------
1040
+ describe('Erc7984Token – recover()', function () {
1041
+ let bitgo;
1042
+ let coin;
1043
+ let explorerStub;
1044
+ const WALLET_CONTRACT = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
1045
+ const RECOVERY_DEST = '0x19645032c7f1533395d44a629462e751084d3e4c';
1046
+ const HANDLE = '0x' + 'ab'.repeat(32);
1047
+ const ZERO_HANDLE = '0x' + '00'.repeat(32);
1048
+ const USER_KEY = testData.PRIVATE_KEY;
1049
+ const BACKUP_KEY = testData.PRIVATE_KEY;
1050
+ const WALLET_PASSPHRASE = 'test wallet passphrase';
1051
+ // Encrypted keys for test (encrypt with the test passphrase)
1052
+ let encryptedUserKey;
1053
+ let encryptedBackupKey;
1054
+ before(async function () {
1055
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
1056
+ bitgo.initializeTestVars();
1057
+ (0, register_1.register)(bitgo);
1058
+ coin = bitgo.coin('hteth:ctest1');
1059
+ encryptedUserKey = await bitgo.encrypt({ input: USER_KEY, password: WALLET_PASSPHRASE });
1060
+ encryptedBackupKey = await bitgo.encrypt({ input: BACKUP_KEY, password: WALLET_PASSPHRASE });
1061
+ });
1062
+ beforeEach(function () {
1063
+ explorerStub = sinon_1.default.stub(coin, 'recoveryBlockchainExplorerQuery');
1064
+ });
1065
+ afterEach(function () {
1066
+ sinon_1.default.restore();
1067
+ });
1068
+ function mockExplorerForRecovery(handle = HANDLE) {
1069
+ explorerStub.callsFake(async (query) => {
1070
+ if (query.action === 'txlist') {
1071
+ // getAddressNonce: return empty tx list (nonce = 0)
1072
+ return { result: [] };
1073
+ }
1074
+ if (query.action === 'balance') {
1075
+ // queryAddressBalance: return enough ETH for gas
1076
+ return { result: '100000000000000000' }; // 0.1 ETH
1077
+ }
1078
+ if (query.action === 'eth_call' && query.data?.startsWith('a0b7967b')) {
1079
+ // querySequenceId: getNextSequenceId
1080
+ return { result: '0x0000000000000000000000000000000000000000000000000000000000000005' };
1081
+ }
1082
+ if (query.action === 'eth_call' && query.to === CTEST1_TOKEN_ADDRESS) {
1083
+ // queryConfidentialBalance
1084
+ return { result: handle };
1085
+ }
1086
+ throw new Error(`Unexpected explorer query: ${JSON.stringify(query)}`);
1087
+ });
1088
+ }
1089
+ it('should build a full balance sweep recovery transaction', async function () {
1090
+ mockExplorerForRecovery();
1091
+ const result = await coin.recover({
1092
+ userKey: encryptedUserKey,
1093
+ backupKey: encryptedBackupKey,
1094
+ walletPassphrase: WALLET_PASSPHRASE,
1095
+ walletContractAddress: WALLET_CONTRACT,
1096
+ recoveryDestination: RECOVERY_DEST,
1097
+ });
1098
+ should_1.default.exist(result);
1099
+ result.should.have.property('id');
1100
+ result.should.have.property('tx');
1101
+ result.tx.should.be.a.String();
1102
+ result.tx.length.should.be.greaterThan(0);
1103
+ });
1104
+ it('should use user-provided encryptedHandle and skip auto-query', async function () {
1105
+ const userHandle = '0x' + 'ff'.repeat(32);
1106
+ explorerStub.callsFake(async (query) => {
1107
+ if (query.action === 'txlist') {
1108
+ return { result: [] };
1109
+ }
1110
+ if (query.action === 'balance') {
1111
+ return { result: '100000000000000000' };
1112
+ }
1113
+ if (query.action === 'eth_call' && query.data?.startsWith('a0b7967b')) {
1114
+ return { result: '0x0000000000000000000000000000000000000000000000000000000000000005' };
1115
+ }
1116
+ if (query.action === 'eth_call' && query.to === CTEST1_TOKEN_ADDRESS) {
1117
+ throw new Error('Should not query confidentialBalanceOf when handle is provided');
1118
+ }
1119
+ throw new Error(`Unexpected explorer query: ${JSON.stringify(query)}`);
1120
+ });
1121
+ const result = await coin.recover({
1122
+ userKey: encryptedUserKey,
1123
+ backupKey: encryptedBackupKey,
1124
+ walletPassphrase: WALLET_PASSPHRASE,
1125
+ walletContractAddress: WALLET_CONTRACT,
1126
+ recoveryDestination: RECOVERY_DEST,
1127
+ encryptedHandle: userHandle,
1128
+ });
1129
+ should_1.default.exist(result);
1130
+ result.should.have.property('tx');
1131
+ });
1132
+ it('should still build a recovery tx even with a zero-value handle (encrypted handles are always non-zero)', async function () {
1133
+ mockExplorerForRecovery(ZERO_HANDLE);
1134
+ const result = await coin.recover({
1135
+ userKey: encryptedUserKey,
1136
+ backupKey: encryptedBackupKey,
1137
+ walletPassphrase: WALLET_PASSPHRASE,
1138
+ walletContractAddress: WALLET_CONTRACT,
1139
+ recoveryDestination: RECOVERY_DEST,
1140
+ });
1141
+ should_1.default.exist(result);
1142
+ result.should.have.property('tx');
1143
+ });
1144
+ it('should return unsigned sweep format when isUnsignedSweep is true', async function () {
1145
+ mockExplorerForRecovery();
1146
+ const result = await coin.recover({
1147
+ userKey: testData.PUBLIC_KEY,
1148
+ backupKey: testData.PUBLIC_KEY,
1149
+ walletContractAddress: WALLET_CONTRACT,
1150
+ recoveryDestination: RECOVERY_DEST,
1151
+ isUnsignedSweep: true,
1152
+ });
1153
+ should_1.default.exist(result);
1154
+ result.should.have.property('tx');
1155
+ result.should.have.property('userKey');
1156
+ result.should.have.property('backupKey');
1157
+ });
1158
+ it('should return KRS recovery format with backupKey and coin', async function () {
1159
+ explorerStub.callsFake(async (query) => {
1160
+ if (query.action === 'txlist') {
1161
+ return { result: [] };
1162
+ }
1163
+ if (query.action === 'balance') {
1164
+ return { result: '100000000000000000' };
1165
+ }
1166
+ if (query.action === 'eth_call' && query.data?.startsWith('a0b7967b')) {
1167
+ return { result: '0x0000000000000000000000000000000000000000000000000000000000000005' };
1168
+ }
1169
+ if (query.action === 'eth_call' && query.to === CTEST1_TOKEN_ADDRESS) {
1170
+ return { result: HANDLE };
1171
+ }
1172
+ throw new Error(`Unexpected explorer query: ${JSON.stringify(query)}`);
1173
+ });
1174
+ const result = (await coin.recover({
1175
+ userKey: encryptedUserKey,
1176
+ backupKey: testData.PUBLIC_KEY,
1177
+ walletPassphrase: WALLET_PASSPHRASE,
1178
+ walletContractAddress: WALLET_CONTRACT,
1179
+ recoveryDestination: RECOVERY_DEST,
1180
+ krsProvider: 'keyternal',
1181
+ }));
1182
+ should_1.default.exist(result);
1183
+ result.should.have.property('tx');
1184
+ result.should.have.property('backupKey', testData.PUBLIC_KEY);
1185
+ result.should.have.property('coin', 'hteth:ctest1');
1186
+ });
1187
+ it('should throw when backup key has insufficient gas', async function () {
1188
+ explorerStub.callsFake(async (query) => {
1189
+ if (query.action === 'txlist') {
1190
+ return { result: [] };
1191
+ }
1192
+ if (query.action === 'balance') {
1193
+ // Very low balance, not enough for 12M gas
1194
+ return { result: '100' };
1195
+ }
1196
+ throw new Error(`Unexpected explorer query: ${JSON.stringify(query)}`);
1197
+ });
1198
+ await coin
1199
+ .recover({
1200
+ userKey: encryptedUserKey,
1201
+ backupKey: encryptedBackupKey,
1202
+ walletPassphrase: WALLET_PASSPHRASE,
1203
+ walletContractAddress: WALLET_CONTRACT,
1204
+ recoveryDestination: RECOVERY_DEST,
1205
+ })
1206
+ .should.be.rejectedWith(/has balance.*Gwei/);
1207
+ });
1208
+ it('should throw when userKey is missing', async function () {
1209
+ await coin
1210
+ .recover({
1211
+ userKey: undefined,
1212
+ backupKey: encryptedBackupKey,
1213
+ walletPassphrase: WALLET_PASSPHRASE,
1214
+ walletContractAddress: WALLET_CONTRACT,
1215
+ recoveryDestination: RECOVERY_DEST,
1216
+ })
1217
+ .should.be.rejectedWith(/missing userKey/);
1218
+ });
1219
+ it('should throw when walletContractAddress is invalid', async function () {
1220
+ await coin
1221
+ .recover({
1222
+ userKey: encryptedUserKey,
1223
+ backupKey: encryptedBackupKey,
1224
+ walletPassphrase: WALLET_PASSPHRASE,
1225
+ walletContractAddress: 'not-an-address',
1226
+ recoveryDestination: RECOVERY_DEST,
1227
+ })
1228
+ .should.be.rejectedWith(/invalid walletContractAddress/);
1229
+ });
1230
+ it('should produce tx with inner calldata matching confidentialTransfer selector 0x5bebed7e', async function () {
1231
+ mockExplorerForRecovery();
1232
+ const result = (await coin.recover({
1233
+ userKey: encryptedUserKey,
1234
+ backupKey: encryptedBackupKey,
1235
+ walletPassphrase: WALLET_PASSPHRASE,
1236
+ walletContractAddress: WALLET_CONTRACT,
1237
+ recoveryDestination: RECOVERY_DEST,
1238
+ }));
1239
+ should_1.default.exist(result.tx);
1240
+ // The serialized tx contains the sendMultiSig calldata which wraps confidentialTransfer.
1241
+ // The confidentialTransfer selector (5bebed7e) must appear somewhere in the serialized tx.
1242
+ const selectorNoPrefix = abstract_eth_1.confidentialTransferNoProofMethodId.slice(2);
1243
+ result.tx.should.containEql(selectorNoPrefix);
1244
+ });
1245
+ });
1246
+ // ---------------------------------------------------------------------------
1247
+ // queryConfidentialBalance() tests
1248
+ // ---------------------------------------------------------------------------
1249
+ describe('Erc7984Token – queryConfidentialBalance()', function () {
1250
+ let bitgo;
1251
+ let coin;
1252
+ let explorerStub;
1253
+ const WALLET_ADDRESS = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
1254
+ const HANDLE = '0x' + 'ab'.repeat(32);
1255
+ before(function () {
1256
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
1257
+ bitgo.initializeTestVars();
1258
+ (0, register_1.register)(bitgo);
1259
+ coin = bitgo.coin('hteth:ctest1');
1260
+ });
1261
+ beforeEach(function () {
1262
+ explorerStub = sinon_1.default.stub(coin, 'recoveryBlockchainExplorerQuery');
1263
+ });
1264
+ afterEach(function () {
1265
+ sinon_1.default.restore();
1266
+ });
1267
+ it('should return a valid bytes32 handle from eth_call', async function () {
1268
+ explorerStub.resolves({ result: HANDLE });
1269
+ const result = await coin.queryConfidentialBalance(WALLET_ADDRESS);
1270
+ result.should.equal(HANDLE);
1271
+ });
1272
+ it('should verify the eth_call is made to the correct token contract', async function () {
1273
+ explorerStub.resolves({ result: HANDLE });
1274
+ await coin.queryConfidentialBalance(WALLET_ADDRESS);
1275
+ explorerStub.calledOnce.should.be.true();
1276
+ const callArgs = explorerStub.firstCall.args[0];
1277
+ callArgs.should.have.property('action', 'eth_call');
1278
+ callArgs.should.have.property('to', CTEST1_TOKEN_ADDRESS);
1279
+ callArgs.should.have.property('module', 'proxy');
1280
+ });
1281
+ it('should throw when explorer returns no result', async function () {
1282
+ explorerStub.resolves({ result: null });
1283
+ await coin.queryConfidentialBalance(WALLET_ADDRESS).should.be.rejectedWith(/Could not obtain confidential balance/);
1284
+ });
1285
+ it('should throw when response format is unexpected (not 66 chars)', async function () {
1286
+ explorerStub.resolves({ result: '0xabcd' });
1287
+ await coin
1288
+ .queryConfidentialBalance(WALLET_ADDRESS)
1289
+ .should.be.rejectedWith(/Unexpected confidentialBalanceOf response format/);
1290
+ });
1291
+ });
1292
+ // ---------------------------------------------------------------------------
1293
+ // setGasLimit() override tests
1294
+ // ---------------------------------------------------------------------------
1295
+ describe('Erc7984Token – setGasLimit()', function () {
1296
+ let bitgo;
1297
+ let coin;
1298
+ before(function () {
1299
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
1300
+ bitgo.initializeTestVars();
1301
+ (0, register_1.register)(bitgo);
1302
+ coin = bitgo.coin('hteth:ctest1');
1303
+ });
1304
+ it('should return 800000 as default gas limit', function () {
1305
+ const gasLimit = coin.setGasLimit();
1306
+ gasLimit.should.equal(800000);
1307
+ });
1308
+ it('should accept user-provided gas limit', function () {
1309
+ const gasLimit = coin.setGasLimit(1000000);
1310
+ gasLimit.should.equal(1000000);
1311
+ });
1312
+ });
1313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJjNzk4NFRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2VyYzc5ODRUb2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFDSCxvREFBNEI7QUFDNUIsa0RBQTBCO0FBQzFCLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFDMUQsOENBQTBEO0FBQzFELHNEQVE2QjtBQUc3Qiw2Q0FBMEM7QUFDMUMsaURBQThDO0FBQzlDLDJEQUE2QztBQUU3Qyw4RUFBOEU7QUFDOUUsWUFBWTtBQUNaLDhFQUE4RTtBQUU5RSwwRUFBMEU7QUFDMUUsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMsQ0FBQztBQUN0RSxNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO0FBRXRFLHNFQUFzRTtBQUN0RSxNQUFNLG9CQUFvQixHQUFHLDRDQUE0QyxDQUFDO0FBQzFFLHFFQUFxRTtBQUNyRSxNQUFNLG1CQUFtQixHQUFHLDRDQUE0QyxDQUFDO0FBRXpFLE1BQU0sbUJBQW1CLEdBQUcsNENBQTRDLENBQUM7QUFDekUsTUFBTSxpQkFBaUIsR0FBRyw0Q0FBNEMsQ0FBQztBQUN2RSxNQUFNLGlCQUFpQixHQUFHLDRDQUE0QyxDQUFDO0FBRXZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFFM0QsOEVBQThFO0FBQzlFLFVBQVU7QUFDViw4RUFBOEU7QUFFOUU7O0dBRUc7QUFDSCxLQUFLLFVBQVUsb0JBQW9CLENBQUMsVUFBa0IsRUFBRSxjQUF3QixFQUFFLEtBQUssR0FBRyxHQUFHO0lBQzNGLE1BQU0sU0FBUyxHQUFHLElBQUEsdUJBQVUsRUFBQyxPQUFPLENBQXVCLENBQUM7SUFDNUQsU0FBUyxDQUFD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Q0FBQyxDQUFDO1FBQ2hCLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBaUIsQ0FBQztJQUNwRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUU7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVbml0IHRlc3RzIGZvciBFcmM3OTg0VG9rZW4uXG4gKlxuICogQ292ZXJzOlxuICogICAtIGdldFRva2VuRW5hYmxlbWVudENvbmZpZ1xuICogICAtIHZlcmlmeVRyYW5zYWN0aW9uIChUU1MgYW5kIG11bHRpc2lnIHBhdGhzKVxuICogICAtIHZlcmlmeVRyYW5zYWN0aW9uIChjb25maWRlbnRpYWwgdHJhbnNmZXIgLyBTZW5kRVJDNzk4NCBwYXRoKVxuICogICAtIGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YSAocm91bmQtdHJpcCBhbmQgZm9yd2FyZGVyLXdyYXBwZWQpXG4gKiAgIC0gcmVjb3ZlcigpIChFUkMtNzk4NCBjb25maWRlbnRpYWwgdG9rZW4gcmVjb3ZlcnkpXG4gKiAgIC0gcXVlcnlDb25maWRlbnRpYWxCYWxhbmNlKClcbiAqL1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEsXG4gIGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YSxcbiAgc2VuZE11bHRpU2lnRGF0YSxcbiAgd3JhcEluQ2FsbEZyb21QYXJlbnQsXG4gIGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YSxcbiAgVHJhbnNmZXJCdWlsZGVyRVJDNzk4NCxcbiAgY29uZmlkZW50aWFsVHJhbnNmZXJOb1Byb29mTWV0aG9kSWQsXG59IGZyb20gJ0BiaXRnby9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgRXJjNzk4NFRva2VuIH0gZnJvbSAnLi4vLi4vc3JjL2VyYzc5ODRUb2tlbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IGdldEJ1aWxkZXIgfSBmcm9tICcuL2dldEJ1aWxkZXInO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tICcuLi8uLi9zcmMvcmVnaXN0ZXInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2V0aCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uc3RhbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSG9vZGkgQUNMIGNvbnRyYWN0IGFkZHJlc3MgKE5ldHdvcmtzLnRlc3QuaG9vZGkuemFtYUFjbENvbnRyYWN0QWRkcmVzcylcbmNvbnN0IFpBTUFfQUNMX0FERFJFU1MgPSAnMHg2ZDNmYWY2Zjg2ZTFmZjlmM2IwODMxZGRhOTIwYWJhMWNiZDViZDY4JztcbmNvbnN0IERFTEVHQVRFX0FERFJFU1MgPSAnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJztcblxuLy8gaHRldGg6Y3Rlc3QxIHRva2VuIGNvbnRyYWN0IGFkZHJlc3MgKGZyb20gc3RhdGljcy9lcmM3OTg0VG9rZW5zLnRzKVxuY29uc3QgQ1RFU1QxX1RPS0VOX0FERFJFU1MgPSAnMHg3YjFkNTliYmNkMjkxZGFhNTljYjZjOGM1YmMwNGRlMWFmYzRhYmExJztcbi8vIGh0ZXRoOmN1c2R0IHRva2VuIGNvbnRyYWN0IGFkZHJlc3MgKGZyb20gc3RhdGljcy9lcmM3OTg0VG9rZW5zLnRzKVxuY29uc3QgQ1VTRFRfVE9LRU5fQUREUkVTUyA9ICcweDJkZWJiZTA0ODdlZjkyMWRmNDQ1N2Y5ZTM2ZWQwNWJlMmRmMWFjNzUnO1xuXG5jb25zdCBXUk9OR19UT0tFTl9BRERSRVNTID0gJzB4ZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZic7XG5jb25zdCBXUk9OR19BQ0xfQUREUkVTUyA9ICcweGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnO1xuY29uc3QgRk9SV0FSREVSX0FERFJFU1MgPSAnMHgxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwJztcblxuY29uc3QgRVhQSVJZID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkgKyAzNjUgKiA4NjQwMDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBCdWlsZHMgYSByb290LXdhbGxldCBkZWxlZ2F0aW9uIHR4IGhleCAodG8gPSBBQ0wsIGRhdGEgPSBtdWx0aWNhbGwpLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZERlbGVnYXRpb25UeEhleChhY2xBZGRyZXNzOiBzdHJpbmcsIHRva2VuQWRkcmVzc2VzOiBzdHJpbmdbXSwgdmFsdWUgPSAnMCcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzIwMDAwMCcgfSk7XG4gIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgdHhCdWlsZGVyLmNvbnRyYWN0KGFjbEFkZHJlc3MpO1xuICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIHRva2VuQWRkcmVzc2VzLCBFWFBJUlkpO1xuICB0eEJ1aWxkZXIuZGF0YShjYWxsZGF0YSk7XG4gIGlmICh2YWx1ZSAhPT0gJzAnKSB7XG4gICAgdHhCdWlsZGVyLnZhbHVlKHZhbHVlKTtcbiAgfVxuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBmb3J3YXJkZXIgZGVsZWdhdGlvbiB0eCBoZXggKHRvID0gZm9yd2FyZGVyLCBkYXRhID0gY2FsbEZyb21QYXJlbnQoQUNMLCAwLCBtdWx0aWNhbGwpKS5cbiAqIFRoaXMgbWlycm9ycyB3aGF0IERlY3J5cHRpb25EZWxlZ2F0aW9uQnVpbGRlci5idWlsZCgpIHJldHVybnMgd2hlbiBmb3J3YXJkZXJBZGRyZXNzIGlzIHNldC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRGb3J3YXJkZXJEZWxlZ2F0aW9uVHhIZXgoXG4gIGZvcndhcmRlckFkZHJlc3M6IHN0cmluZyxcbiAgYWNsQWRkcmVzczogc3RyaW5nLFxuICB0b2tlbkFkZHJlc3Nlczogc3RyaW5nW11cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTAwMDAwMDAwMCcsIGdhc0xpbWl0OiAnMjAwMDAwJyB9KTtcbiAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICB0eEJ1aWxkZXIuY29udHJhY3QoZm9yd2FyZGVyQWRkcmVzcyk7XG4gIGNvbnN0IGlubmVyQ2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCB0b2tlbkFkZHJlc3NlcywgRVhQSVJZKTtcbiAgY29uc3Qgb3V0ZXJDYWxsZGF0YSA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KGFjbEFkZHJlc3MsIGlubmVyQ2FsbGRhdGEpO1xuICB0eEJ1aWxkZXIuZGF0YShvdXRlckNhbGxkYXRhKTtcbiAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgcmV0dXJuIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVzdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZSgnRXJjNzk4NFRva2VuJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGNvaW46IEVyYzc5ODRUb2tlbjtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIHJlZ2lzdGVyKGJpdGdvKTtcbiAgICBjb2luID0gYml0Z28uY29pbignaHRldGg6Y3Rlc3QxJykgYXMgRXJjNzk4NFRva2VuO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGRlc2NyaWJlKCdnZXRUb2tlbkVuYWJsZW1lbnRDb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcmVxdWlyZXNUb2tlbkVuYWJsZW1lbnQ6IHRydWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBjb2luLmdldFRva2VuRW5hYmxlbWVudENvbmZpZygpO1xuICAgICAgY29uZmlnLnJlcXVpcmVzVG9rZW5FbmFibGVtZW50LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiB0cnVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29uZmlnID0gY29pbi5nZXRUb2tlbkVuYWJsZW1lbnRDb25maWcoKTtcbiAgICAgIGNvbmZpZy5zdXBwb3J0c011bHRpcGxlVG9rZW5FbmFibGVtZW50cy5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIOKAkyBub24tZW5hYmxlLXRva2VuJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcm91dGUgdG8gY29uZmlkZW50aWFsIHRyYW5zZmVyIHBhdGggd2hlbiB0eXBlIGlzIG5vdCBlbmFibGV0b2tlbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIE5vbi1lbmFibGV0b2tlbiB0cmFuc2FjdGlvbnMgcm91dGUgdG8gdmVyaWZ5Q29uZmlkZW50aWFsVHJhbnNmZXIuXG4gICAgICAvLyBFbXB0eSByZWNpcGllbnRzIHRyaWdnZXJzIG91ciBFUkM3OTg0LXNwZWNpZmljIHZhbGlkYXRpb24gZXJyb3IsXG4gICAgICAvLyBjb25maXJtaW5nIHRoZSBvdmVycmlkZSBvbmx5IGludGVyY2VwdHMgdGhlIGVuYWJsZXRva2VuIHR5cGUuXG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7fSBhcyBhbnksXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9yZWNpcGllbnRzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgZW50cnkvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb24g4oCTIFRTUyBwYXRoJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgc2luZ2xlLXRva2VuIGRlbGVnYXRpb24gdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGVsZWdhdGlvblR4SGV4KFpBTUFfQUNMX0FERFJFU1MsIFtDVEVTVDFfVE9LRU5fQUREUkVTU10pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0VHlwZTogJ3RzcycsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIG11bHRpLXRva2VuIGRlbGVnYXRpb24gdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGVsZWdhdGlvblR4SGV4KFpBTUFfQUNMX0FERFJFU1MsIFtDVEVTVDFfVE9LRU5fQUREUkVTUywgQ1VTRFRfVE9LRU5fQUREUkVTU10pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH0sIHsgbmFtZTogJ2h0ZXRoOmN1c2R0JyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIEFDTCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZERlbGVnYXRpb25UeEhleChXUk9OR19BQ0xfQUREUkVTUywgW0NURVNUMV9UT0tFTl9BRERSRVNTXSk7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2RvZXMgbm90IG1hdGNoIEFDTCBjb250cmFjdC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGNhbGxkYXRhIGNvbnRhaW5zIHdyb25nIHRva2VuIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGVsZWdhdGlvblR4SGV4KFpBTUFfQUNMX0FERFJFU1MsIFtXUk9OR19UT0tFTl9BRERSRVNTXSk7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCBmb3VuZCBpbiBkZWxlZ2F0aW9uIGNhbGxkYXRhLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIGZvcndhcmRlciBkZWxlZ2F0aW9uIHR4IChjYWxsRnJvbVBhcmVudCBzaGFwZSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRm9yd2FyZGVyRGVsZWdhdGlvblR4SGV4KEZPUldBUkRFUl9BRERSRVNTLCBaQU1BX0FDTF9BRERSRVNTLCBbQ1RFU1QxX1RPS0VOX0FERFJFU1NdKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnaHRldGg6Y3Rlc3QxJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSBmb3J3YXJkZXIgZGVsZWdhdGlvbiB0eCB3aXRoIG11bHRpcGxlIHRva2VucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRGb3J3YXJkZXJEZWxlZ2F0aW9uVHhIZXgoRk9SV0FSREVSX0FERFJFU1MsIFpBTUFfQUNMX0FERFJFU1MsIFtcbiAgICAgICAgQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICAgIENVU0RUX1RPS0VOX0FERFJFU1MsXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAnaHRldGg6Y3Rlc3QxJyB9LCB7IG5hbWU6ICdodGV0aDpjdXNkdCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBmb3J3YXJkZXIgY2FsbGRhdGEgY29udGFpbnMgd3JvbmcgdG9rZW4gYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRGb3J3YXJkZXJEZWxlZ2F0aW9uVHhIZXgoRk9SV0FSREVSX0FERFJFU1MsIFpBTUFfQUNMX0FERFJFU1MsIFtXUk9OR19UT0tFTl9BRERSRVNTXSk7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL25vdCBmb3VuZCBpbiBkZWxlZ2F0aW9uIGNhbGxkYXRhLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gY2FsbGRhdGEgaGFzIHVucmVjb2duaXNlZCBtZXRob2QgSUQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBCdWlsZCBhIHR4IHdpdGggYXJiaXRyYXJ5IGNhbGxkYXRhIHRoYXQgaXMgbmVpdGhlciBtdWx0aWNhbGwgbm9yIGNhbGxGcm9tUGFyZW50XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcxMDAwMDAwMDAwJywgZ2FzTGltaXQ6ICcyMDAwMDAnIH0pO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdChaQU1BX0FDTF9BRERSRVNTKTtcbiAgICAgIHR4QnVpbGRlci5kYXRhKCcweGRlYWRiZWVmJyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3VucmVjb2duaXNlZCBjYWxsZGF0YSBtZXRob2QgSUQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0cmFuc2FjdGlvbiB2YWx1ZSBpcyBub3QgMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGREZWxlZ2F0aW9uVHhIZXgoWkFNQV9BQ0xfQUREUkVTUywgW0NURVNUMV9UT0tFTl9BRERSRVNTXSwgJzEnKTtcbiAgICAgIGF3YWl0IGNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIGVuYWJsZVRva2VuczogW3sgbmFtZTogJ2h0ZXRoOmN0ZXN0MScgfV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZXhwZWN0ZWQgdHJhbnNhY3Rpb24gdmFsdWUgMC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGVuYWJsZVRva2VucyBpcyBlbXB0eScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGREZWxlZ2F0aW9uVHhIZXgoWkFNQV9BQ0xfQUREUkVTUywgW0NURVNUMV9UT0tFTl9BRERSRVNTXSk7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAndHNzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2VuYWJsZVRva2VucyBtdXN0IGJlIG5vbi1lbXB0eS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICdodGV0aDpjdGVzdDEnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDoge30gYXMgYW55LFxuICAgICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0eEhleC8pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbiDigJMgbXVsdGlzaWcgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB2YWxpZCBidWlsZFBhcmFtcyByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9XSBhcyBhbnksXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IHRva2VuTmFtZTogJ2h0ZXRoOmN0ZXN0MScsIGFkZHJlc3M6ICcweGFiYycsIGFtb3VudDogJzAnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0VHlwZTogJ29uY2hhaW4nLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgbXVsdGlwbGUgdG9rZW4gcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9LFxuICAgICAgICAgICAgeyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFkZHJlc3M6ICcweGFiYycsIGFtb3VudDogJzAnIH0sXG4gICAgICAgICAgXSBhcyBhbnksXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAgeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9LFxuICAgICAgICAgICAgICB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYWRkcmVzczogJzB4YWJjJywgYW1vdW50OiAnMCcgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgICB3YWxsZXRUeXBlOiAnb25jaGFpbicsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYnVpbGRQYXJhbXMgcmVjaXBpZW50cyBoYXZlIHdyb25nIHRva2VuTmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IHRva2VuTmFtZTogJ2h0ZXRoOmN0ZXN0MScsIGFkZHJlc3M6ICcweGFiYycsIGFtb3VudDogJzAnIH1dIGFzIGFueSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IHRva2VuTmFtZTogJ2h0ZXRoOndyb25ndG9rZW4nLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ29uY2hhaW4nLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbm90IGZvdW5kIGluIGJ1aWxkUGFyYW1zIHJlY2lwaWVudHMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhbW91bnQgaXMgbm90IDAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmFibGV0b2tlbicsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcwJyB9XSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgICB0eXBlOiAnZW5hYmxldG9rZW4nLFxuICAgICAgICAgICAgICByZWNpcGllbnRzOiBbeyB0b2tlbk5hbWU6ICdodGV0aDpjdGVzdDEnLCBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcxMDAnIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9leHBlY3RlZCBhbW91bnQgMC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudHMgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7fSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgICAgICB3YWxsZXRUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIGJ1aWxkUGFyYW1zLnJlY2lwaWVudHMvKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB2ZXJpZnlUcmFuc2FjdGlvbiDigJMgY29uZmlkZW50aWFsIHRyYW5zZmVyIChTZW5kRVJDNzk4NCkgdGVzdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEJ1aWxkIGEgcmF3IHNpZ25lZCBzZW5kTXVsdGlTaWcgdHggaGV4IHRoYXQgd3JhcHMgYSBjb25maWRlbnRpYWxUcmFuc2ZlciBjYWxsLlxuICogVGhlIHdhbGxldCBjb250cmFjdCAoc2VuZE11bHRpU2lnIHdyYXBwZXIpIGlzIGB3YWxsZXRDb250cmFjdEFkZHJlc3NgLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyVHhIZXgob3B0czoge1xuICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgcmVjaXBpZW50QWRkcmVzczogc3RyaW5nO1xuICBlbmNyeXB0ZWRIYW5kbGU6IHN0cmluZztcbiAgaW5wdXRQcm9vZjogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGtleSA9IHRlc3REYXRhLktFWVBBSVJfUFJWLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nO1xuICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzEyMTAwMDAwJyB9KTtcbiAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIHR4QnVpbGRlci5jb250cmFjdChvcHRzLndhbGxldENvbnRyYWN0QWRkcmVzcyk7XG4gIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDNzk4NCk7XG5cbiAgY29uc3QgdHJhbnNmZXJCdWlsZGVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKCkgYXMgVHJhbnNmZXJCdWlsZGVyRVJDNzk4NDtcbiAgdHJhbnNmZXJCdWlsZGVyXG4gICAgLmZyb20oJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0ZCcpXG4gICAgLnRvKG9wdHMucmVjaXBpZW50QWRkcmVzcylcbiAgICAudG9rZW5Db250cmFjdEFkZHJlc3Mob3B0cy50b2tlbkNvbnRyYWN0QWRkcmVzcylcbiAgICAuZW5jcnlwdGVkSGFuZGxlKG9wdHMuZW5jcnlwdGVkSGFuZGxlKVxuICAgIC5pbnB1dFByb29mKG9wdHMuaW5wdXRQcm9vZilcbiAgICAuY29udHJhY3RTZXF1ZW5jZUlkKDEpXG4gICAgLmV4cGlyYXRpb25UaW1lKE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApICsgMzYwMClcbiAgICAua2V5KGtleSk7XG5cbiAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIOKAkyBjb25maWRlbnRpYWwgdHJhbnNmZXIgKFNlbmRFUkM3OTg0KScsIGZ1bmN0aW9uICgpIHtcbiAgLy8gV2FsbGV0IGNvbnRyYWN0IHRoYXQgd3JhcHMgdGhlIHNlbmRNdWx0aVNpZyBjYWxsXG4gIGNvbnN0IFdBTExFVF9DT05UUkFDVCA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAvLyBSZWNpcGllbnQgb2YgdGhlIGNvbmZpZGVudGlhbCB0cmFuc2ZlclxuICBjb25zdCBSRUNJUElFTlQgPSAnMHgxOTY0NTAzMmM3ZjE1MzMzOTVkNDRhNjI5NDYyZTc1MTA4NGQzZTRjJztcbiAgLy8gRW5jcnlwdGVkIGhhbmRsZTogc3ludGhldGljIDMyIGJ5dGVzXG4gIGNvbnN0IEhBTkRMRSA9ICcweCcgKyAnYWInLnJlcGVhdCgzMik7XG4gIC8vIElucHV0IHByb29mOiBzeW50aGV0aWMgNTAgYnl0ZXNcbiAgY29uc3QgUFJPT0YgPSAnMHgnICsgJ2NkJy5yZXBlYXQoNTApO1xuICAvLyBBIGRpZmZlcmVudCByZWNpcGllbnQgdG8gdHJpZ2dlciBtaXNtYXRjaFxuICBjb25zdCBXUk9OR19SRUNJUElFTlQgPSAnMHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJztcbiAgLy8gQSBkaWZmZXJlbnQgdG9rZW4gY29udHJhY3QgdG8gdHJpZ2dlciBtaXNtYXRjaFxuICBjb25zdCBXUk9OR19UT0tFTiA9ICcweGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmInO1xuXG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgY29pbjogRXJjNzk4NFRva2VuO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgcmVnaXN0ZXIoYml0Z28pO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCdodGV0aDpjdGVzdDEnKSBhcyBFcmM3OTg0VG9rZW47XG4gIH0pO1xuXG4gIC8vIFJlcHJlc2VudGF0aXZlIHBsYWludGV4dCBhbW91bnQgaW4gYmFzZSB1bml0cyAoZS5nLiwgMSBjVEVTVDEgPSAxXzAwMF8wMDAgdW5pdHMgYXQgNiBkZWNpbWFscylcbiAgY29uc3QgQU1PVU5UID0gJzEwMDAwMDAnO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgY29uZmlkZW50aWFsIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWF0Y2hpbmcgYW1vdW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXgsIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSB9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBubyByZWNpcGllbnQgaW5mbyBpcyBwcm92aWRlZCBpbiBlaXRoZXIgdHhQYXJhbXMgb3IgYnVpbGRQYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyVHhIZXgoe1xuICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiBXQUxMRVRfQ09OVFJBQ1QsXG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyBleHBlY3RlZCByZWNpcGllbnQvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgc3VjY2Vzc2Z1bGx5IHVzaW5nIGJ1aWxkUGFyYW1zLnJlY2lwaWVudHMgd2hlbiB0eFBhcmFtcyBoYXMgbm8gcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7fSxcbiAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgdHhIZXgsXG4gICAgICAgIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIH0gYXMgYW55LFxuICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHRva2VuIGNvbnRyYWN0IGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggdGhpcyBjb2luJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IFdST05HX1RPS0VOLFxuICAgICAgcmVjaXBpZW50QWRkcmVzczogUkVDSVBJRU5ULFxuICAgICAgZW5jcnlwdGVkSGFuZGxlOiBIQU5ETEUsXG4gICAgICBpbnB1dFByb29mOiBQUk9PRixcbiAgICB9KTtcblxuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3Rva2VuIGNvbnRyYWN0IGFkZHJlc3MgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHR4UGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IENURVNUMV9UT0tFTl9BRERSRVNTLFxuICAgICAgcmVjaXBpZW50QWRkcmVzczogUkVDSVBJRU5ULFxuICAgICAgZW5jcnlwdGVkSGFuZGxlOiBIQU5ETEUsXG4gICAgICBpbnB1dFByb29mOiBQUk9PRixcbiAgICB9KTtcblxuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFdST05HX1JFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3JlY2lwaWVudCBhZGRyZXNzIG1pc21hdGNoLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBjYWxsZGF0YSBpcyBub3QgYSBjb25maWRlbnRpYWwgdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzIwMDAwMCcgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KFdBTExFVF9DT05UUkFDVCk7XG4gICAgdHhCdWlsZGVyLmRhdGEoJzB4ZGVhZGJlZWYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZmFpbGVkIHRvIGRlY29kZSBjb25maWRlbnRpYWwgdHJhbnNmZXIgY2FsbGRhdGEvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4UGFyYW1zIGFtb3VudCBkb2VzIG5vdCBtYXRjaCBidWlsZFBhcmFtcyBhbW91bnQgKHdpdGggdHhIZXgpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IENURVNUMV9UT0tFTl9BRERSRVNTLFxuICAgICAgcmVjaXBpZW50QWRkcmVzczogUkVDSVBJRU5ULFxuICAgICAgZW5jcnlwdGVkSGFuZGxlOiBIQU5ETEUsXG4gICAgICBpbnB1dFByb29mOiBQUk9PRixcbiAgICB9KTtcblxuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiAnOTk5OTk5OScgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4LFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hbW91bnQgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4UGFyYW1zIGFtb3VudCBpcyAwICh3aXRoIHR4SGV4KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBjb2luXG4gICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBSRUNJUElFTlQsIGFtb3VudDogJzAnIH1dIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hbW91bnQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgc3RyaW5nLyk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBGaXJzdC1zaWduZXIgKG5vIHR4SGV4KSB0ZXN0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpdCgnc2hvdWxkIHZlcmlmeSB2YWxpZCBmaXJzdC1zaWduZXIgcGFyYW1zIHdoZW4gbm8gdHhIZXggaXMgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHt9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGZpcnN0LXNpZ25lciBwYXJhbXMgd2hlbiB0eFBhcmFtcyBhbmQgYnVpbGRQYXJhbXMgYW1vdW50cyBtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9IH0gYXMgYW55LFxuICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudHMgaXMgZW1wdHkgYW5kIG5vIHR4SGV4IGlzIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcmVjaXBpZW50cyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGVudHJ5Lyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiByZWNpcGllbnQgYWRkcmVzcyBpcyBpbnZhbGlkIGFuZCBubyB0eEhleCBpcyBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICdub3QtYW4tYWRkcmVzcycsIGFtb3VudDogQU1PVU5UIH1dIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3JlY2lwaWVudCBhZGRyZXNzIGlzIG1pc3Npbmcgb3IgaW52YWxpZC8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYW1vdW50IGlzIDAgYW5kIG5vIHR4SGV4IGlzIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6ICcwJyB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hbW91bnQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgc3RyaW5nLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhbW91bnQgaXMgZW1wdHkgYW5kIG5vIHR4SGV4IGlzIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6ICcnIH1dIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2Ftb3VudCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzdHJpbmcvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4UGFyYW1zIGFuZCBidWlsZFBhcmFtcyBhbW91bnRzIG1pc21hdGNoIGFuZCBubyB0eEhleCBpcyBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiAnOTk5OTk5OScgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyBidWlsZFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBSRUNJUElFTlQsIGFtb3VudDogQU1PVU5UIH1dIH0gfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hbW91bnQgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4UGFyYW1zIGFuZCBidWlsZFBhcmFtcyByZWNpcGllbnQgYWRkcmVzc2VzIG1pc21hdGNoIGFuZCBubyB0eEhleCBpcyBwcmVzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFdST05HX1JFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9yZWNpcGllbnQgYWRkcmVzcyBtaXNtYXRjaC8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZlcmlmeSB3aGVuIHR4SGV4IGFic2VudCBhbmQgYnVpbGRQYXJhbXMgaGFzIG1hdGNoaW5nIHJlY2lwaWVudCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICBidWlsZFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBSRUNJUElFTlQsIGFtb3VudDogQU1PVU5UIH1dIH0sXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGRlY29kZWQgcmVjaXBpZW50IGFnYWluc3QgYnVpbGRQYXJhbXMgd2hlbiB0eFBhcmFtcy5yZWNpcGllbnRzIGlzIGFic2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG5cbiAgICAvLyBObyByZWNpcGllbnRzIGluIHR4UGFyYW1zIOKAlCBmYWxscyBiYWNrIHRvIGJ1aWxkUGFyYW1zIGZvciByZWNpcGllbnQgdmVyaWZpY2F0aW9uXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczoge30sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4LFxuICAgICAgICBidWlsZFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBSRUNJUElFTlQsIGFtb3VudDogQU1PVU5UIH1dIH0sXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBkZWNvZGVkIHJlY2lwaWVudCBkb2VzIG5vdCBtYXRjaCBidWlsZFBhcmFtcyByZWNpcGllbnQgKHR4UGFyYW1zIGFic2VudCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyVHhIZXgoe1xuICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiBXQUxMRVRfQ09OVFJBQ1QsXG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXgsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogV1JPTkdfUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3JlY2lwaWVudCBhZGRyZXNzIG1pc21hdGNoLyk7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdmVyaWZ5VHJhbnNhY3Rpb24g4oCTIGRpcmVjdCBjb25maWRlbnRpYWxUcmFuc2ZlciAoaG90L1RTUyBFT0Egd2FsbGV0KSB0ZXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQnVpbGRzIGEgcmF3IHR4IGhleCB3aGVyZSB0aGUgRU9BIGNhbGxzIGNvbmZpZGVudGlhbFRyYW5zZmVyIGRpcmVjdGx5IG9uIHRoZSB0b2tlblxuICogY29udHJhY3QgKG5vIHNlbmRNdWx0aVNpZyB3cmFwcGVyKS4gVGhpcyBpcyB0aGUgaG90L1RTUyB3YWxsZXQgcGF0aC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGREaXJlY3RDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KG9wdHM6IHtcbiAgdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgcmVjaXBpZW50QWRkcmVzczogc3RyaW5nO1xuICBlbmNyeXB0ZWRIYW5kbGU6IHN0cmluZztcbiAgaW5wdXRQcm9vZjogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTAwMDAwMDAwMCcsIGdhc0xpbWl0OiAnMjAwMDAwJyB9KTtcbiAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAvLyB0eC50byA9IHRva2VuIGNvbnRyYWN0IChFT0EgY2FsbHMgaXQgZGlyZWN0bHkpXG4gIHR4QnVpbGRlci5jb250cmFjdChvcHRzLnRva2VuQ29udHJhY3RBZGRyZXNzKTtcbiAgLy8gSW5uZXIgY2FsbGRhdGE6IGNvbmZpZGVudGlhbFRyYW5zZmVyKGFkZHJlc3MsIGJ5dGVzMzIsIGJ5dGVzKSDigJQgbm8gc2VuZE11bHRpU2lnIHdyYXBwZXJcbiAgY29uc3QgY2FsbGRhdGEgPSBuZXcgVHJhbnNmZXJCdWlsZGVyRVJDNzk4NCgpXG4gICAgLnRvKG9wdHMucmVjaXBpZW50QWRkcmVzcylcbiAgICAudG9rZW5Db250cmFjdEFkZHJlc3Mob3B0cy50b2tlbkNvbnRyYWN0QWRkcmVzcylcbiAgICAuZW5jcnlwdGVkSGFuZGxlKG9wdHMuZW5jcnlwdGVkSGFuZGxlKVxuICAgIC5pbnB1dFByb29mKG9wdHMuaW5wdXRQcm9vZilcbiAgICAuYnVpbGQoKTtcbiAgdHhCdWlsZGVyLmRhdGEoY2FsbGRhdGEpO1xuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIOKAkyBkaXJlY3QgY29uZmlkZW50aWFsVHJhbnNmZXIgKGhvdC9UU1MgRU9BIHdhbGxldCknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IFJFQ0lQSUVOVCA9ICcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnO1xuICBjb25zdCBIQU5ETEUgPSAnMHgnICsgJ2FiJy5yZXBlYXQoMzIpO1xuICBjb25zdCBQUk9PRiA9ICcweCcgKyAnY2QnLnJlcGVhdCg1MCk7XG4gIGNvbnN0IFdST05HX1JFQ0lQSUVOVCA9ICcweGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnO1xuICBjb25zdCBXUk9OR19UT0tFTiA9ICcweGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmInO1xuICBjb25zdCBBTU9VTlQgPSAnMTAwMDAwMCc7XG5cbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBjb2luOiBFcmM3OTg0VG9rZW47XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICByZWdpc3RlcihiaXRnbyk7XG4gICAgY29pbiA9IGJpdGdvLmNvaW4oJ2h0ZXRoOmN0ZXN0MScpIGFzIEVyYzc5ODRUb2tlbjtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBkaXJlY3QgY29uZmlkZW50aWFsVHJhbnNmZXIgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZERpcmVjdENvbmZpZGVudGlhbFRyYW5zZmVyVHhIZXgoe1xuICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IENURVNUMV9UT0tFTl9BRERSRVNTLFxuICAgICAgcmVjaXBpZW50QWRkcmVzczogUkVDSVBJRU5ULFxuICAgICAgZW5jcnlwdGVkSGFuZGxlOiBIQU5ETEUsXG4gICAgICBpbnB1dFByb29mOiBQUk9PRixcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXgsIGJ1aWxkUGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSB9IGFzIGFueSxcbiAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IHVzaW5nIGJ1aWxkUGFyYW1zLnJlY2lwaWVudHMgd2hlbiB0eFBhcmFtcyBoYXMgbm8gcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICB0eEhleCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgfSBhcyBhbnksXG4gICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICB9KTtcbiAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gdG9rZW4gY29udHJhY3QgYWRkcmVzcyAodHgudG8pIGRvZXMgbm90IG1hdGNoIHRoaXMgY29pbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogV1JPTkdfVE9LRU4sXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IFJFQ0lQSUVOVCwgYW1vdW50OiBBTU9VTlQgfV0gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3Rva2VuIGNvbnRyYWN0IGFkZHJlc3MgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHR4UGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGREaXJlY3RDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogV1JPTkdfUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0gYXMgYW55LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcmVjaXBpZW50IGFkZHJlc3MgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIG5vIHJlY2lwaWVudCBpbmZvIGlzIHByb3ZpZGVkIGluIGVpdGhlciB0eFBhcmFtcyBvciBidWlsZFBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uZmlkZW50aWFsVHJhbnNmZXJUeEhleCh7XG4gICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgICByZWNpcGllbnRBZGRyZXNzOiBSRUNJUElFTlQsXG4gICAgICBlbmNyeXB0ZWRIYW5kbGU6IEhBTkRMRSxcbiAgICAgIGlucHV0UHJvb2Y6IFBST09GLFxuICAgIH0pO1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7fSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21pc3NpbmcgZXhwZWN0ZWQgcmVjaXBpZW50Lyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0eFBhcmFtcyBhbW91bnQgZG9lcyBub3QgbWF0Y2ggYnVpbGRQYXJhbXMgYW1vdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGREaXJlY3RDb25maWRlbnRpYWxUcmFuc2ZlclR4SGV4KHtcbiAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBDVEVTVDFfVE9LRU5fQUREUkVTUyxcbiAgICAgIHJlY2lwaWVudEFkZHJlc3M6IFJFQ0lQSUVOVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogSEFORExFLFxuICAgICAgaW5wdXRQcm9vZjogUFJPT0YsXG4gICAgfSk7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6ICc5OTk5OTk5JyB9XSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXgsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogUkVDSVBJRU5ULCBhbW91bnQ6IEFNT1VOVCB9XSB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2Ftb3VudCBtaXNtYXRjaC8pO1xuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YSB0ZXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmRlc2NyaWJlKCdkZWNvZGVUb2tlbkFkZHJlc3Nlc0Zyb21EZWxlZ2F0aW9uQ2FsbGRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdzaG91bGQgZGVjb2RlIGEgc2luZ2xlLXRva2VuIG11bHRpY2FsbCBjYWxsZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtDVEVTVDFfVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgY29uc3QgYWRkcmVzc2VzID0gZGVjb2RlVG9rZW5BZGRyZXNzZXNGcm9tRGVsZWdhdGlvbkNhbGxkYXRhKGNhbGxkYXRhKTtcbiAgICBhZGRyZXNzZXMuc2hvdWxkLmRlZXBFcXVhbChbQ1RFU1QxX1RPS0VOX0FERFJFU1MudG9Mb3dlckNhc2UoKV0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlY29kZSBhIG11bHRpLXRva2VuIG11bHRpY2FsbCBjYWxsZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKFxuICAgICAgREVMRUdBVEVfQUREUkVTUyxcbiAgICAgIFtDVEVTVDFfVE9LRU5fQUREUkVTUywgQ1VTRFRfVE9LRU5fQUREUkVTU10sXG4gICAgICBFWFBJUllcbiAgICApO1xuICAgIGNvbnN0IGFkZHJlc3NlcyA9IGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YShjYWxsZGF0YSk7XG4gICAgYWRkcmVzc2VzLnNob3VsZC5kZWVwRXF1YWwoW0NURVNUMV9UT0tFTl9BRERSRVNTLnRvTG93ZXJDYXNlKCksIENVU0RUX1RPS0VOX0FERFJFU1MudG9Mb3dlckNhc2UoKV0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBhZGRyZXNzZXMgaW4gbG93ZXJjYXNlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1peGVkQ2FzZSA9ICcweDdCMUQ1OWJiQ0QyOTFkYUE1OWNCNkM4QzViYzA0RGUxQUZDNGFCQTEnO1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW21peGVkQ2FzZV0sIEVYUElSWSk7XG4gICAgY29uc3QgYWRkcmVzc2VzID0gZGVjb2RlVG9rZW5BZGRyZXNzZXNGcm9tRGVsZWdhdGlvbkNhbGxkYXRhKGNhbGxkYXRhKTtcbiAgICBhZGRyZXNzZXNbMF0uc2hvdWxkLmVxdWFsKG1peGVkQ2FzZS50b0xvd2VyQ2FzZSgpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYW5kbGUgY2FsbEZyb21QYXJlbnQtd3JhcHBlZCBtdWx0aWNhbGwgY2FsbGRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5uZXIgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShcbiAgICAgIERFTEVHQVRFX0FERFJFU1MsXG4gICAgICBbQ1RFU1QxX1RPS0VOX0FERFJFU1MsIENVU0RUX1RPS0VOX0FERFJFU1NdLFxuICAgICAgRVhQSVJZXG4gICAgKTtcbiAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoWkFNQV9BQ0xfQUREUkVTUywgaW5uZXIpO1xuICAgIGNvbnN0IGFkZHJlc3NlcyA9IGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YSh3cmFwcGVkKTtcbiAgICBhZGRyZXNzZXMuc2hvdWxkLmRlZXBFcXVhbChbQ1RFU1QxX1RPS0VOX0FERFJFU1MudG9Mb3dlckNhc2UoKSwgQ1VTRFRfVE9LRU5fQUREUkVTUy50b0xvd2VyQ2FzZSgpXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgd29yayB3aXRoIGNhbGxkYXRhIG1pc3NpbmcgMHggcHJlZml4JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW0NURVNUMV9UT0tFTl9BRERSRVNTXSwgRVhQSVJZKTtcbiAgICBjb25zdCBub1ByZWZpeCA9IGNhbGxkYXRhLnNsaWNlKDIpOyAvLyBzdHJpcCAweFxuICAgIGNvbnN0IGFkZHJlc3NlcyA9IGRlY29kZVRva2VuQWRkcmVzc2VzRnJvbURlbGVnYXRpb25DYWxsZGF0YShub1ByZWZpeCk7XG4gICAgYWRkcmVzc2VzLnNob3VsZC5kZWVwRXF1YWwoW0NURVNUMV9UT0tFTl9BRERSRVNTLnRvTG93ZXJDYXNlKCldKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgdW5yZWNvZ25pc2VkIGNhbGxkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAoKSA9PiBkZWNvZGVUb2tlbkFkZHJlc3Nlc0Zyb21EZWxlZ2F0aW9uQ2FsbGRhdGEoJzB4ZGVhZGJlZWYwMDAwMDAwMCcpLFxuICAgICAgL05vdCBhIHZhbGlkIGRlbGVnYXRpb24gY2FsbGRhdGEvXG4gICAgKTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB2ZXJpZnlUcmFuc2FjdGlvbiDigJMgY29uZmlkZW50aWFsIGNvbnNvbGlkYXRpb24gKEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IE1VTFRJU0lHX1dBTExFVF9DT05UUkFDVCA9ICcweDNiNTg2ODQ1MjU1NjRiMzhhMzgxZTQ2YTczMTcwM2VkMDNmMzIxMjInO1xuY29uc3QgQ09OU09MSURBVElPTl9GT1JXQVJERVIgPSAnMHhmNGJjYjM2NmJiNWUzNGViYmVlNTFmYWU1ZGU5OGNjODc2YzAxNDZmJztcbmNvbnN0IENPTlNPTElEQVRJT05fQkFTRV9BRERSRVNTID0gJzB4M2I1ODY4NDUyNTU2NGIzOGEzODFlNDZhNzMxNzAzZWQwM2YzMjEyMic7XG5jb25zdCBDT05TT0xJREFUSU9OX0hBTkRMRSA9ICcweDY1ZGYxMzZiNjA5YWIzOTVjMWE5OWFlNDZmNzkzOWM3ZjhiMjBkZmY0YmZmMDAwMDAwMDA4OGJiMDA1MCc7XG5jb25zdCBEVU1NWV9NVUxUSVNJR19TSUdOQVRVUkUgPSAnMHgnICsgJzAwJy5yZXBlYXQoNjUpO1xuXG5hc3luYyBmdW5jdGlvbiBidWlsZE11bHRpc2lnQ29uc29saWRhdGlvblR4SGV4KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZsdXNoQ2FsbGRhdGEgPSBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoXG4gICAgQ1RFU1QxX1RPS0VOX0FERFJFU1MsXG4gICAgQ09OU09MSURBVElPTl9CQVNFX0FERFJFU1MsXG4gICAgQ09OU09MSURBVElPTl9IQU5ETEVcbiAgKTtcbiAgY29uc3Qgc2VuZERhdGEgPSBzZW5kTXVsdGlTaWdEYXRhKFxuICAgIENPTlNPTElEQVRJT05fRk9SV0FSREVSLFxuICAgICcwJyxcbiAgICBmbHVzaENhbGxkYXRhLFxuICAgIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApICsgMzYwMCxcbiAgICAxNCxcbiAgICBEVU1NWV9NVUxUSVNJR19TSUdOQVRVUkVcbiAgKTtcblxuICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzEyMTAwMDAwJyB9KTtcbiAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICB0eEJ1aWxkZXIuY29udHJhY3QoTVVMVElTSUdfV0FMTEVUX0NPTlRSQUNUKTtcbiAgdHhCdWlsZGVyLmRhdGEoc2VuZERhdGEpO1xuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGREaXJlY3RDb25zb2xpZGF0aW9uVHhIZXgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcxMDAwMDAwMDAwJywgZ2FzTGltaXQ6ICcyMDAwMDAnIH0pO1xuICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgdHhCdWlsZGVyLmNvbnRyYWN0KENPTlNPTElEQVRJT05fRk9SV0FSREVSKTtcbiAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoQ09OU09MSURBVElPTl9GT1JXQVJERVIpO1xuICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoQ1RFU1QxX1RPS0VOX0FERFJFU1MpO1xuICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyk7XG4gIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoQ09OU09MSURBVElPTl9IQU5ETEUpO1xuICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbn1cblxuZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIOKAkyBjb25maWRlbnRpYWwgY29uc29saWRhdGlvbiAoRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGNvaW46IEVyYzc5ODRUb2tlbjtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIHJlZ2lzdGVyKGJpdGdvKTtcbiAgICBjb2luID0gYml0Z28uY29pbignaHRldGg6Y3Rlc3QxJykgYXMgRXJjNzk4NFRva2VuO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIG11bHRpc2lnIGNvbnNvbGlkYXRpb24gdHggKHNlbmRNdWx0aVNpZyDihpIgY2FsbEZyb21QYXJlbnQg4oaSIGNvbmZpZGVudGlhbFRyYW5zZmVyTm9Qcm9vZiknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZE11bHRpc2lnQ29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiBDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyB0eXBlOiAnY29uc29saWRhdGUnIH0gYXMgYW55LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNmE0NGViYzAzMjZlMWJlNDVjMWQ3OTc1NDJjOGM2MzQnLFxuICAgICAgICB0eEhleCxcbiAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogQ09OU09MSURBVElPTl9GT1JXQVJERVIsIGFtb3VudDogJzAnIH1dLFxuICAgICAgfSBhcyBhbnksXG4gICAgICB3YWxsZXQsXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBkaXJlY3QgY2FsbEZyb21QYXJlbnQgY29uc29saWRhdGlvbiB0eCAoVFNTIHNoYXBlKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiBDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyB0eXBlOiAnY29uc29saWRhdGUnIH0gYXMgYW55LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNmE0NGViYzAzMjZlMWJlNDVjMWQ3OTc1NDJjOGM2MzQnLFxuICAgICAgICB0eEhleCxcbiAgICAgIH0gYXMgYW55LFxuICAgICAgd2FsbGV0LFxuICAgICAgdmVyaWZpY2F0aW9uOiB7IGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlIH0sXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgbXVsdGlzaWcgY29uc29saWRhdGlvbiB3aGVuIHBhcmVudCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdhbGxldCBiYXNlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZE11bHRpc2lnQ29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiAnMHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyB9LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgdHlwZTogJ2NvbnNvbGlkYXRlJyB9IGFzIGFueSxcbiAgICAgICAgdHhQcmVidWlsZDogeyBjb25zb2xpZGF0ZUlkOiAnYWJjMTIzJywgdHhIZXggfSBhcyBhbnksXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH0pXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcGFyZW50IGFkZHJlc3MgbWlzbWF0Y2gvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgbXVsdGlzaWcgY29uc29saWRhdGlvbiB1c2luZyBmb3J3YXJkZXIgYWRkcmVzcyBmcm9tIHR4UHJlYnVpbGQudHhJbmZvLnJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZE11bHRpc2lnQ29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiBDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyB9LFxuICAgIH0pO1xuXG4gICAgLy8gTm8gdG9wLWxldmVsIHJlY2lwaWVudHM7IGZvcndhcmRlciBjb21lcyBmcm9tIHR4SW5mby5yZWNpcGllbnRzXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyB0eXBlOiAnY29uc29saWRhdGUnIH0gYXMgYW55LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNmE0NGViYzAzMjZlMWJlNDVjMWQ3OTc1NDJjOGM2MzQnLFxuICAgICAgICB0eEhleCxcbiAgICAgICAgdHhJbmZvOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IENPTlNPTElEQVRJT05fRk9SV0FSREVSLCBhbW91bnQ6ICcwJyB9XSB9LFxuICAgICAgfSBhcyBhbnksXG4gICAgICB3YWxsZXQsXG4gICAgfSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgbXVsdGlzaWcgY29uc29saWRhdGlvbiB3aGVuIHR4SW5mby5yZWNpcGllbnRzIGZvcndhcmRlciBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHR4IGZvcndhcmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkTXVsdGlzaWdDb25zb2xpZGF0aW9uVHhIZXgoKTtcbiAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBjb2luLCB7XG4gICAgICBjb2luU3BlY2lmaWM6IHsgYmFzZUFkZHJlc3M6IENPTlNPTElEQVRJT05fQkFTRV9BRERSRVNTIH0sXG4gICAgfSk7XG5cbiAgICBhd2FpdCBjb2luXG4gICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczogeyB0eXBlOiAnY29uc29saWRhdGUnIH0gYXMgYW55LFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgY29uc29saWRhdGVJZDogJ2FiYzEyMycsXG4gICAgICAgICAgdHhIZXgsXG4gICAgICAgICAgdHhJbmZvOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEnLCBhbW91bnQ6ICcwJyB9XSB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9mb3J3YXJkZXIgYWRkcmVzcyBtaXNtYXRjaC8pO1xuICB9KTtcblxuICAvLyBUU1MgTVBDdjIgc2lnbmluZyBwYXRoIOKAlCByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMgc2V0cyB0eXBlIGZyb20gaW50ZW50LmludGVudFR5cGUgKCdjb25zb2xpZGF0ZVRva2VuJyksXG4gIC8vIGFuZCB0eFByZWJ1aWxkIGhhcyBvbmx5IHR4SGV4IChubyBjb25zb2xpZGF0ZUlkLCBubyByZWNpcGllbnRzKS4gVGhpcyB3YXMgdGhlIGJyb2tlbiBwYXRoIGJlZm9yZVxuICAvLyBpc0NvbnNvbGlkYXRpb25UcmFuc2FjdGlvbiB3YXMgdXBkYXRlZCB0byByZWNvZ25pc2UgJ2NvbnNvbGlkYXRlVG9rZW4nLlxuICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIGRpcmVjdCBjYWxsRnJvbVBhcmVudCBjb25zb2xpZGF0aW9uIHR4IHdoZW4gdHlwZSBpcyBjb25zb2xpZGF0ZVRva2VuIChUU1MgTVBDdjIgc2lnbmluZyBwYXRoKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiBDT05TT0xJREFUSU9OX0JBU0VfQUREUkVTUyB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczoge1xuICAgICAgICB0eXBlOiAnY29uc29saWRhdGVUb2tlbicsXG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IENPTlNPTElEQVRJT05fRk9SV0FSREVSLCBhbW91bnQ6ICcwJyB9XSxcbiAgICAgIH0gYXMgYW55LFxuICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgIHdhbGxldCxcbiAgICB9KTtcbiAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCBjYWxsRnJvbVBhcmVudCBjb25zb2xpZGF0aW9uIHdpdGggdHlwZSBjb25zb2xpZGF0ZVRva2VuIHdoZW4gcGFyZW50IGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggd2FsbGV0IGJhc2UgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkRGlyZWN0Q29uc29saWRhdGlvblR4SGV4KCk7XG4gICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgY29pbiwge1xuICAgICAgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiAnMHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyB9LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY29pblxuICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB0eXBlOiAnY29uc29saWRhdGVUb2tlbicsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogQ09OU09MSURBVElPTl9GT1JXQVJERVIsIGFtb3VudDogJzAnIH1dLFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9wYXJlbnQgYWRkcmVzcyBtaXNtYXRjaC8pO1xuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHJlY292ZXIoKSDigJMgRVJDLTc5ODQgY29uZmlkZW50aWFsIHRva2VuIHJlY292ZXJ5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZGVzY3JpYmUoJ0VyYzc5ODRUb2tlbiDigJMgcmVjb3ZlcigpJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGNvaW46IEVyYzc5ODRUb2tlbjtcbiAgbGV0IGV4cGxvcmVyU3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGNvbnN0IFdBTExFVF9DT05UUkFDVCA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICBjb25zdCBSRUNPVkVSWV9ERVNUID0gJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0Yyc7XG4gIGNvbnN0IEhBTkRMRSA9ICcweCcgKyAnYWInLnJlcGVhdCgzMik7XG4gIGNvbnN0IFpFUk9fSEFORExFID0gJzB4JyArICcwMCcucmVwZWF0KDMyKTtcblxuICBjb25zdCBVU0VSX0tFWSA9IHRlc3REYXRhLlBSSVZBVEVfS0VZO1xuICBjb25zdCBCQUNLVVBfS0VZID0gdGVzdERhdGEuUFJJVkFURV9LRVk7XG4gIGNvbnN0IFdBTExFVF9QQVNTUEhSQVNFID0gJ3Rlc3Qgd2FsbGV0IHBhc3NwaHJhc2UnO1xuXG4gIC8vIEVuY3J5cHRlZCBrZXlzIGZvciB0ZXN0IChlbmNyeXB0IHdpdGggdGhlIHRlc3QgcGFzc3BocmFzZSlcbiAgbGV0IGVuY3J5cHRlZFVzZXJLZXk6IHN0cmluZztcbiAgbGV0IGVuY3J5cHRlZEJhY2t1cEtleTogc3RyaW5nO1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgcmVnaXN0ZXIoYml0Z28pO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCdodGV0aDpjdGVzdDEnKSBhcyBFcmM3OTg0VG9rZW47XG5cbiAgICBlbmNyeXB0ZWRVc2VyS2V5ID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiBVU0VSX0tFWSwgcGFzc3dvcmQ6IFdBTExFVF9QQVNTUEhSQVNFIH0pO1xuICAgIGVuY3J5cHRlZEJhY2t1cEtleSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogQkFDS1VQX0tFWSwgcGFzc3dvcmQ6IFdBTExFVF9QQVNTUEhSQVNFIH0pO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBleHBsb3JlclN0dWIgPSBzaW5vbi5zdHViKGNvaW4sICdyZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5JyBhcyBhbnkpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gbW9ja0V4cGxvcmVyRm9yUmVjb3ZlcnkoaGFuZGxlOiBzdHJpbmcgPSBIQU5ETEUpIHtcbiAgICBleHBsb3JlclN0dWIuY2FsbHNGYWtlKGFzeW5jIChxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4ge1xuICAgICAgaWYgKHF1ZXJ5LmFjdGlvbiA9PT0gJ3R4bGlzdCcpIHtcbiAgICAgICAgLy8gZ2V0QWRkcmVzc05vbmNlOiByZXR1cm4gZW1wdHkgdHggbGlzdCAobm9uY2UgPSAwKVxuICAgICAgICByZXR1cm4geyByZXN1bHQ6IFtdIH07XG4gICAgICB9XG4gICAgICBpZiAocXVlcnkuYWN0aW9uID09PSAnYmFsYW5jZScpIHtcbiAgICAgICAgLy8gcXVlcnlBZGRyZXNzQmFsYW5jZTogcmV0dXJuIGVub3VnaCBFVEggZm9yIGdhc1xuICAgICAgICByZXR1cm4geyByZXN1bHQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAnIH07IC8vIDAuMSBFVEhcbiAgICAgIH1cbiAgICAgIGlmIChxdWVyeS5hY3Rpb24gPT09ICdldGhfY2FsbCcgJiYgcXVlcnkuZGF0YT8uc3RhcnRzV2l0aCgnYTBiNzk2N2InKSkge1xuICAgICAgICAvLyBxdWVyeVNlcXVlbmNlSWQ6IGdldE5leHRTZXF1ZW5jZUlkXG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNScgfTtcbiAgICAgIH1cbiAgICAgIGlmIChxdWVyeS5hY3Rpb24gPT09ICdldGhfY2FsbCcgJiYgcXVlcnkudG8gPT09IENURVNUMV9UT0tFTl9BRERSRVNTKSB7XG4gICAgICAgIC8vIHF1ZXJ5Q29uZmlkZW50aWFsQmFsYW5jZVxuICAgICAgICByZXR1cm4geyByZXN1bHQ6IGhhbmRsZSB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGV4cGxvcmVyIHF1ZXJ5OiAke0pTT04uc3RyaW5naWZ5KHF1ZXJ5KX1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSBmdWxsIGJhbGFuY2Ugc3dlZXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0V4cGxvcmVyRm9yUmVjb3ZlcnkoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4ucmVjb3Zlcih7XG4gICAgICB1c2VyS2V5OiBlbmNyeXB0ZWRVc2VyS2V5LFxuICAgICAgYmFja3VwS2V5OiBlbmNyeXB0ZWRCYWNrdXBLZXksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBXQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogUkVDT1ZFUllfREVTVCxcbiAgICB9KTtcblxuICAgIHNob3VsZC5leGlzdChyZXN1bHQpO1xuICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnKTtcbiAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4Jyk7XG4gICAgKHJlc3VsdCBhcyBhbnkpLnR4LnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIChyZXN1bHQgYXMgYW55KS50eC5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSB1c2VyLXByb3ZpZGVkIGVuY3J5cHRlZEhhbmRsZSBhbmQgc2tpcCBhdXRvLXF1ZXJ5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHVzZXJIYW5kbGUgPSAnMHgnICsgJ2ZmJy5yZXBlYXQoMzIpO1xuXG4gICAgZXhwbG9yZXJTdHViLmNhbGxzRmFrZShhc3luYyAocXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IHtcbiAgICAgIGlmIChxdWVyeS5hY3Rpb24gPT09ICd0eGxpc3QnKSB7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogW10gfTtcbiAgICAgIH1cbiAgICAgIGlmIChxdWVyeS5hY3Rpb24gPT09ICdiYWxhbmNlJykge1xuICAgICAgICByZXR1cm4geyByZXN1bHQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAnIH07XG4gICAgICB9XG4gICAgICBpZiAocXVlcnkuYWN0aW9uID09PSAnZXRoX2NhbGwnICYmIHF1ZXJ5LmRhdGE/LnN0YXJ0c1dpdGgoJ2EwYjc5NjdiJykpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1JyB9O1xuICAgICAgfVxuICAgICAgaWYgKHF1ZXJ5LmFjdGlvbiA9PT0gJ2V0aF9jYWxsJyAmJiBxdWVyeS50byA9PT0gQ1RFU1QxX1RPS0VOX0FERFJFU1MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgbm90IHF1ZXJ5IGNvbmZpZGVudGlhbEJhbGFuY2VPZiB3aGVuIGhhbmRsZSBpcyBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGV4cGxvcmVyIHF1ZXJ5OiAke0pTT04uc3RyaW5naWZ5KHF1ZXJ5KX1gKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4ucmVjb3Zlcih7XG4gICAgICB1c2VyS2V5OiBlbmNyeXB0ZWRVc2VyS2V5LFxuICAgICAgYmFja3VwS2V5OiBlbmNyeXB0ZWRCYWNrdXBLZXksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBXQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogUkVDT1ZFUllfREVTVCxcbiAgICAgIGVuY3J5cHRlZEhhbmRsZTogdXNlckhhbmRsZSxcbiAgICB9KTtcblxuICAgIHNob3VsZC5leGlzdChyZXN1bHQpO1xuICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHgnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdGlsbCBidWlsZCBhIHJlY292ZXJ5IHR4IGV2ZW4gd2l0aCBhIHplcm8tdmFsdWUgaGFuZGxlIChlbmNyeXB0ZWQgaGFuZGxlcyBhcmUgYWx3YXlzIG5vbi16ZXJvKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrRXhwbG9yZXJGb3JSZWNvdmVyeShaRVJPX0hBTkRMRSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnJlY292ZXIoe1xuICAgICAgdXNlcktleTogZW5jcnlwdGVkVXNlcktleSxcbiAgICAgIGJhY2t1cEtleTogZW5jcnlwdGVkQmFja3VwS2V5LFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFJFQ09WRVJZX0RFU1QsXG4gICAgfSk7XG5cbiAgICBzaG91bGQuZXhpc3QocmVzdWx0KTtcbiAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHVuc2lnbmVkIHN3ZWVwIGZvcm1hdCB3aGVuIGlzVW5zaWduZWRTd2VlcCBpcyB0cnVlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tFeHBsb3JlckZvclJlY292ZXJ5KCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnJlY292ZXIoe1xuICAgICAgdXNlcktleTogdGVzdERhdGEuUFVCTElDX0tFWSxcbiAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuUFVCTElDX0tFWSxcbiAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogUkVDT1ZFUllfREVTVCxcbiAgICAgIGlzVW5zaWduZWRTd2VlcDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHNob3VsZC5leGlzdChyZXN1bHQpO1xuICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHgnKTtcbiAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJLZXknKTtcbiAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2JhY2t1cEtleScpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBLUlMgcmVjb3ZlcnkgZm9ybWF0IHdpdGggYmFja3VwS2V5IGFuZCBjb2luJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGV4cGxvcmVyU3R1Yi5jYWxsc0Zha2UoYXN5bmMgKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiB7XG4gICAgICBpZiAocXVlcnkuYWN0aW9uID09PSAndHhsaXN0Jykge1xuICAgICAgICByZXR1cm4geyByZXN1bHQ6IFtdIH07XG4gICAgICB9XG4gICAgICBpZiAocXVlcnkuYWN0aW9uID09PSAnYmFsYW5jZScpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0OiAnMTAwMDAwMDAwMDAwMDAwMDAwJyB9O1xuICAgICAgfVxuICAgICAgaWYgKHF1ZXJ5LmFjdGlvbiA9PT0gJ2V0aF9jYWxsJyAmJiBxdWVyeS5kYXRhPy5zdGFydHNXaXRoKCdhMGI3OTY3YicpKSB7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNScgfTtcbiAgICAgIH1cbiAgICAgIGlmIChxdWVyeS5hY3Rpb24gPT09ICdldGhfY2FsbCcgJiYgcXVlcnkudG8gPT09IENURVNUMV9UT0tFTl9BRERSRVNTKSB7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogSEFORExFIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZXhwbG9yZXIgcXVlcnk6ICR7SlNPTi5zdHJpbmdpZnkocXVlcnkpfWApO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IGNvaW4ucmVjb3Zlcih7XG4gICAgICB1c2VyS2V5OiBlbmNyeXB0ZWRVc2VyS2V5LFxuICAgICAgYmFja3VwS2V5OiB0ZXN0RGF0YS5QVUJMSUNfS0VZLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFJFQ09WRVJZX0RFU1QsXG4gICAgICBrcnNQcm92aWRlcjogJ2tleXRlcm5hbCcsXG4gICAgfSkpIGFzIGFueTtcblxuICAgIHNob3VsZC5leGlzdChyZXN1bHQpO1xuICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHgnKTtcbiAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2JhY2t1cEtleScsIHRlc3REYXRhLlBVQkxJQ19LRVkpO1xuICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29pbicsICdodGV0aDpjdGVzdDEnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGJhY2t1cCBrZXkgaGFzIGluc3VmZmljaWVudCBnYXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZXhwbG9yZXJTdHViLmNhbGxzRmFrZShhc3luYyAocXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IHtcbiAgICAgIGlmIChxdWVyeS5hY3Rpb24gPT09ICd0eGxpc3QnKSB7XG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogW10gfTtcbiAgICAgIH1cbiAgICAgIGlmIChxdWVyeS5hY3Rpb24gPT09ICdiYWxhbmNlJykge1xuICAgICAgICAvLyBWZXJ5IGxvdyBiYWxhbmNlLCBub3QgZW5vdWdoIGZvciAxMk0gZ2FzXG4gICAgICAgIHJldHVybiB7IHJlc3VsdDogJzEwMCcgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBleHBsb3JlciBxdWVyeTogJHtKU09OLnN0cmluZ2lmeShxdWVyeSl9YCk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjb2luXG4gICAgICAucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IGVuY3J5cHRlZFVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogZW5jcnlwdGVkQmFja3VwS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBXQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzOiBXQUxMRVRfQ09OVFJBQ1QsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFJFQ09WRVJZX0RFU1QsXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2hhcyBiYWxhbmNlLipHd2VpLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB1c2VyS2V5IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgY29pblxuICAgICAgLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiB1bmRlZmluZWQgYXMgYW55LFxuICAgICAgICBiYWNrdXBLZXk6IGVuY3J5cHRlZEJhY2t1cEtleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogV0FMTEVUX0NPTlRSQUNULFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBSRUNPVkVSWV9ERVNULFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIHVzZXJLZXkvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHdhbGxldENvbnRyYWN0QWRkcmVzcyBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNvaW5cbiAgICAgIC5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogZW5jcnlwdGVkVXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBlbmNyeXB0ZWRCYWNrdXBLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFdBTExFVF9QQVNTUEhSQVNFLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICdub3QtYW4tYWRkcmVzcycsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFJFQ09WRVJZX0RFU1QsXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2ludmFsaWQgd2FsbGV0Q29udHJhY3RBZGRyZXNzLyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcHJvZHVjZSB0eCB3aXRoIGlubmVyIGNhbGxkYXRhIG1hdGNoaW5nIGNvbmZpZGVudGlhbFRyYW5zZmVyIHNlbGVjdG9yIDB4NWJlYmVkN2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0V4cGxvcmVyRm9yUmVjb3ZlcnkoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBjb2luLnJlY292ZXIoe1xuICAgICAgdXNlcktleTogZW5jcnlwdGVkVXNlcktleSxcbiAgICAgIGJhY2t1cEtleTogZW5jcnlwdGVkQmFja3VwS2V5LFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6IFdBTExFVF9DT05UUkFDVCxcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFJFQ09WRVJZX0RFU1QsXG4gICAgfSkpIGFzIGFueTtcblxuICAgIHNob3VsZC5leGlzdChyZXN1bHQudHgpO1xuICAgIC8vIFRoZSBzZXJpYWxpemVkIHR4IGNvbnRhaW5zIHRoZSBzZW5kTXVsdGlTaWcgY2FsbGRhdGEgd2hpY2ggd3JhcHMgY29uZmlkZW50aWFsVHJhbnNmZXIuXG4gICAgLy8gVGhlIGNvbmZpZGVudGlhbFRyYW5zZmVyIHNlbGVjdG9yICg1YmViZWQ3ZSkgbXVzdCBhcHBlYXIgc29tZXdoZXJlIGluIHRoZSBzZXJpYWxpemVkIHR4LlxuICAgIGNvbnN0IHNlbGVjdG9yTm9QcmVmaXggPSBjb25maWRlbnRpYWxUcmFuc2Zlck5vUHJvb2ZNZXRob2RJZC5zbGljZSgyKTtcbiAgICByZXN1bHQudHguc2hvdWxkLmNvbnRhaW5FcWwoc2VsZWN0b3JOb1ByZWZpeCk7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcXVlcnlDb25maWRlbnRpYWxCYWxhbmNlKCkgdGVzdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5kZXNjcmliZSgnRXJjNzk4NFRva2VuIOKAkyBxdWVyeUNvbmZpZGVudGlhbEJhbGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBjb2luOiBFcmM3OTg0VG9rZW47XG4gIGxldCBleHBsb3JlclN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcblxuICBjb25zdCBXQUxMRVRfQUREUkVTUyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICBjb25zdCBIQU5ETEUgPSAnMHgnICsgJ2FiJy5yZXBlYXQoMzIpO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgcmVnaXN0ZXIoYml0Z28pO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCdodGV0aDpjdGVzdDEnKSBhcyBFcmM3OTg0VG9rZW47XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGV4cGxvcmVyU3R1YiA9IHNpbm9uLnN0dWIoY29pbiwgJ3JlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnknIGFzIGFueSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBhIHZhbGlkIGJ5dGVzMzIgaGFuZGxlIGZyb20gZXRoX2NhbGwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZXhwbG9yZXJTdHViLnJlc29sdmVzKHsgcmVzdWx0OiBIQU5ETEUgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnF1ZXJ5Q29uZmlkZW50aWFsQmFsYW5jZShXQUxMRVRfQUREUkVTUyk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbChIQU5ETEUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZlcmlmeSB0aGUgZXRoX2NhbGwgaXMgbWFkZSB0byB0aGUgY29ycmVjdCB0b2tlbiBjb250cmFjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBleHBsb3JlclN0dWIucmVzb2x2ZXMoeyByZXN1bHQ6IEhBTkRMRSB9KTtcblxuICAgIGF3YWl0IGNvaW4ucXVlcnlDb25maWRlbnRpYWxCYWxhbmNlKFdBTExFVF9BRERSRVNTKTtcblxuICAgIGV4cGxvcmVyU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgY29uc3QgY2FsbEFyZ3MgPSBleHBsb3JlclN0dWIuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgY2FsbEFyZ3Muc2hvdWxkLmhhdmUucHJvcGVydHkoJ2FjdGlvbicsICdldGhfY2FsbCcpO1xuICAgIGNhbGxBcmdzLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0bycsIENURVNUMV9UT0tFTl9BRERSRVNTKTtcbiAgICBjYWxsQXJncy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbW9kdWxlJywgJ3Byb3h5Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBleHBsb3JlciByZXR1cm5zIG5vIHJlc3VsdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBleHBsb3JlclN0dWIucmVzb2x2ZXMoeyByZXN1bHQ6IG51bGwgfSk7XG5cbiAgICBhd2FpdCBjb2luLnF1ZXJ5Q29uZmlkZW50aWFsQmFsYW5jZShXQUxMRVRfQUREUkVTUykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvQ291bGQgbm90IG9idGFpbiBjb25maWRlbnRpYWwgYmFsYW5jZS8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcmVzcG9uc2UgZm9ybWF0IGlzIHVuZXhwZWN0ZWQgKG5vdCA2NiBjaGFycyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZXhwbG9yZXJTdHViLnJlc29sdmVzKHsgcmVzdWx0OiAnMHhhYmNkJyB9KTtcblxuICAgIGF3YWl0IGNvaW5cbiAgICAgIC5xdWVyeUNvbmZpZGVudGlhbEJhbGFuY2UoV0FMTEVUX0FERFJFU1MpXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvVW5leHBlY3RlZCBjb25maWRlbnRpYWxCYWxhbmNlT2YgcmVzcG9uc2UgZm9ybWF0Lyk7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gc2V0R2FzTGltaXQoKSBvdmVycmlkZSB0ZXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmRlc2NyaWJlKCdFcmM3OTg0VG9rZW4g4oCTIHNldEdhc0xpbWl0KCknLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgY29pbjogRXJjNzk4NFRva2VuO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgcmVnaXN0ZXIoYml0Z28pO1xuICAgIGNvaW4gPSBiaXRnby5jb2luKCdodGV0aDpjdGVzdDEnKSBhcyBFcmM3OTg0VG9rZW47XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIDgwMDAwMCBhcyBkZWZhdWx0IGdhcyBsaW1pdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBnYXNMaW1pdCA9IGNvaW4uc2V0R2FzTGltaXQoKTtcbiAgICBnYXNMaW1pdC5zaG91bGQuZXF1YWwoODAwMDAwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhY2NlcHQgdXNlci1wcm92aWRlZCBnYXMgbGltaXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZ2FzTGltaXQgPSBjb2luLnNldEdhc0xpbWl0KDEwMDAwMDApO1xuICAgIGdhc0xpbWl0LnNob3VsZC5lcXVhbCgxMDAwMDAwKTtcbiAgfSk7XG59KTtcbiJdfQ==