@bitgo-beta/sdk-api 1.10.1-beta.2084 → 1.10.1-beta.2086

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.
@@ -995,7 +995,7 @@ describe('Constructor', function () {
995
995
  sinon.assert.calledWithMatch(v1UpdatePasswordStub, { encryptionVersion: 2 });
996
996
  sinon.assert.calledWithMatch(v2UpdatePasswordStub, { encryptionVersion: 2 });
997
997
  });
998
- it('shares one encryption session across keychain password updates', async function () {
998
+ it('creates one encryption session, passes it to both keychain update calls, and destroys it', async function () {
999
999
  (0, nock_1.default)(ROOT).get('/api/v2/user/checkBatchingPasswordFlow').query(true).reply(200, { isBatchingFlowEnabled: false });
1000
1000
  (0, nock_1.default)(ROOT)
1001
1001
  .post('/api/v1/user/changepassword', (body) => {
@@ -1015,6 +1015,14 @@ describe('Constructor', function () {
1015
1015
  await bitgo.changePassword({ oldPassword: 'oldpw', newPassword: 'newpw', encryptionVersion: 2 });
1016
1016
  sinon.assert.calledOnce(createSession);
1017
1017
  sinon.assert.calledWithExactly(createSession, 'newpw', 2);
1018
+ // Call-site truth: the params object reaches both updatePassword calls, but the
1019
+ // deprecated v1-leg (src/v1/keychains.ts) ignores encryptionSession/encryptionVersion
1020
+ // and preserves each envelope's version -- see test/unit/v1/keychains.ts. Only the
1021
+ // coin-leg consumes the session.
1022
+ sinon.assert.calledWithMatch(v1UpdatePasswordStub, {
1023
+ oldPassword: 'oldpw',
1024
+ newPassword: 'newpw',
1025
+ });
1018
1026
  sinon.assert.calledWithMatch(v1UpdatePasswordStub, {
1019
1027
  encryptionVersion: 2,
1020
1028
  encryptionSession: session,
@@ -1025,6 +1033,224 @@ describe('Constructor', function () {
1025
1033
  });
1026
1034
  sinon.assert.calledOnce(destroy);
1027
1035
  });
1036
+ it('emits keychains/started, monotonic keychains/updated events, then finalizing/started and finalizing/completed', async function () {
1037
+ (0, nock_1.default)(ROOT).get('/api/v2/user/checkBatchingPasswordFlow').query(true).reply(200, { isBatchingFlowEnabled: false });
1038
+ (0, nock_1.default)(ROOT)
1039
+ .post('/api/v1/user/changepassword', (body) => !!body.keychains && !!body.v2_keychains)
1040
+ .reply(200, {});
1041
+ v1UpdatePasswordStub.callsFake(async (params) => {
1042
+ params.progressCallback?.({ status: 'updated', currentKeychainId: 'xpub1' });
1043
+ params.progressCallback?.({ status: 'skipped', currentKeychainId: 'xpub2' });
1044
+ // one map entry per emitted event, since the map's size now feeds the v2 total
1045
+ return { keychains: { k1: 'v1enc', k2: 'v1enc2' }, version: 25 };
1046
+ });
1047
+ v2UpdatePasswordStub.callsFake(async (params) => {
1048
+ params.progressCallback?.({ status: 'updated', currentKeychainId: 'xpub3' });
1049
+ return { v2k1: 'v2enc' };
1050
+ });
1051
+ const events = [];
1052
+ await bitgo.changePassword({
1053
+ oldPassword: 'oldpw',
1054
+ newPassword: 'newpw',
1055
+ progressCallback: (progress) => events.push(progress),
1056
+ });
1057
+ events.should.deepEqual([
1058
+ { phase: 'keychains', status: 'started', completed: 0, attempted: 0, succeeded: 0, skipped: 0 },
1059
+ {
1060
+ phase: 'keychains',
1061
+ status: 'updated',
1062
+ completed: 1,
1063
+ attempted: 1,
1064
+ succeeded: 1,
1065
+ skipped: 0,
1066
+ total: undefined,
1067
+ currentKeychainId: 'xpub1',
1068
+ keychainVersion: 'v1',
1069
+ },
1070
+ {
1071
+ phase: 'keychains',
1072
+ status: 'updated',
1073
+ completed: 2,
1074
+ attempted: 2,
1075
+ succeeded: 1,
1076
+ skipped: 1,
1077
+ total: undefined,
1078
+ currentKeychainId: 'xpub2',
1079
+ keychainVersion: 'v1',
1080
+ },
1081
+ {
1082
+ phase: 'keychains',
1083
+ status: 'updated',
1084
+ completed: 3,
1085
+ attempted: 3,
1086
+ succeeded: 2,
1087
+ skipped: 1,
1088
+ total: undefined,
1089
+ currentKeychainId: 'xpub3',
1090
+ keychainVersion: 'v2',
1091
+ },
1092
+ { phase: 'finalizing', status: 'started' },
1093
+ { phase: 'finalizing', status: 'completed' },
1094
+ ]);
1095
+ });
1096
+ it('forwards a truthful total from the v2 lower-level callback into every keychains/updated event', async function () {
1097
+ (0, nock_1.default)(ROOT).get('/api/v2/user/checkBatchingPasswordFlow').query(true).reply(200, { isBatchingFlowEnabled: false });
1098
+ (0, nock_1.default)(ROOT)
1099
+ .post('/api/v1/user/changepassword', (body) => !!body.keychains && !!body.v2_keychains)
1100
+ .reply(200, {});
1101
+ v2UpdatePasswordStub.callsFake(async (params) => {
1102
+ params.progressCallback?.({ status: 'updated', currentKeychainId: 'xpub1', total: 2 });
1103
+ params.progressCallback?.({ status: 'updated', currentKeychainId: 'xpub2', total: 2 });
1104
+ return { v2k1: 'v2enc', v2k2: 'v2enc2' };
1105
+ });
1106
+ const events = [];
1107
+ await bitgo.changePassword({
1108
+ oldPassword: 'oldpw',
1109
+ newPassword: 'newpw',
1110
+ progressCallback: (progress) => events.push(progress),
1111
+ });
1112
+ const v2Events = events.filter((e) => e.phase === 'keychains' && e.status === 'updated' && e.keychainVersion === 'v2');
1113
+ // the v1 stub keeps its default 1-entry map, so v2 events forward 1 (v1) + 2 (v2) = 3
1114
+ v2Events.every((e) => e.total === 3).should.be.true();
1115
+ });
1116
+ it('covers both keychain sets in the total so mixed v1/v2 accounts complete exactly (2 v1 + 32 v2 = 34 of 34)', async function () {
1117
+ (0, nock_1.default)(ROOT).get('/api/v2/user/checkBatchingPasswordFlow').query(true).reply(200, { isBatchingFlowEnabled: false });
1118
+ (0, nock_1.default)(ROOT)
1119
+ .post('/api/v1/user/changepassword', (body) => !!body.keychains && !!body.v2_keychains)
1120
+ .reply(200, {});
1121
+ v1UpdatePasswordStub.callsFake(async (params) => {
1122
+ params.progressCallback?.({ status: 'updated', currentKeychainId: 'xpub1' });
1123
+ params.progressCallback?.({ status: 'updated', currentKeychainId: 'xpub2' });
1124
+ return { keychains: { k1: 'v1enc', k2: 'v1enc2' }, version: 25 };
1125
+ });
1126
+ v2UpdatePasswordStub.callsFake(async (params) => {
1127
+ for (let i = 1; i <= 32; i++) {
1128
+ params.progressCallback?.({ status: 'updated', currentKeychainId: `v2key-${i}`, total: 32 });
1129
+ }
1130
+ return { v2k1: 'v2enc' };
1131
+ });
1132
+ const events = [];
1133
+ await bitgo.changePassword({
1134
+ oldPassword: 'oldpw',
1135
+ newPassword: 'newpw',
1136
+ progressCallback: (progress) => events.push(progress),
1137
+ });
1138
+ const keychainEvents = events.filter((e) => e.phase === 'keychains' && e.status === 'updated');
1139
+ const v1Events = keychainEvents.filter((e) => e.keychainVersion === 'v1');
1140
+ const v2Events = keychainEvents.filter((e) => e.keychainVersion === 'v2');
1141
+ // v1 events stay indeterminate: the v1 set has no server-provided count
1142
+ v1Events.should.have.length(2);
1143
+ v1Events.every((e) => e.total === undefined).should.be.true();
1144
+ // v2 events carry the combined denominator: 2 (v1 set) + 32 (totalCount)
1145
+ v2Events.should.have.length(32);
1146
+ v2Events.every((e) => e.total === 34).should.be.true();
1147
+ // the counter completes exactly instead of overshooting the total
1148
+ const last = v2Events[v2Events.length - 1];
1149
+ last.completed.should.equal(34);
1150
+ last.total.should.equal(34);
1151
+ });
1152
+ it('emits a terminal total for v1-only accounts so the counter can render n of n', async function () {
1153
+ (0, nock_1.default)(ROOT).get('/api/v2/user/checkBatchingPasswordFlow').query(true).reply(200, { isBatchingFlowEnabled: false });
1154
+ (0, nock_1.default)(ROOT)
1155
+ .post('/api/v1/user/changepassword', (body) => !!body.keychains && !!body.v2_keychains)
1156
+ .reply(200, {});
1157
+ v1UpdatePasswordStub.callsFake(async (params) => {
1158
+ params.progressCallback?.({ status: 'updated', currentKeychainId: 'xpub1' });
1159
+ params.progressCallback?.({ status: 'updated', currentKeychainId: 'xpub2' });
1160
+ return { keychains: { k1: 'v1enc', k2: 'v1enc2' }, version: 25 };
1161
+ });
1162
+ // a v1-only account: the v2 walk finds nothing and emits nothing
1163
+ v2UpdatePasswordStub.callsFake(async () => ({}));
1164
+ const events = [];
1165
+ await bitgo.changePassword({
1166
+ oldPassword: 'oldpw',
1167
+ newPassword: 'newpw',
1168
+ progressCallback: (progress) => events.push(progress),
1169
+ });
1170
+ const keychainEvents = events.filter((e) => e.phase === 'keychains' && e.status === 'updated');
1171
+ const v1Events = keychainEvents.filter((e) => e.keychainVersion === 'v1');
1172
+ v1Events.should.have.length(2);
1173
+ v1Events.every((e) => e.total === undefined).should.be.true();
1174
+ // no v2 event ever arrived, so the terminal keychains/updated event carries the
1175
+ // client-known v1 set size as the denominator: 2 of 2, immediately before finalizing
1176
+ const last = keychainEvents[keychainEvents.length - 1];
1177
+ last.completed.should.equal(2);
1178
+ last.total.should.equal(2);
1179
+ events[events.length - 2].should.deepEqual({ phase: 'finalizing', status: 'started' });
1180
+ });
1181
+ it('does not let a throwing progressCallback abort the rotation', async function () {
1182
+ (0, nock_1.default)(ROOT).get('/api/v2/user/checkBatchingPasswordFlow').query(true).reply(200, { isBatchingFlowEnabled: false });
1183
+ const changePassScope = (0, nock_1.default)(ROOT)
1184
+ .post('/api/v1/user/changepassword', (body) => !!body.keychains && !!body.v2_keychains)
1185
+ .reply(200, {});
1186
+ await bitgo.changePassword({
1187
+ oldPassword: 'oldpw',
1188
+ newPassword: 'newpw',
1189
+ progressCallback: () => {
1190
+ throw new Error('observer boom');
1191
+ },
1192
+ });
1193
+ changePassScope.isDone().should.be.true();
1194
+ });
1195
+ it('emits no finalizing/completed and no legacy fallback when the batching-path final POST fails', async function () {
1196
+ (0, nock_1.default)(ROOT)
1197
+ .get('/api/v2/user/checkBatchingPasswordFlow')
1198
+ .query(true)
1199
+ .reply(200, { isBatchingFlowEnabled: true, maxBatchSizeKB: 900 });
1200
+ (0, nock_1.default)(ROOT).put('/api/v2/user/keychains').reply(200, {});
1201
+ const changePassScope = (0, nock_1.default)(ROOT).post('/api/v1/user/changepassword').reply(500, { error: 'boom' });
1202
+ const events = [];
1203
+ await bitgo
1204
+ .changePassword({
1205
+ oldPassword: 'oldpw',
1206
+ newPassword: 'newpw',
1207
+ progressCallback: (progress) => events.push(progress),
1208
+ })
1209
+ .should.be.rejected();
1210
+ changePassScope.isDone().should.be.true();
1211
+ events.some((e) => e.phase === 'finalizing' && e.status === 'completed').should.be.false();
1212
+ });
1213
+ it('completes exactly once via legacy fallback when the batching check fails', async function () {
1214
+ (0, nock_1.default)(ROOT).get('/api/v2/user/checkBatchingPasswordFlow').query(true).reply(503, { error: 'service unavailable' });
1215
+ (0, nock_1.default)(ROOT)
1216
+ .post('/api/v1/user/changepassword', (body) => !!body.keychains && !!body.v2_keychains)
1217
+ .reply(200, {});
1218
+ const events = [];
1219
+ await bitgo.changePassword({
1220
+ oldPassword: 'oldpw',
1221
+ newPassword: 'newpw',
1222
+ progressCallback: (progress) => events.push(progress),
1223
+ });
1224
+ events.filter((e) => e.phase === 'finalizing' && e.status === 'completed').should.have.length(1);
1225
+ });
1226
+ it('does not add keychain events or double-count when a transport batch is retried', async function () {
1227
+ (0, nock_1.default)(ROOT)
1228
+ .get('/api/v2/user/checkBatchingPasswordFlow')
1229
+ .query(true)
1230
+ .reply(200, { isBatchingFlowEnabled: true, maxBatchSizeKB: 900 });
1231
+ (0, nock_1.default)(ROOT).put('/api/v2/user/keychains').reply(500, { error: 'transient' });
1232
+ (0, nock_1.default)(ROOT).put('/api/v2/user/keychains').reply(200, {});
1233
+ (0, nock_1.default)(ROOT)
1234
+ .post('/api/v1/user/changepassword', (body) => !body.keychains && !body.v2_keychains)
1235
+ .reply(200, {});
1236
+ v1UpdatePasswordStub.callsFake(async (params) => {
1237
+ params.progressCallback?.({ status: 'updated', currentKeychainId: 'xpub1' });
1238
+ return { keychains: { k1: 'v1enc' }, version: 25 };
1239
+ });
1240
+ const events = [];
1241
+ await bitgo.changePassword({
1242
+ oldPassword: 'oldpw',
1243
+ newPassword: 'newpw',
1244
+ progressCallback: (progress) => events.push(progress),
1245
+ });
1246
+ const keychainEvents = events.filter((e) => e.phase === 'keychains' && e.status === 'updated');
1247
+ // one real keychain event plus the terminal denominator event for this v1-only
1248
+ // account — the retried transport must contribute neither a duplicate event
1249
+ // nor a double-count to either
1250
+ keychainEvents.should.have.length(2);
1251
+ keychainEvents[0].should.have.properties({ succeeded: 1, skipped: 0, attempted: 1, completed: 1 });
1252
+ keychainEvents[1].should.have.properties({ succeeded: 1, skipped: 0, attempted: 1, completed: 1, total: 1 });
1253
+ });
1028
1254
  });
1029
1255
  describe('createUserEcdhKeychain - encryptionVersion threading', function () {
1030
1256
  const ROOT = 'https://app.bitgo-test.com';
@@ -1110,4 +1336,4 @@ describe('wallets() v1 facade', function () {
1110
1336
  wallets.resendShareInvite.should.be.a.Function();
1111
1337
  });
1112
1338
  });
1113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Z29BUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYml0Z29BUEkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsa0JBQWdCO0FBQ2hCLGlEQUE4QztBQUM5Qyw2Q0FBeUM7QUFDekMsNkNBQStCO0FBQy9CLGdEQUF3QjtBQUl4QixRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtRQUM3QyxFQUFFLENBQUMsaURBQWlELEVBQUU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyx5QkFBeUIsRUFBRSxJQUFJO2FBQ2hDLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3hELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFO1lBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsYUFBYSxFQUFFLDJCQUEyQjtnQkFDMUMseUJBQXlCLEVBQUUsS0FBSzthQUNqQyxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUN4RCxLQUFLLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0Qs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QU8sQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6RCxPQUFPLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICcuLi8uLi9zcmMvYml0Z29BUEknO1xuaW1wb3J0IHsgUHJveHlBZ2VudCB9IGZyb20gJ3Byb3h5LWFnZW50JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0IHR5cGUgeyBJSG1hY0F1dGhTdHJhdGVneSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1obWFjJztcbmltcG9ydCB0eXBlIHsgSUVuY3J5cHRpb25TZXNzaW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5kZXNjcmliZSgnQ29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGlzIGVuYWJsZWQgZXhwbGljaXRseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICBjb29raWVzUHJvcGFnYXRpb25FbmFibGVkOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkJyk7XG4gICAgICBiaXRnby5jb29raWVzUHJvcGFnYXRpb25FbmFibGVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGlzIGRpc2FibGVkIGV4cGxpY2l0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZDogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQnKTtcbiAgICAgIGJpdGdvLmNvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCcpO1xuICAgICAgYml0Z28uY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZC5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVxdWVzdElkUHJlZml4IGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXBlbmQgcmVxdWVzdElkUHJlZml4IHRvIFJlcXVlc3QtSUQgaGVhZGVyIHdoZW4gc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIHJlcXVlc3RJZFByZWZpeDogJ3Rlc3QtcHJlZml4LScsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgL150ZXN0LXByZWZpeC0vKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICcxMjM0NScsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1vZGlmeSBSZXF1ZXN0LUlEIGhlYWRlciB3aGVuIHJlcXVlc3RJZFByZWZpeCBpcyBub3Qgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgL14xMjM0NSQvKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICcxMjM0NScsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZvcm1hdCBSZXF1ZXN0LUlEIHdpdGggcHJlZml4IGFuZCBudW1lcmljIHNlcXVlbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIHJlcXVlc3RJZFByZWZpeDogJ215YXBwLXYxLScsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgJ215YXBwLXYxLXRyYWNlLTEyMycpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnb2snIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJ3RyYWNlLTEyMycsXG4gICAgICAgICAgaW5jOiAoKSA9PiB7XG4gICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgd29yayB3aXRoIGVtcHR5IHN0cmluZyBwcmVmaXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgcmVxdWVzdElkUHJlZml4OiAnJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAubWF0Y2hIZWFkZXIoJ1JlcXVlc3QtSUQnLCAnYWJjLTEyMycpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnb2snIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJ2FiYy0xMjMnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnaHR0cCBwcm94eSBhZ2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnaHR0cCBwcm94eSBhZ2VudCBzaGFsbCBiZSBjcmVhdGVkIHdoZW4gcHJveHkoY3VzdG9tUHJveHlhZ2VudCkgaXMgc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VzdG9tUHJveHlBZ2VudCA9IG5ldyBQcm94eUFnZW50KHtcbiAgICAgICAgZ2V0UHJveHlGb3JVcmw6ICgpID0+ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY3VzdG9tUHJveHlBZ2VudCxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnX2N1c3RvbVByb3h5QWdlbnQnLCBjdXN0b21Qcm94eUFnZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdiaXRnbyBhcGkgaXMgc3RpbGwgaW5pdGlhdGVkIHdoZW4gcHJveHkoY3VzdG9tUHJveHlBZ2VudCkgaXMgbm90IHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdfY3VzdG9tUHJveHlBZ2VudCcsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIGJhc2U1OCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby52ZXJpZnlBZGRyZXNzKHsgYWRkcmVzczogJzJONnBhVDJUVTROMVhwYVpqSmlBcFdKWG9leXJMM1VXcGtaJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgYmVjaDMyIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvXG4gICAgICAgIC52ZXJpZnlBZGRyZXNzKHsgYWRkcmVzczogJ3RiMXFndXp5azR3NmthcXRwc2N6czVhajB3OHI3NTk4anEzNmVnbThlOTh3cXBoM3J3bWV4NjhzZXNsZ3NnJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VybCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBVUkwgZm9yIHZlcnNpb24gMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL3Rlc3QuYml0Z28uY29tJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGF0aCA9ICcvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20vYXBpL3YxL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby51cmwocGF0aCwgMSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkVXJsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IFVSTCBmb3IgdmVyc2lvbiAyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXRoID0gJy90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRVcmwgPSAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjIvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLnVybChwYXRoLCAyKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRVcmwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgVVJMIGZvciB2ZXJzaW9uIDMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCBleHBlY3RlZFVybCA9ICdodHRwczovL3Rlc3QuYml0Z28uY29tL2FwaS92My90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28udXJsKHBhdGgsIDMpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChleHBlY3RlZFVybCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlZmF1bHQgdG8gdmVyc2lvbiAxIGlmIG5vIHZlcnNpb24gaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCBleHBlY3RlZFVybCA9ICdodHRwczovL3Rlc3QuYml0Z28uY29tL2FwaS92MS90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28udXJsKHBhdGgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChleHBlY3RlZFVybCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWNyeXB0S2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ3Rlc3QnIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgbm8gcGFyYW1zIGFyZSBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IGNhbGxpbmcgd2l0aCBubyBwYXJhbXMgZm9yIHRlc3RcbiAgICAgIGF3YWl0IGJpdGdvLmRlY3J5cHRLZXlzKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnTWlzc2luZyBwYXJhbWV0ZXI6IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycyBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYml0Z29cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgbWlzc2luZyByZXF1aXJlZCBwYXJhbVxuICAgICAgICAuZGVjcnlwdEtleXMoeyBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnTWlzc2luZyBwYXJhbWV0ZXI6IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgcGFzc3dvcmQgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IG1pc3NpbmcgcmVxdWlyZWQgcGFyYW1cbiAgICAgIGF3YWl0IGJpdGdvLmRlY3J5cHRLZXlzKHsgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW10gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnTWlzc2luZyBwYXJhbWV0ZXI6IHBhc3N3b3JkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMgaXMgbm90IGFuIGFycmF5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYml0Z29cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgcHJvdmlkaW5nIHdyb25nIHR5cGVcbiAgICAgICAgLmRlY3J5cHRLZXlzKHsgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogJ25vdCBhbiBhcnJheScsIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IGFycmF5IGZvciBlbXB0eSB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYml0Z28uZGVjcnlwdEtleXMoeyB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXSwgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIGFueSB3YWxsZXRJZCBpcyBtaXNzaW5nIG9yIG5vdCBhIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJpdGdvXG4gICAgICAgIC5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgbWlzc2luZyB3YWxsZXRJZFxuICAgICAgICAgICAgeyBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnZWFjaCBrZXkgcGFpciBtdXN0IGhhdmUgYSBzdHJpbmcgd2FsbGV0SWQnKTtcblxuICAgICAgYXdhaXQgYml0Z29cbiAgICAgICAgLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgICB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzOiBbXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBwcm92aWRpbmcgd3JvbmcgdHlwZVxuICAgICAgICAgICAgeyB3YWxsZXRJZDogMTIzLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnZWFjaCBrZXkgcGFpciBtdXN0IGhhdmUgYSBzdHJpbmcgd2FsbGV0SWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgYW55IGVuY3J5cHRlZFBydiBpcyBtaXNzaW5nIG9yIG5vdCBhIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJpdGdvXG4gICAgICAgIC5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgbWlzc2luZyBlbmNyeXB0ZWRQcnZcbiAgICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnZWFjaCBrZXkgcGFpciBtdXN0IGhhdmUgYSBzdHJpbmcgZW5jcnlwdGVkUHJ2Jyk7XG5cbiAgICAgIGF3YWl0IGJpdGdvXG4gICAgICAgIC5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgcHJvdmlkaW5nIHdyb25nIHR5cGVcbiAgICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMScsIGVuY3J5cHRlZFBydjogMTIzIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2VhY2gga2V5IHBhaXIgbXVzdCBoYXZlIGEgc3RyaW5nIGVuY3J5cHRlZFBydicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVjcnlwdEtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB3YWxsZXRJZHMgb2Yga2V5cyB0aGF0IGZhaWxlZCB0byBkZWNyeXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjcnlwdEFzeW5jU3R1YiA9IHNpbm9uLnN0dWIoYml0Z28sICdkZWNyeXB0Jyk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViLm9uRmlyc3RDYWxsKCkucmVzb2x2ZXMoJ2RlY3J5cHRlZC1rZXktMScpO1xuICAgICAgZGVjcnlwdEFzeW5jU3R1Yi5vblNlY29uZENhbGwoKS5yZWplY3RzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMScsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTEnIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0yJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHJlc3VsdFswXS5zaG91bGQuZXF1YWwoJ3dhbGxldC1pZC0yJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBwcm9jZXNzIG11bHRpcGxlIHdhbGxldCBrZXlzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjcnlwdEFzeW5jU3R1YiA9IHNpbm9uLnN0dWIoYml0Z28sICdkZWNyeXB0Jyk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViXG4gICAgICAgIC53aXRoQXJncyh7IGlucHV0OiAnZW5jcnlwdGVkLWRhdGEtMicsIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pXG4gICAgICAgIC5yZWplY3RzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViXG4gICAgICAgIC53aXRoQXJncyh7IGlucHV0OiAnZW5jcnlwdGVkLWRhdGEtNCcsIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pXG4gICAgICAgIC5yZWplY3RzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG4gICAgICBkZWNyeXB0QXN5bmNTdHViLnJlc29sdmVzKCdzdWNjZXNzJyk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmRlY3J5cHRLZXlzKHtcbiAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMScsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTEnIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0yJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMicgfSxcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTMnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0zJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtNCcsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTQnIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIGRlY3J5cHRBc3luY1N0dWIuY2FsbENvdW50LnNob3VsZC5lcXVhbCg0KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgICByZXN1bHQuc2hvdWxkLmNvbnRhaW5EZWVwKFsnd2FsbGV0LWlkLTInLCAnd2FsbGV0LWlkLTQnXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdVc2VyLUFnZW50IGhlYWRlciBiYXNlZCBvbiBlbnZpcm9ubWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXQgVXNlci1BZ2VudCBoZWFkZXIgd2hlbiBydW5uaW5nIGluIE5vZGUuanMgKHR5cGVvZiB3aW5kb3cgPT09IHVuZGVmaW5lZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgdXNlckFnZW50OiAnVGVzdEFnZW50LzEuMCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gRW5zdXJlIHdlJ3JlIGluIGEgTm9kZS5qcyBlbnZpcm9ubWVudCBieSB2ZXJpZnlpbmcgd2luZG93IGlzIHVuZGVmaW5lZFxuICAgICAgKHR5cGVvZiB3aW5kb3cpLnNob3VsZC5lcXVhbCgndW5kZWZpbmVkJyk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgIC5tYXRjaEhlYWRlcignVXNlci1BZ2VudCcsICdUZXN0QWdlbnQvMS4wJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdvaycgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICByZXFJZDoge1xuICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAndGVzdC0xMjMnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBzZXQgVXNlci1BZ2VudCBoZWFkZXIgd2hlbiBydW5uaW5nIGluIGJyb3dzZXIgKHR5cGVvZiB3aW5kb3cgIT09IHVuZGVmaW5lZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBNb2NrIHRoZSB3aW5kb3cgb2JqZWN0IHRvIHNpbXVsYXRlIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICAgIGNvbnN0IHdpbmRvd1N0dWIgPSB7IGxvY2F0aW9uOiAnbW9jaycgfTtcbiAgICAgIChnbG9iYWwgYXMgYW55KS53aW5kb3cgPSB3aW5kb3dTdHViO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgICAgdXNlckFnZW50OiAnVGVzdEFnZW50LzEuMCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgICAucmVwbHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gVmVyaWZ5IFVzZXItQWdlbnQgaGVhZGVyIGlzIE5PVCBzZXQgdG8gb3VyIGN1c3RvbSB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgdXNlckFnZW50ID0gdGhpcy5yZXEuaGVhZGVyc1sndXNlci1hZ2VudCddO1xuICAgICAgICAgICAgaWYgKHVzZXJBZ2VudCAmJiB1c2VyQWdlbnQuaW5jbHVkZXMoJ1Rlc3RBZ2VudC8xLjAnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXItQWdlbnQgc2hvdWxkIG5vdCBiZSBzZXQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFsyMDAsIHsgc3RhdHVzOiAnb2snIH1dO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJ3Rlc3QtMTIzJyxcbiAgICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgICAvKiBtb2NrICovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcblxuICAgICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGdsb2JhbCB3aW5kb3cgbW9ja1xuICAgICAgICBkZWxldGUgKGdsb2JhbCBhcyBhbnkpLndpbmRvdztcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2htYWNBdXRoU3RyYXRlZ3kgdG9rZW4gbGlmZWN5Y2xlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFJPT1QgPSAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCc7XG5cbiAgICAvLyBCdWlsZHMgYSBtb2NrIHN0cmF0ZWd5IHdob3NlIHNldFRva2VuIC8gY2xlYXJUb2tlbiBhcmUgc2lub24gc3R1YnMuXG4gICAgZnVuY3Rpb24gbWFrZVN0cmF0ZWd5KG92ZXJyaWRlczogUGFydGlhbDxJSG1hY0F1dGhTdHJhdGVneT4gPSB7fSk6IHtcbiAgICAgIHN0cmF0ZWd5OiBJSG1hY0F1dGhTdHJhdGVneTtcbiAgICAgIHNldFRva2VuU3R1Yjogc2lub24uU2lub25TdHViO1xuICAgICAgY2xlYXJUb2tlblN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICB9IHtcbiAgICAgIGNvbnN0IHNldFRva2VuU3R1YiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpO1xuICAgICAgY29uc3QgY2xlYXJUb2tlblN0dWIgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKTtcbiAgICAgIGNvbnN0IHN0cmF0ZWd5OiBJSG1hY0F1dGhTdHJhdGVneSA9IHtcbiAgICAgICAgY2FsY3VsYXRlUmVxdWVzdEhlYWRlcnM6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGhtYWM6ICdobWFjJywgdGltZXN0YW1wOiAxLCB0b2tlbkhhc2g6ICdoYXNoJyB9KSxcbiAgICAgICAgdmVyaWZ5UmVzcG9uc2U6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgICAgICBleHBlY3RlZEhtYWM6ICdobWFjJyxcbiAgICAgICAgICBzaWduYXR1cmVTdWJqZWN0OiAnJyxcbiAgICAgICAgICBpc0luUmVzcG9uc2VWYWxpZGl0eVdpbmRvdzogdHJ1ZSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25UaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICB9KSxcbiAgICAgICAgY2FsY3VsYXRlSE1BQzogc2lub24uc3R1YigpLnJlc29sdmVzKCdoYXNoZWQtcHcnKSxcbiAgICAgICAgc2V0VG9rZW46IHNldFRva2VuU3R1YixcbiAgICAgICAgY2xlYXJUb2tlbjogY2xlYXJUb2tlblN0dWIsXG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBzdHJhdGVneSwgc2V0VG9rZW5TdHViLCBjbGVhclRva2VuU3R1YiB9O1xuICAgIH1cblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYXV0aGVudGljYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnY2FsbHMgc2V0VG9rZW4gd2l0aCB0aGUgYWNjZXNzX3Rva2VuIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLnBvc3QoJy9hcGkvYXV0aC92MS9zZXNzaW9uJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3YyeG15YWNjZXNzdG9rZW4nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmF1dGhlbnRpY2F0ZSh7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScsIHBhc3N3b3JkOiAnaHVudGVyMicgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgc2V0VG9rZW5TdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCgndjJ4bXlhY2Nlc3N0b2tlbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhd2FpdHMgc2V0VG9rZW4gYmVmb3JlIG1ha2luZyBlbnN1cmVFY2RoS2V5Y2hhaW4gcmVxdWVzdHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0OiBpZiBzZXRUb2tlbiBpcyBub3QgYXdhaXRlZCwgdGhlXG4gICAgICAgIC8vIHN0cmF0ZWd5J3Mga2V5IG1hdGVyaWFsIHdvbid0IGJlIHJlYWR5IGJlZm9yZSBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVyc1xuICAgICAgICAvLyBpcyBjYWxsZWQgZm9yIHRoZSBHRVQgL3VzZXIvc2V0dGluZ3MgcmVxdWVzdCwgYW5kIGl0IHdvdWxkIHRocm93LlxuICAgICAgICBsZXQga2V5UmVhZHkgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSB9ID0gbWFrZVN0cmF0ZWd5KHtcbiAgICAgICAgICBzZXRUb2tlbjogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBTaW11bGF0ZSBub24tdHJpdmlhbCBhc3luYyBrZXkgZGVyaXZhdGlvbiAobGlrZSBjcnlwdG8uc3VidGxlLmltcG9ydEtleSkuXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0SW1tZWRpYXRlKHJlc29sdmUpKTtcbiAgICAgICAgICAgIGtleVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVyczogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWtleVJlYWR5KSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdG9rZW4gYXZhaWxhYmxlLiBDYWxsIHNldFRva2VuKCkgb3IgcmVzdG9yZVRva2VuKCkgZmlyc3QuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBobWFjOiAnaG1hYycsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgdG9rZW5IYXNoOiAnaGFzaCcgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgbm9jayhST09UKVxuICAgICAgICAgIC5wb3N0KCcvYXBpL2F1dGgvdjEvc2Vzc2lvbicpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhteXRva2VuJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhlIEdFVCAvdXNlci9zZXR0aW5ncyByZXF1ZXN0IG1hZGUgYnkgZW5zdXJlVXNlckVjZGhLZXljaGFpbklzQ3JlYXRlZFxuICAgICAgICAvLyBtdXN0IHN1Y2NlZWQg4oCUIGl0IHdvdWxkIHRocm93IGlmIHNldFRva2VuIHdhc24ndCBhd2FpdGVkIGZpcnN0LlxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLmdldCgnL2FwaS92MS91c2VyL3NldHRpbmdzJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICBzZXR0aW5nczogeyBlY2RoS2V5Y2hhaW46ICd4cHViMTIzJyB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmF1dGhlbnRpY2F0ZSh7XG4gICAgICAgICAgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyxcbiAgICAgICAgICBwYXNzd29yZDogJ2h1bnRlcjInLFxuICAgICAgICAgIGVuc3VyZUVjZGhLZXljaGFpbjogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAga2V5UmVhZHkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2F1dGhlbnRpY2F0ZVdpdGhQYXNza2V5KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZFBhc3NrZXkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlkOiAnY3JlZGVudGlhbC1pZCcsXG4gICAgICAgIHJhd0lkOiAncmF3LWlkJyxcbiAgICAgICAgdHlwZTogJ3B1YmxpYy1rZXknLFxuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIGF1dGhlbnRpY2F0b3JEYXRhOiAnYXV0aC1kYXRhJyxcbiAgICAgICAgICBjbGllbnREYXRhSlNPTjogJ2NsaWVudC1kYXRhJyxcbiAgICAgICAgICBzaWduYXR1cmU6ICdzaWcnLFxuICAgICAgICAgIHVzZXJIYW5kbGU6ICd1c2VyLWhhbmRsZS0xMjMnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdjYWxscyBzZXRUb2tlbiB3aXRoIHRoZSBhY2Nlc3NfdG9rZW4gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAucG9zdCgnL2FwaS9hdXRoL3YxL3Nlc3Npb24nKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LFxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4cGFzc2tleXRva2VuJyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBiaXRnby5hdXRoZW50aWNhdGVXaXRoUGFzc2tleSh2YWxpZFBhc3NrZXkpO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHNldFRva2VuU3R1Yi5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoJ3YyeHBhc3NrZXl0b2tlbicpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY2xlYXJBc3luYygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2NsZWFycyBfdG9rZW4gYW5kIGNhbGxzIGNsZWFyVG9rZW4gb24gdGhlIHN0cmF0ZWd5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBjbGVhclRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgYml0Z28uYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuKHsgYWNjZXNzVG9rZW46ICd2Mnhzb21ldG9rZW4nIH0pO1xuICAgICAgICAoYml0Z28gYXMgYW55KS5fdG9rZW4uc2hvdWxkLmVxdWFsKCd2Mnhzb21ldG9rZW4nKTtcblxuICAgICAgICBhd2FpdCBiaXRnby5jbGVhckFzeW5jKCk7XG5cbiAgICAgICAgKChiaXRnbyBhcyBhbnkpLl90b2tlbiA9PT0gdW5kZWZpbmVkKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBjbGVhclRva2VuU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZWZyZXNoVG9rZW4oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdjYWxscyBzZXRUb2tlbiB3aXRoIHRoZSBuZXcgYWNjZXNzX3Rva2VuIGZyb20gdGhlIE9BdXRoIHJlc3BvbnNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgICBjdXN0b21Sb290VVJJOiBST09ULFxuICAgICAgICAgIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgICAgICAgIGNsaWVudElkOiAnY2xpZW50LWlkJyxcbiAgICAgICAgICBjbGllbnRTZWNyZXQ6ICdjbGllbnQtc2VjcmV0JyxcbiAgICAgICAgfSk7XG4gICAgICAgIChiaXRnbyBhcyBhbnkpLl9yZWZyZXNoVG9rZW4gPSAnb2xkLXJlZnJlc2gtdG9rZW4nO1xuXG4gICAgICAgIG5vY2soUk9PVCkucG9zdCgnL29hdXRoL3Rva2VuJykucmVwbHkoMjAwLCB7XG4gICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4bmV3dG9rZW4nLFxuICAgICAgICAgIHJlZnJlc2hfdG9rZW46ICduZXctcmVmcmVzaC10b2tlbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLnJlZnJlc2hUb2tlbigpO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHNldFRva2VuU3R1Yi5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoJ3YyeG5ld3Rva2VuJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhdXRoZW50aWNhdGVXaXRoQXV0aENvZGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdjYWxscyBzZXRUb2tlbiB3aXRoIHRoZSBhY2Nlc3NfdG9rZW4gZnJvbSB0aGUgT0F1dGggcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICAgIGN1c3RvbVJvb3RVUkk6IFJPT1QsXG4gICAgICAgICAgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICAgICAgY2xpZW50SWQ6ICdjbGllbnQtaWQnLFxuICAgICAgICAgIGNsaWVudFNlY3JldDogJ2NsaWVudC1zZWNyZXQnLFxuICAgICAgICB9KTtcblxuICAgICAgICBub2NrKFJPT1QpLnBvc3QoJy9vYXV0aC90b2tlbicpLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3YyeGF1dGhjb2RldG9rZW4nLFxuICAgICAgICAgIHJlZnJlc2hfdG9rZW46ICdyZWZyZXNoLXRva2VuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0ZVdpdGhBdXRoQ29kZSBjYWxscyB0aGlzLm1lKCkgYWZ0ZXIgc2V0dGluZyB0aGUgdG9rZW5cbiAgICAgICAgbm9jayhST09UKVxuICAgICAgICAgIC5nZXQoJy9hcGkvdjEvdXNlci9tZScpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uYXV0aGVudGljYXRlV2l0aEF1dGhDb2RlKHsgYXV0aENvZGU6ICdteS1hdXRoLWNvZGUnIH0pO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHNldFRva2VuU3R1Yi5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoJ3YyeGF1dGhjb2RldG9rZW4nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3N5bmMgdG9rZW4tc2V0dGluZyBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2F1dGhlbnRpY2F0ZVdpdGhBY2Nlc3NUb2tlbiBkb2VzIG5vdCBjYWxsIHNldFRva2VuIChzeW5jaHJvbm91cyDigJQgY2FsbGVyIG11c3QgaW52b2tlIHNldFRva2VuIG9uIHRoZSBzdHJhdGVneSBtYW51YWxseSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgYml0Z28uYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuKHsgYWNjZXNzVG9rZW46ICd2MnhzeW5jdG9rZW4nIH0pO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Zyb21KU09OIGRvZXMgbm90IGNhbGwgc2V0VG9rZW4gKHN5bmNocm9ub3VzIOKAlCBjYWxsZXIgbXVzdCBpbnZva2Ugc2V0VG9rZW4gb24gdGhlIHN0cmF0ZWd5IG1hbnVhbGx5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICAoYml0Z28gYXMgYW55KS5mcm9tSlNPTih7IHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LCB0b2tlbjogJ3YyeGpzb250b2tlbicgfSk7XG5cbiAgICAgICAgc2V0VG9rZW5TdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2FkZEFjY2Vzc1Rva2VuKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZFBhcmFtcyA9IHtcbiAgICAgICAgbGFiZWw6ICd0ZXN0LXRva2VuJyxcbiAgICAgICAgc2NvcGU6IFsnd2FsbGV0X3ZpZXdfYWxsJ10sXG4gICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgfTtcblxuICAgICAgaXQoJ3Nob3VsZCBmb3JjZSBWMSBhdXRoIGFuZCByZXR1cm4gcGxhaW4gdG9rZW4gd2hlbiBlY2RoWHBydiBpcyBhYnNlbnQsIGV2ZW4gaWYgaG1hY0F1dGhTdHJhdGVneSBpcyBhdXRoZW50aWNhdGVkIChTU08vZW50ZXJwcmlzZSB1c2VycyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgV0NOLTE3OTAgLyBBTlQtOTYzOiBITUFDIHJlcXVlc3Qgc2lnbmluZyBhbmQgRUNESCByZXNwb25zZVxuICAgICAgICAvLyBlbmNyeXB0aW9uIGFyZSBvcnRob2dvbmFsLiBmb3JjZVYxQXV0aCB0ZWxscyB0aGUgc2VydmVyIHRvIHJldHVybiBhIHBsYWludGV4dCB0b2tlblxuICAgICAgICAvLyBpbnN0ZWFkIG9mIEVDREgtZW5jcnlwdGluZyBpdC4gSXQgbXVzdCBiZSBzZXQgd2hlbmV2ZXIgZWNkaFhwcnYgaXMgYWJzZW50LFxuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIEhNQUMgc3RyYXRlZ3kgaXMgYWN0aXZlLlxuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5IH0gPSBtYWtlU3RyYXRlZ3koe1xuICAgICAgICAgIGlzQXV0aGVudGljYXRlZDogc2lub24uc3R1YigpLnJldHVybnModHJ1ZSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuICAgICAgICAvLyBEbyBOT1Qgc2V0IF9lY2RoWHBydiDigJQgc2ltdWxhdGVzIFNTTy9lbnRlcnByaXNlIHNlc3Npb24gKE9rdGEsIEVudHJhLCBldGMuKVxuICAgICAgICBiaXRnby5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogJ3YyeHN0cmF0ZWd5dG9rZW4nIH0pO1xuXG4gICAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhST09UKS5wb3N0KCcvYXBpL2F1dGgvdjEvYWNjZXNzdG9rZW4nKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICB0b2tlbjogJ3YyeG5ld3BsYWludG9rZW4nLFxuICAgICAgICAgIGxhYmVsOiAndGVzdC10b2tlbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmFkZEFjY2Vzc1Rva2VuKHZhbGlkUGFyYW1zKTtcblxuICAgICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAvLyBmb3JjZVYxQXV0aCBNVVNUIGJlIHNldCDigJQgc2VydmVyIHJldHVybnMgcGxhaW50ZXh0IHRva2VuIHNpbmNlIHdlIGhhdmUgbm8gZGVjcnlwdGlvbiBrZXlcbiAgICAgICAgKHJlc3VsdCBhcyBhbnkpLndhcm5pbmcuc2hvdWxkLm1hdGNoKC9wcm90b2NvbCBkb3duZ3JhZGUvKTtcbiAgICAgICAgcmVzdWx0LnRva2VuLnNob3VsZC5lcXVhbCgndjJ4bmV3cGxhaW50b2tlbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IGNhbGwgaGFuZGxlVG9rZW5Jc3N1YW5jZSB3aGVuIGVjZGhYcHJ2IGlzIHByZXNlbnQgYnV0IHRoZSBzZXJ2ZXIgcmV0dXJuZWQgYSBwbGFpbnRleHQgdG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVRva2VuU3B5ID0gc2lub24uc3B5KEJpdEdvQVBJLnByb3RvdHlwZSwgJ2hhbmRsZVRva2VuSXNzdWFuY2UnKTtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSB9ID0gbWFrZVN0cmF0ZWd5KHtcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHRydWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgICAgYml0Z28uZnJvbUpTT04oe1xuICAgICAgICAgIHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LFxuICAgICAgICAgIHRva2VuOiAnYScucmVwZWF0KDQwKSxcbiAgICAgICAgICBlY2RoWHBydjogJ3hwcnYtdGVzdC1rZXknLFxuICAgICAgICB9KTtcblxuICAgICAgICBub2NrKFJPT1QpLnBvc3QoJy9hcGkvYXV0aC92MS9hY2Nlc3N0b2tlbicpLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHRva2VuOiAndjJ4cGxhaW50ZXh0ZnJvbXYxJyxcbiAgICAgICAgICBsYWJlbDogJ3Rlc3QtdG9rZW4nLFxuICAgICAgICB9KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmFkZEFjY2Vzc1Rva2VuKHZhbGlkUGFyYW1zKTtcblxuICAgICAgICAgIGhhbmRsZVRva2VuU3B5LmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgICByZXN1bHQudG9rZW4uc2hvdWxkLmVxdWFsKCd2MnhwbGFpbnRleHRmcm9tdjEnKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBoYW5kbGVUb2tlblNweS5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG5vdCBjYWxsIGhhbmRsZVRva2VuSXNzdWFuY2Ugd2hlbiBlY2RoWHBydiBpcyBhYnNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVRva2VuU3B5ID0gc2lub24uc3B5KEJpdEdvQVBJLnByb3RvdHlwZSwgJ2hhbmRsZVRva2VuSXNzdWFuY2UnKTtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSB9ID0gbWFrZVN0cmF0ZWd5KHtcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHRydWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgICAgYml0Z28uYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuKHsgYWNjZXNzVG9rZW46ICd2MnhzdHJhdGVneXRva2VuJyB9KTtcblxuICAgICAgICBub2NrKFJPT1QpLnBvc3QoJy9hcGkvYXV0aC92MS9hY2Nlc3N0b2tlbicpLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHRva2VuOiAndjJ4cGxhaW50b2tlbicsXG4gICAgICAgICAgbGFiZWw6ICd0ZXN0LXRva2VuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYml0Z28uYWRkQWNjZXNzVG9rZW4odmFsaWRQYXJhbXMpO1xuXG4gICAgICAgIC8vIGhhbmRsZVRva2VuSXNzdWFuY2UgbXVzdCBub3QgYmUgY2FsbGVkIOKAlCBubyBlY2RoWHBydiB0byBkZWNyeXB0IHdpdGhcbiAgICAgICAgaGFuZGxlVG9rZW5TcHkuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICByZXN1bHQudG9rZW4uc2hvdWxkLmVxdWFsKCd2MnhwbGFpbnRva2VuJyk7XG5cbiAgICAgICAgaGFuZGxlVG9rZW5TcHkucmVzdG9yZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZm9yY2UgVjEgYXV0aCB3aGVuIGVjZGhYcHJ2IGlzIGFic2VudCBhbmQgc3RyYXRlZ3kgaXMgbm90IGF1dGhlbnRpY2F0ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3kgfSA9IG1ha2VTdHJhdGVneSh7XG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBzaW5vbi5zdHViKCkucmV0dXJucyhmYWxzZSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuICAgICAgICBiaXRnby5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogJ3YyeGxlZ2FjeXRva2VuJyB9KTtcblxuICAgICAgICBub2NrKFJPT1QpLnBvc3QoJy9hcGkvYXV0aC92MS9hY2Nlc3N0b2tlbicpLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHRva2VuOiAndjJ4bGVnYWN5cmVzdWx0JyxcbiAgICAgICAgICBsYWJlbDogJ3Rlc3QtdG9rZW4nLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiaXRnby5hZGRBY2Nlc3NUb2tlbih2YWxpZFBhcmFtcyk7XG5cbiAgICAgICAgKHJlc3VsdCBhcyBhbnkpLndhcm5pbmcuc2hvdWxkLm1hdGNoKC9wcm90b2NvbCBkb3duZ3JhZGUvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZvcmNlIFYxIGF1dGggd2hlbiBpc0F1dGhlbnRpY2F0ZWQgaXMgbm90IGRlZmluZWQgb24gc3RyYXRlZ3knLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3kgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuICAgICAgICBiaXRnby5hdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4oeyBhY2Nlc3NUb2tlbjogJ3YyeG5vYXV0aG1ldGhvZCcgfSk7XG5cbiAgICAgICAgbm9jayhST09UKS5wb3N0KCcvYXBpL2F1dGgvdjEvYWNjZXNzdG9rZW4nKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICB0b2tlbjogJ3YyeHJlc3VsdCcsXG4gICAgICAgICAgbGFiZWw6ICd0ZXN0LXRva2VuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYml0Z28uYWRkQWNjZXNzVG9rZW4odmFsaWRQYXJhbXMpO1xuXG4gICAgICAgIC8vIFdpdGhvdXQgaXNBdXRoZW50aWNhdGVkLCBzaG91bGQgZmFsbCBiYWNrIHRvIFYxIGF1dGhcbiAgICAgICAgKHJlc3VsdCBhcyBhbnkpLndhcm5pbmcuc2hvdWxkLm1hdGNoKC9wcm90b2NvbCBkb3duZ3JhZGUvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29uc3RhbnRzIHBhcmFtZXRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFsbG93IHBhc3NpbmcgY29uc3RhbnRzIHZpYSBvcHRpb25zIGFuZCBleHBvc2UgdmlhIGZldGNoQ29uc3RhbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIGNsaWVudENvbnN0YW50czogeyBtYXhGZWVSYXRlOiAnMTIzMTIzMTIzMTIzMTIzJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0YW50cyA9IGF3YWl0IGJpdGdvLmZldGNoQ29uc3RhbnRzKCk7XG4gICAgICBjb25zdGFudHMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21heEZlZVJhdGUnLCAnMTIzMTIzMTIzMTIzMTIzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZnJlc2ggY29uc3RhbnRzIHdoZW4gY2FjaGUgaGFzIGV4cGlyZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgY2FjaGVkIGNvbnN0YW50cyB3aXRoIGFuIGV4cGlyZWQgY2FjaGVcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzWydjdXN0b20nXSA9IHsgbWF4RmVlUmF0ZTogJ29sZC12YWx1ZScgfTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmVbJ2N1c3RvbSddID0gbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEwMDApOyAvLyBFeHBpcmVkIDEgc2Vjb25kIGFnb1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL2NsaWVudC9jb25zdGFudHMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgY29uc3RhbnRzOiB7IG1heEZlZVJhdGU6ICduZXctdmFsdWUnLCBuZXdDb25zdGFudDogJ2FkZGVkJyB9LFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgY29uc3RhbnRzID0gYXdhaXQgYml0Z28uZmV0Y2hDb25zdGFudHMoKTtcblxuICAgICAgLy8gU2hvdWxkIHJldHVybiB0aGUgbmV3IGNvbnN0YW50cyBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4RmVlUmF0ZScsICduZXctdmFsdWUnKTtcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbmV3Q29uc3RhbnQnLCAnYWRkZWQnKTtcblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgY2FjaGVkIGNvbnN0YW50cyB3aGVuIGNhY2hlIGlzIHN0aWxsIHZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IHVwIGNhY2hlZCBjb25zdGFudHMgd2l0aCBhIGZ1dHVyZSBleHBpcnlcbiAgICAgIGNvbnN0IGNhY2hlZENvbnN0YW50cyA9IHsgbWF4RmVlUmF0ZTogJ2NhY2hlZC12YWx1ZScsIGFub3RoZXJTZXR0aW5nOiAnY2FjaGVkLXNldHRpbmcnIH07XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c1snY3VzdG9tJ10gPSBjYWNoZWRDb25zdGFudHM7XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlWydjdXN0b20nXSA9IG5ldyBEYXRlKERhdGUubm93KCkgKyA1ICogNjAgKiAxMDAwKTsgLy8gVmFsaWQgZm9yIDUgbW9yZSBtaW51dGVzXG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgY29uc3RhbnRzOiB7IHNob3VsZE5vdEJlVXNlZDogdHJ1ZSB9IH0pO1xuXG4gICAgICBjb25zdCBjb25zdGFudHMgPSBhd2FpdCBiaXRnby5mZXRjaENvbnN0YW50cygpO1xuXG4gICAgICAvLyBTaG91bGQgcmV0dXJuIHRoZSBjYWNoZWQgY29uc3RhbnRzXG4gICAgICBjb25zdGFudHMuc2hvdWxkLmRlZXBFcXVhbChjYWNoZWRDb25zdGFudHMpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBubyBIVFRQIHJlcXVlc3Qgd2FzIG1hZGUgKHNpbmNlIGNhY2hlIHdhcyB2YWxpZClcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5mYWxzZSgpO1xuXG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSBjYWNoZWQgY29uc3RhbnRzIHdoZW4gbm8gY2FjaGUgZXhwaXJ5IGlzIHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBjYWNoZWQgY29uc3RhbnRzIHdpdGggbm8gZXhwaXJ5XG4gICAgICBjb25zdCBjYWNoZWRDb25zdGFudHMgPSB7IG1heEZlZVJhdGU6ICduby1leHBpcnktdmFsdWUnIH07XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c1snY3VzdG9tJ10gPSBjYWNoZWRDb25zdGFudHM7XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlWydjdXN0b20nXSA9IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBjb25zdGFudHM6IHsgc2hvdWxkTm90QmVVc2VkOiB0cnVlIH0gfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0YW50cyA9IGF3YWl0IGJpdGdvLmZldGNoQ29uc3RhbnRzKCk7XG5cbiAgICAgIC8vIFNob3VsZCByZXR1cm4gdGhlIGNhY2hlZCBjb25zdGFudHNcbiAgICAgIGNvbnN0YW50cy5zaG91bGQuZGVlcEVxdWFsKGNhY2hlZENvbnN0YW50cyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IG5vIEhUVFAgcmVxdWVzdCB3YXMgbWFkZSAoc2luY2Ugbm8gZXhwaXJ5IG1lYW5zIGNhY2hlIGlzIGFsd2F5cyB2YWxpZClcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5mYWxzZSgpO1xuXG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYWNrS2V5Y2hhaW5zRkZEJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBiaXRnbzogQml0R29BUEk7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcgfSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBmZmQoXG4gICAgICBrZXljaGFpbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICB2MktleWNoYWluczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgIG1heEJhdGNoU2l6ZUJ5dGVzOiBudW1iZXJcbiAgICApOiBBcnJheTx7IHYxQmF0Y2g6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IHYyQmF0Y2g6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IHNpemVCeXRlczogbnVtYmVyIH0+IHtcbiAgICAgIHJldHVybiAoYml0Z28gYXMgYW55KS5wYWNrS2V5Y2hhaW5zRkZEKGtleWNoYWlucywgdjJLZXljaGFpbnMsIG1heEJhdGNoU2l6ZUJ5dGVzKTtcbiAgICB9XG5cbiAgICBpdCgncmV0dXJucyBhbiBlbXB0eSBhcnJheSB3aGVuIGJvdGggaW5wdXRzIGFyZSBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpbnMgPSBmZmQoe30sIHt9LCAxMDI0KTtcbiAgICAgIGJpbnMuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgICBiaW5zLnNob3VsZC5oYXZlLmxlbmd0aCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYWNrcyBhbGwgaXRlbXMgaW50byBhIHNpbmdsZSBiaW4gd2hlbiB0aGV5IGZpdCB3aXRoaW4gdGhlIGxpbWl0JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRWFjaCBlbnRyeTogMi1ieXRlIGlkICsgMTAtYnl0ZSB2YWx1ZSA9IDEyIGJ5dGVzOyA1IGVudHJpZXMgPSA2MCBieXRlcyA8IDIwMCBsaW1pdFxuICAgICAgY29uc3Qga2V5Y2hhaW5zID0geyBrMTogJ2FhYWFhYWFhYWEnLCBrMjogJ2JiYmJiYmJiYmInLCBrMzogJ2NjY2NjY2NjY2MnIH07XG4gICAgICBjb25zdCB2MktleWNoYWlucyA9IHsgdjE6ICdkZGRkZGRkZGRkJywgdjI6ICdlZWVlZWVlZWVlJyB9O1xuICAgICAgY29uc3QgYmlucyA9IGZmZChrZXljaGFpbnMsIHYyS2V5Y2hhaW5zLCAyMDApO1xuICAgICAgYmlucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBPYmplY3Qua2V5cyhiaW5zWzBdLnYxQmF0Y2gpLnNob3VsZC5oYXZlLmxlbmd0aCgzKTtcbiAgICAgIE9iamVjdC5rZXlzKGJpbnNbMF0udjJCYXRjaCkuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NwbGl0cyBpbnRvIG11bHRpcGxlIGJpbnMgd2hlbiBhIHNpbmdsZSBiaW4gY2Fubm90IGZpdCBhbGwgaXRlbXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBpZD0nazEnICgyIGJ5dGVzKSArIDYwMC1jaGFyIHZhbHVlID0gNjAyIGJ5dGVzOyAyIGVudHJpZXMgZXhjZWVkIDcwMC1ieXRlIGxpbWl0XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAneCcucmVwZWF0KDYwMCksIGsyOiAneScucmVwZWF0KDYwMCkgfTtcbiAgICAgIGNvbnN0IGJpbnMgPSBmZmQoa2V5Y2hhaW5zLCB7fSwgNzAwKTtcbiAgICAgIGJpbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIGEgc2luZ2xlIGl0ZW0gZXhjZWVkcyBtYXhCYXRjaFNpemVCeXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGlkPSdrMScgKDIgYnl0ZXMpICsgMjAwLWNoYXIgdmFsdWUgPSAyMDIgYnl0ZXMgPiAxMDAtYnl0ZSBsaW1pdFxuICAgICAgY29uc3Qga2V5Y2hhaW5zID0geyBrMTogJ3gnLnJlcGVhdCgyMDApIH07XG4gICAgICB0cnkge1xuICAgICAgICBmZmQoa2V5Y2hhaW5zLCB7fSwgMTAwKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlcnJvciBub3QgdGhyb3duJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQubWF0Y2goL2V4Y2VlZHMgdGhlIG1heGltdW0gYmF0Y2ggc2l6ZS8pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3BsYWNlcyBWMSBrZXljaGFpbnMgaW4gdjFCYXRjaCBhbmQgVjIga2V5Y2hhaW5zIGluIHYyQmF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGsxOiAndjF2YWx1ZScgfTtcbiAgICAgIGNvbnN0IHYyS2V5Y2hhaW5zID0geyBrMjogJ3YydmFsdWUnIH07XG4gICAgICBjb25zdCBiaW5zID0gZmZkKGtleWNoYWlucywgdjJLZXljaGFpbnMsIDEwMDAwKTtcbiAgICAgIGJpbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgYmluc1swXS52MUJhdGNoLnNob3VsZC5oYXZlLnByb3BlcnR5KCdrMScsICd2MXZhbHVlJyk7XG4gICAgICBiaW5zWzBdLnYyQmF0Y2guc2hvdWxkLmhhdmUucHJvcGVydHkoJ2syJywgJ3YydmFsdWUnKTtcbiAgICAgIGJpbnNbMF0udjFCYXRjaC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2syJyk7XG4gICAgICBiaW5zWzBdLnYyQmF0Y2guc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdrMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VzZXMgRkZEIG9yZGVyaW5nIHNvIHRoZSBsYXJnZXN0IGl0ZW0gaXMgcGFja2VkIGZpcnN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gJ2JpZyc6IGlkKDMpICsgNDk3IGJ5dGVzID0gNTAwIGJ5dGVzOyAnczEnLCdzMic6IGlkKDIpICsgOTggYnl0ZXMgPSAxMDAgYnl0ZXMgZWFjaFxuICAgICAgLy8gbWF4QmF0Y2hTaXplQnl0ZXMgPSA2MDBcbiAgICAgIC8vIEZGRCBvcmRlciAoZGVzY2VuZGluZyk6IGJpZyg1MDApLCBzMSgxMDApLCBzMigxMDApXG4gICAgICAvLyAgIGJpbjA6IGJpZyg1MDApLiBzMTogNTAwKzEwMD02MDAgPD02MDAsIGZpdHMuIHMyOiA2MDArMTAwPTcwMCA+IDYwMCwgbmV3IGJpbjEuXG4gICAgICAvLyAgIFJlc3VsdDogYmluMD17YmlnLHMxfSwgYmluMT17czJ9XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSB7IGJpZzogJ3gnLnJlcGVhdCg0OTcpLCBzMTogJ3knLnJlcGVhdCg5OCksIHMyOiAneicucmVwZWF0KDk4KSB9O1xuICAgICAgY29uc3QgYmlucyA9IGZmZChrZXljaGFpbnMsIHt9LCA2MDApO1xuICAgICAgYmlucy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAgICAvLyAnYmlnJyBzaG91bGQgc2hhcmUgaXRzIGJpbiB3aXRoIG9uZSBzbWFsbCBpdGVtIChGRkQgcGFja3MgdGhlIGxhcmdlc3QgZmlyc3QpXG4gICAgICBjb25zdCBiaW5XaXRoQmlnID0gYmlucy5maW5kKChiKSA9PiAnYmlnJyBpbiBiLnYxQmF0Y2gpITtcbiAgICAgIE9iamVjdC5rZXlzKGJpbldpdGhCaWcudjFCYXRjaCkuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJvY2Vzc0tleWNoYWluUGFzc3dvcmRVcGRhdGVzSW5CYXRjaGVzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFJPT1QgPSAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCc7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3RyYXRlZ3k6IElIbWFjQXV0aFN0cmF0ZWd5ID0ge1xuICAgICAgICBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVyczogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaG1hYzogJ2htYWMnLCB0aW1lc3RhbXA6IERhdGUubm93KCksIHRva2VuSGFzaDogJ2hhc2gnIH0pLFxuICAgICAgICB2ZXJpZnlSZXNwb25zZTogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICAgIGV4cGVjdGVkSG1hYzogJ2htYWMnLFxuICAgICAgICAgIHNpZ25hdHVyZVN1YmplY3Q6ICcnLFxuICAgICAgICAgIGlzSW5SZXNwb25zZVZhbGlkaXR5V2luZG93OiB0cnVlLFxuICAgICAgICAgIHZlcmlmaWNhdGlvblRpbWU6IERhdGUubm93KCksXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxjdWxhdGVITUFDOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2hhc2hlZC1wdycpLFxuICAgICAgICBzZXRUb2tlbjogc2lub24uc3R1YigpLnJlc29sdmVzKCksXG4gICAgICAgIGNsZWFyVG9rZW46IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpLFxuICAgICAgfTtcbiAgICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gcnVuQmF0Y2hlcyhcbiAgICAgIGtleWNoYWluczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgIHYyS2V5Y2hhaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgbWF4QmF0Y2hTaXplS0I6IG51bWJlcixcbiAgICAgIG1heFJldHJpZXMgPSAzXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICByZXR1cm4gKGJpdGdvIGFzIGFueSkucHJvY2Vzc0tleWNoYWluUGFzc3dvcmRVcGRhdGVzSW5CYXRjaGVzKGtleWNoYWlucywgdjJLZXljaGFpbnMsIG1heEJhdGNoU2l6ZUtCLCBtYXhSZXRyaWVzKTtcbiAgICB9XG5cbiAgICBpdCgnbWFrZXMgYSBzaW5nbGUgUFVUIHJlcXVlc3QgZm9yIGEgc21hbGwgcGF5bG9hZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGF3YWl0IHJ1bkJhdGNoZXMoeyBrMTogJ3NtYWxsJyB9LCB7fSwgMTAyNCk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21ha2VzIHR3byBQVVQgcmVxdWVzdHMgd2hlbiB0aGUgcGF5bG9hZCBzcGFucyB0d28gYmlucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGlkPSdrMScoMikgKyA2MDAgPSA2MDIgYnl0ZXMgZWFjaDsgMiBlbnRyaWVzIGV4Y2VlZCAxIEtCIGxpbWl0ID0+IDIgYmluc1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0geyBrMTogJ3gnLnJlcGVhdCg2MDApLCBrMjogJ3knLnJlcGVhdCg2MDApIH07XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soUk9PVCkucHV0KCcvYXBpL3YyL3VzZXIva2V5Y2hhaW5zJykudHdpY2UoKS5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGF3YWl0IHJ1bkJhdGNoZXMoa2V5Y2hhaW5zLCB7fSwgMSk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHJpZXMgYSBmYWlsZWQgYmF0Y2ggYW5kIHN1Y2NlZWRzIG9uIHRoZSBzZWNvbmQgYXR0ZW1wdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVCkucHV0KCcvYXBpL3YyL3VzZXIva2V5Y2hhaW5zJykucmVwbHkoNTAwLCB7IGVycm9yOiAnaW50ZXJuYWwgZXJyb3InIH0pO1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS5yZXBseSgyMDAsIHt9KTtcbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGF3YWl0IHJ1bkJhdGNoZXMoeyBrMTogJ3ZhbHVlJyB9LCB7fSwgMTAyNCwgMyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIGFmdGVyIGV4aGF1c3RpbmcgYWxsIHJldHJpZXMgb24gcGVyc2lzdGVudCBIVFRQIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVCkucHV0KCcvYXBpL3YyL3VzZXIva2V5Y2hhaW5zJykudGltZXMoMykucmVwbHkoNTAwLCB7IGVycm9yOiAnaW50ZXJuYWwgZXJyb3InIH0pO1xuICAgICAgbGV0IHRocm93bkVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHJ1bkJhdGNoZXMoeyBrMTogJ3ZhbHVlJyB9LCB7fSwgMTAyNCwgMyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93bkVycm9yID0gZTtcbiAgICAgIH1cbiAgICAgIHRocm93bkVycm9yIS5tZXNzYWdlLnNob3VsZC5tYXRjaCgvZmFpbGVkIGFmdGVyIDMgcmV0cmllcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBhZnRlciBleGhhdXN0aW5nIGFsbCByZXRyaWVzIHdoZW4gdGhlIHNlcnZlciByZXBvcnRzIGZhaWxlZCBrZXljaGFpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpXG4gICAgICAgIC5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKVxuICAgICAgICAudGltZXMoMylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBmYWlsZWQ6IHsgdjE6IHsgazE6ICdlbmNyeXB0aW9uIGVycm9yJyB9IH0gfSk7XG4gICAgICBsZXQgdGhyb3duRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7IGsxOiAndmFsdWUnIH0sIHt9LCAxMDI0LCAzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3duRXJyb3IgPSBlO1xuICAgICAgfVxuICAgICAgdGhyb3duRXJyb3IhLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9oYWQgZmFpbGVkIGtleWNoYWlucy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lzc3VlcyBvbmUgZW1wdHkgUFVUIHdoZW4gYm90aCBrZXljaGFpbiBtYXBzIGFyZSBlbXB0eScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnLCB7IGtleWNoYWluczoge30sIHYyX2tleWNoYWluczoge30gfSkucmVwbHkoMjAwLCB7fSk7XG4gICAgICBhd2FpdCBydW5CYXRjaGVzKHt9LCB7fSwgMTAyNCk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2hhbmdlUGFzc3dvcmQgYmF0Y2hpbmcgZmxvdycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBST09UID0gJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnO1xuICAgIGxldCBiaXRnbzogQml0R29BUEk7XG4gICAgbGV0IHNhbmRib3g6IHNpbm9uLlNpbm9uU2FuZGJveDtcbiAgICBsZXQgdjFVcGRhdGVQYXNzd29yZFN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBsZXQgdjJVcGRhdGVQYXNzd29yZFN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcblxuICAgICAgY29uc3Qgc3RyYXRlZ3k6IElIbWFjQXV0aFN0cmF0ZWd5ID0ge1xuICAgICAgICBjYWxjdWxhdGVSZXF1ZXN0SGVhZGVyczogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoeyBobWFjOiAnaG1hYycsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgdG9rZW5IYXNoOiAnaGFzaCcgfSksXG4gICAgICAgIHZlcmlmeVJlc3BvbnNlOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgICAgICBleHBlY3RlZEhtYWM6ICdobWFjJyxcbiAgICAgICAgICBzaWduYXR1cmVTdWJqZWN0OiAnJyxcbiAgICAgICAgICBpc0luUmVzcG9uc2VWYWxpZGl0eVdpbmRvdzogdHJ1ZSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25UaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICB9KSxcbiAgICAgICAgY2FsY3VsYXRlSE1BQzogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoJ2hhc2hlZC1wdycpLFxuICAgICAgICBzZXRUb2tlbjogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoKSxcbiAgICAgICAgY2xlYXJUb2tlbjogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoKSxcbiAgICAgIH07XG5cbiAgICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG4gICAgICAoYml0Z28gYXMgYW55KS5fdXNlciA9IHsgdXNlcm5hbWU6ICd0ZXN0QGJpdGdvLmNvbScgfTtcblxuICAgICAgc2FuZGJveC5zdHViKGJpdGdvLCAndmVyaWZ5UGFzc3dvcmQnKS5yZXNvbHZlcyh0cnVlKTtcblxuICAgICAgdjFVcGRhdGVQYXNzd29yZFN0dWIgPSBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7IGtleWNoYWluczogeyBrMTogJ3YxZW5jJyB9LCB2ZXJzaW9uOiAyNSB9KTtcbiAgICAgIHNhbmRib3guc3R1YihiaXRnbywgJ2tleWNoYWlucycpLnJldHVybnMoe1xuICAgICAgICB1cGRhdGVQYXNzd29yZDogdjFVcGRhdGVQYXNzd29yZFN0dWIsXG4gICAgICB9IGFzIGFueSk7XG5cbiAgICAgIHYyVXBkYXRlUGFzc3dvcmRTdHViID0gc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoeyB2MmsxOiAndjJlbmMnIH0pO1xuICAgICAgc2FuZGJveC5zdHViKGJpdGdvLCAnY29pbicpLnJldHVybnMoe1xuICAgICAgICBrZXljaGFpbnM6ICgpID0+ICh7XG4gICAgICAgICAgdXBkYXRlUGFzc3dvcmQ6IHYyVXBkYXRlUGFzc3dvcmRTdHViLFxuICAgICAgICB9KSxcbiAgICAgIH0gYXMgYW55KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBQVVQgL3VzZXIva2V5Y2hhaW5zIGFuZCBQT1NUIC91c2VyL2NoYW5nZXBhc3N3b3JkIHdpdGhvdXQga2V5Y2hhaW5zIHdoZW4gYmF0Y2hpbmcgaXMgZW5hYmxlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKVxuICAgICAgICAucXVlcnkodHJ1ZSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IHRydWUsIG1heEJhdGNoU2l6ZUtCOiA5MDAgfSk7XG5cbiAgICAgIGNvbnN0IGJhdGNoUHV0U2NvcGUgPSBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCBjaGFuZ2VQYXNzU2NvcGUgPSBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhYm9keS5rZXljaGFpbnMgJiYgIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHsgb2xkUGFzc3dvcmQ6ICdvbGRwdycsIG5ld1Bhc3N3b3JkOiAnbmV3cHcnIH0pO1xuXG4gICAgICBiYXRjaFB1dFNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBjaGFuZ2VQYXNzU2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzdGFnZXMgYW4gZW1wdHkgYmF0Y2ggYW5kIGNoYW5nZXMgcGFzc3dvcmQgd2hlbiBubyBrZXljaGFpbnMgYXJlIHJlLWVuY3J5cHRhYmxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdjFVcGRhdGVQYXNzd29yZFN0dWIucmVzb2x2ZXMoeyBrZXljaGFpbnM6IHt9LCB2ZXJzaW9uOiAyNSB9KTtcbiAgICAgIHYyVXBkYXRlUGFzc3dvcmRTdHViLnJlc29sdmVzKHt9KTtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKVxuICAgICAgICAucXVlcnkodHJ1ZSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IHRydWUsIG1heEJhdGNoU2l6ZUtCOiA5MDAgfSk7XG4gICAgICBjb25zdCBiYXRjaFB1dFNjb3BlID0gbm9jayhST09UKVxuICAgICAgICAucHV0KCcvYXBpL3YyL3VzZXIva2V5Y2hhaW5zJywgeyBrZXljaGFpbnM6IHt9LCB2Ml9rZXljaGFpbnM6IHt9IH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGNoYW5nZVBhc3NTY29wZSA9IG5vY2soUk9PVClcbiAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9jaGFuZ2VwYXNzd29yZCcsIChib2R5OiBhbnkpID0+ICFib2R5LmtleWNoYWlucyAmJiAhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHsgb2xkUGFzc3dvcmQ6ICdvbGRwdycsIG5ld1Bhc3N3b3JkOiAnbmV3cHcnIH0pO1xuICAgICAgYmF0Y2hQdXRTY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgY2hhbmdlUGFzc1Njb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2VuZHMga2V5Y2hhaW5zIGluIHRoZSBQT1NUIGJvZHkgKGxlZ2FjeSBmbG93KSB3aGVuIHRoZSBzZXJ2ZXIgZGlzYWJsZXMgYmF0Y2hpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKS5xdWVyeSh0cnVlKS5yZXBseSgyMDAsIHsgaXNCYXRjaGluZ0Zsb3dFbmFibGVkOiBmYWxzZSB9KTtcblxuICAgICAgY29uc3QgbGVnYWN5U2NvcGUgPSBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhIWJvZHkua2V5Y2hhaW5zICYmICEhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY2hhbmdlUGFzc3dvcmQoeyBvbGRQYXNzd29yZDogJ29sZHB3JywgbmV3UGFzc3dvcmQ6ICduZXdwdycgfSk7XG5cbiAgICAgIGxlZ2FjeVNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFsbHMgYmFjayB0byBsZWdhY3kgZmxvdyB3aGVuIHRoZSBiYXRjaGluZyBjaGVjayByZXF1ZXN0IGZhaWxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JykucXVlcnkodHJ1ZSkucmVwbHkoNTAzLCB7IGVycm9yOiAnc2VydmljZSB1bmF2YWlsYWJsZScgfSk7XG5cbiAgICAgIGNvbnN0IGxlZ2FjeVNjb3BlID0gbm9jayhST09UKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL2NoYW5nZXBhc3N3b3JkJywgKGJvZHk6IGFueSkgPT4gISFib2R5LmtleWNoYWlucyAmJiAhIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHsgb2xkUGFzc3dvcmQ6ICdvbGRwdycsIG5ld1Bhc3N3b3JkOiAnbmV3cHcnIH0pO1xuXG4gICAgICBsZWdhY3lTY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZvcndhcmRzIGVuY3J5cHRpb25WZXJzaW9uIHRvIGJvdGggdjEgYW5kIHYyIGtleWNoYWlucygpLnVwZGF0ZVBhc3N3b3JkIGNhbGxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JykucXVlcnkodHJ1ZSkucmVwbHkoMjAwLCB7IGlzQmF0Y2hpbmdGbG93RW5hYmxlZDogZmFsc2UgfSk7XG4gICAgICBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhIWJvZHkua2V5Y2hhaW5zICYmICEhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY2hhbmdlUGFzc3dvcmQoeyBvbGRQYXNzd29yZDogJ29sZHB3JywgbmV3UGFzc3dvcmQ6ICduZXdwdycsIGVuY3J5cHRpb25WZXJzaW9uOiAyIH0pO1xuXG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKHYxVXBkYXRlUGFzc3dvcmRTdHViLCB7IGVuY3J5cHRpb25WZXJzaW9uOiAyIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaCh2MlVwZGF0ZVBhc3N3b3JkU3R1YiwgeyBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hhcmVzIG9uZSBlbmNyeXB0aW9uIHNlc3Npb24gYWNyb3NzIGtleWNoYWluIHBhc3N3b3JkIHVwZGF0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKS5xdWVyeSh0cnVlKS5yZXBseSgyMDAsIHsgaXNCYXRjaGluZ0Zsb3dFbmFibGVkOiBmYWxzZSB9KTtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9jaGFuZ2VwYXNzd29yZCcsIChib2R5OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJ2tleWNoYWlucycgaW4gYm9keSAmJiAndjJfa2V5Y2hhaW5zJyBpbiBib2R5O1xuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSBzYW5kYm94LnN0dWIoKTtcbiAgICAgIGNvbnN0IHNlc3Npb246IElFbmNyeXB0aW9uU2Vzc2lvbiA9IHtcbiAgICAgICAgZW5jcnlwdDogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoJ3Nlc3Npb24tZW5jcnlwdGVkJyksXG4gICAgICAgIGRlY3J5cHQ6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCdzZXNzaW9uLWRlY3J5cHRlZCcpLFxuICAgICAgICBkZXN0cm95LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyZWF0ZVNlc3Npb24gPSBzYW5kYm94LnN0dWIoYml0Z28sICdjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbicpLnJlc29sdmVzKHNlc3Npb24pO1xuXG4gICAgICBhd2FpdCBiaXRnby5jaGFuZ2VQYXNzd29yZCh7IG9sZFBhc3N3b3JkOiAnb2xkcHcnLCBuZXdQYXNzd29yZDogJ25ld3B3JywgZW5jcnlwdGlvblZlcnNpb246IDIgfSk7XG5cbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGNyZWF0ZVNlc3Npb24pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhFeGFjdGx5KGNyZWF0ZVNlc3Npb24sICduZXdwdycsIDIpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaCh2MVVwZGF0ZVBhc3N3b3JkU3R1Yiwge1xuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgICAgZW5jcnlwdGlvblNlc3Npb246IHNlc3Npb24sXG4gICAgICB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2godjJVcGRhdGVQYXNzd29yZFN0dWIsIHtcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgICAgIGVuY3J5cHRpb25TZXNzaW9uOiBzZXNzaW9uLFxuICAgICAgfSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShkZXN0cm95KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZVVzZXJFY2RoS2V5Y2hhaW4gLSBlbmNyeXB0aW9uVmVyc2lvbiB0aHJlYWRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUk9PVCA9ICdodHRwczovL2FwcC5iaXRnby10ZXN0LmNvbSc7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGVuY3J5cHRpb25WZXJzaW9uOiAyIHRvIGVuY3J5cHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0QXN5bmNTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdlbmNyeXB0Jyk7XG4gICAgICBub2NrKFJPT1QpLnBvc3QoJy9hcGkvdjEva2V5Y2hhaW4nKS5yZXBseSgyMDAsIHsgeHB1YjogJ3hwdWIxMjMnLCBpZDogJ2tleS1pZCcgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNyZWF0ZVVzZXJFY2RoS2V5Y2hhaW4oJ2xvZ2luUGFzc3dvcmQnLCAyKTtcblxuICAgICAgYXNzZXJ0Lm9rKGVuY3J5cHRBc3luY1NweS5jYWxsZWRPbmNlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNyeXB0QXN5bmNTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uZW5jcnlwdGlvblZlcnNpb24sIDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBlbmNyeXB0aW9uVmVyc2lvbjogdW5kZWZpbmVkIHdoZW4gbm90IHNldCAoZGVmYXVsdHMgdG8gdjEpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZW5jcnlwdEFzeW5jU3B5ID0gc2lub24uc3B5KGJpdGdvLCAnZW5jcnlwdCcpO1xuICAgICAgbm9jayhST09UKS5wb3N0KCcvYXBpL3YxL2tleWNoYWluJykucmVwbHkoMjAwLCB7IHhwdWI6ICd4cHViMTIzJywgaWQ6ICdrZXktaWQnIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5jcmVhdGVVc2VyRWNkaEtleWNoYWluKCdsb2dpblBhc3N3b3JkJyk7XG5cbiAgICAgIGFzc2VydC5vayhlbmNyeXB0QXN5bmNTcHkuY2FsbGVkT25jZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdEFzeW5jU3B5LmZpcnN0Q2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3BsaXRTZWNyZXQgLSBlbmNyeXB0aW9uVmVyc2lvbiB0aHJlYWRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGVuY3J5cHRpb25WZXJzaW9uOiAyIHRvIGV2ZXJ5IGVuY3J5cHQgc2hhcmQgY2FsbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRBc3luY1NweSA9IHNpbm9uLnNweShiaXRnbywgJ2VuY3J5cHQnKTtcbiAgICAgIGNvbnN0IHBhc3N3b3JkcyA9IFsncHcxJywgJ3B3MicsICdwdzMnXTtcblxuICAgICAgYXdhaXQgYml0Z28uc3BsaXRTZWNyZXQoe1xuICAgICAgICBzZWVkOiAnYScucmVwZWF0KDY0KSxcbiAgICAgICAgcGFzc3dvcmRzLFxuICAgICAgICBtOiAyLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdEFzeW5jU3B5LmNhbGxDb3VudCwgMywgJ3Nob3VsZCBlbmNyeXB0IGVhY2ggc2hhcmQnKTtcbiAgICAgIGZvciAoY29uc3QgY2FsbCBvZiBlbmNyeXB0QXN5bmNTcHkuZ2V0Q2FsbHMoKSkge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLCAyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgZW5jcnlwdGlvblZlcnNpb246IHVuZGVmaW5lZCB3aGVuIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0QXN5bmNTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdlbmNyeXB0Jyk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnNwbGl0U2VjcmV0KHtcbiAgICAgICAgc2VlZDogJ2InLnJlcGVhdCg2NCksXG4gICAgICAgIHBhc3N3b3JkczogWydwdzEnLCAncHcyJ10sXG4gICAgICAgIG06IDIsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRBc3luY1NweS5jYWxsQ291bnQsIDIpO1xuICAgICAgZm9yIChjb25zdCBjYWxsIG9mIGVuY3J5cHRBc3luY1NweS5nZXRDYWxscygpKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjYWxsLmFyZ3NbMF0uZW5jcnlwdGlvblZlcnNpb24sIHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd3YWxsZXRzKCkgdjEgZmFjYWRlJywgZnVuY3Rpb24gKCkge1xuICBpdCgncmV0dXJucyBCaXRHb0FwaVYxV2FsbGV0cyB3aXRoIGJpdGdvIHJlZmVyZW5jZSBhbmQgYWxsIHByb3RvdHlwZSBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAndGVzdCcgfSk7XG4gICAgY29uc3Qgd2FsbGV0cyA9IGJpdGdvLndhbGxldHMoKTtcbiAgICB3YWxsZXRzLmJpdGdvLnNob3VsZC5lcXVhbChiaXRnbyk7XG4gICAgd2FsbGV0cy5saXN0LnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gICAgd2FsbGV0cy5nZXQuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmdldFdhbGxldC5zaG91bGQuYmUuYS5GdW5jdGlvbigpO1xuICAgIHdhbGxldHMuYWRkLnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gICAgd2FsbGV0cy5yZW1vdmUuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmFjY2VwdFNoYXJlLnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gICAgd2FsbGV0cy5jcmVhdGVXYWxsZXRXaXRoS2V5Y2hhaW5zLnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gICAgd2FsbGV0cy5jcmVhdGVGb3J3YXJkV2FsbGV0LnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gICAgd2FsbGV0cy5jcmVhdGVLZXkuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmxpc3RJbnZpdGVzLnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gICAgd2FsbGV0cy5jYW5jZWxJbnZpdGUuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmxpc3RTaGFyZXMuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmdldFNoYXJlLnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gICAgd2FsbGV0cy51cGRhdGVTaGFyZS5zaG91bGQuYmUuYS5GdW5jdGlvbigpO1xuICAgIHdhbGxldHMuY2FuY2VsU2hhcmUuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLnJlc2VuZFNoYXJlSW52aXRlLnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gIH0pO1xufSk7XG4iXX0=
1339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Z29BUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYml0Z29BUEkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsa0JBQWdCO0FBQ2hCLGlEQUE4QztBQUM5Qyw2Q0FBeUM7QUFDekMsNkNBQStCO0FBQy9CLGdEQUF3QjtBQUt4QixRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtRQUM3QyxFQUFFLENBQUMsaURBQWlELEVBQUU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBUSxDQUFDO2dCQUN6QixHQUFHLEVBQUUsUUFBUTtnQkFDYixhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyx5QkFBeUIsRUFBRSxJQUFJO2FBQ2hDLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3hELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFO1lBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQVEsQ0FBQztnQkFDekIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsYUFBYSxFQUFFLDJCQUEyQjtnQkFDMUMseUJBQXlCLEVBQUUsS0FBSzthQUNqQyxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUN4RCxLQUFLLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0Qs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Q0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnLi4vLi4vc3JjL2JpdGdvQVBJJztcbmltcG9ydCB7IFByb3h5QWdlbnQgfSBmcm9tICdwcm94eS1hZ2VudCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgbm9jayBmcm9tICdub2NrJztcbmltcG9ydCB0eXBlIHsgSUhtYWNBdXRoU3RyYXRlZ3kgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstaG1hYyc7XG5pbXBvcnQgdHlwZSB7IElFbmNyeXB0aW9uU2Vzc2lvbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGFzc3dvcmRSb3RhdGlvblByb2dyZXNzIH0gZnJvbSAnLi4vLi4vc3JjL3R5cGVzJztcblxuZGVzY3JpYmUoJ0NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCBpcyBlbmFibGVkIGV4cGxpY2l0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgICAgY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCcpO1xuICAgICAgYml0Z28uY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCBpcyBkaXNhYmxlZCBleHBsaWNpdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIGNvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGJpdGdvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb29raWVzUHJvcGFnYXRpb25FbmFibGVkJyk7XG4gICAgICBiaXRnby5jb29raWVzUHJvcGFnYXRpb25FbmFibGVkLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29va2llc1Byb3BhZ2F0aW9uRW5hYmxlZCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Nvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQnKTtcbiAgICAgIGJpdGdvLmNvb2tpZXNQcm9wYWdhdGlvbkVuYWJsZWQuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlcXVlc3RJZFByZWZpeCBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcmVwZW5kIHJlcXVlc3RJZFByZWZpeCB0byBSZXF1ZXN0LUlEIGhlYWRlciB3aGVuIHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICByZXF1ZXN0SWRQcmVmaXg6ICd0ZXN0LXByZWZpeC0nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgIC5tYXRjaEhlYWRlcignUmVxdWVzdC1JRCcsIC9edGVzdC1wcmVmaXgtLylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdvaycgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICByZXFJZDoge1xuICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAnMTIzNDUnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtb2RpZnkgUmVxdWVzdC1JRCBoZWFkZXIgd2hlbiByZXF1ZXN0SWRQcmVmaXggaXMgbm90IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgIC5tYXRjaEhlYWRlcignUmVxdWVzdC1JRCcsIC9eMTIzNDUkLylcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdvaycgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnBpbmcoe1xuICAgICAgICByZXFJZDoge1xuICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiAnMTIzNDUnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmb3JtYXQgUmVxdWVzdC1JRCB3aXRoIHByZWZpeCBhbmQgbnVtZXJpYyBzZXF1ZW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICByZXF1ZXN0SWRQcmVmaXg6ICdteWFwcC12MS0nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgIC5tYXRjaEhlYWRlcignUmVxdWVzdC1JRCcsICdteWFwcC12MS10cmFjZS0xMjMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICd0cmFjZS0xMjMnLFxuICAgICAgICAgIGluYzogKCkgPT4ge1xuICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBlbXB0eSBzdHJpbmcgcHJlZml4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIHJlcXVlc3RJZFByZWZpeDogJycsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9waW5nJylcbiAgICAgICAgLm1hdGNoSGVhZGVyKCdSZXF1ZXN0LUlEJywgJ2FiYy0xMjMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ29rJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28ucGluZyh7XG4gICAgICAgIHJlcUlkOiB7XG4gICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICdhYmMtMTIzJyxcbiAgICAgICAgICBpbmM6ICgpID0+IHtcbiAgICAgICAgICAgIC8qIG1vY2sgKi9cbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2h0dHAgcHJveHkgYWdlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2h0dHAgcHJveHkgYWdlbnQgc2hhbGwgYmUgY3JlYXRlZCB3aGVuIHByb3h5KGN1c3RvbVByb3h5YWdlbnQpIGlzIHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGN1c3RvbVByb3h5QWdlbnQgPSBuZXcgUHJveHlBZ2VudCh7XG4gICAgICAgIGdldFByb3h5Rm9yVXJsOiAoKSA9PiAnaHR0cDovL2xvY2FsaG9zdDozMDAwJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIGN1c3RvbVByb3h5QWdlbnQsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28uc2hvdWxkLmhhdmUucHJvcGVydHkoJ19jdXN0b21Qcm94eUFnZW50JywgY3VzdG9tUHJveHlBZ2VudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYml0Z28gYXBpIGlzIHN0aWxsIGluaXRpYXRlZCB3aGVuIHByb3h5KGN1c3RvbVByb3h5QWdlbnQpIGlzIG5vdCBzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnX2N1c3RvbVByb3h5QWdlbnQnLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5QWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSB2ZXJpZnkgYSBiYXNlNTggYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICB9KTtcblxuICAgICAgYml0Z28udmVyaWZ5QWRkcmVzcyh7IGFkZHJlc3M6ICcyTjZwYVQyVFU0TjFYcGFaakppQXBXSlhvZXlyTDNVV3BrWicgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIGJlY2gzMiBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgIH0pO1xuXG4gICAgICBiaXRnb1xuICAgICAgICAudmVyaWZ5QWRkcmVzcyh7IGFkZHJlc3M6ICd0YjFxZ3V6eWs0dzZrYXF0cHNjenM1YWowdzhyNzU5OGpxMzZlZ204ZTk4d3FwaDNyd21leDY4c2VzbGdzZycgfSlcbiAgICAgICAgLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1cmwnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgVVJMIGZvciB2ZXJzaW9uIDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ3Rlc3QnLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCBleHBlY3RlZFVybCA9ICdodHRwczovL3Rlc3QuYml0Z28uY29tL2FwaS92MS90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYml0Z28udXJsKHBhdGgsIDEpO1xuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChleHBlY3RlZFVybCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBVUkwgZm9yIHZlcnNpb24gMicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAndGVzdCcsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL3Rlc3QuYml0Z28uY29tJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGF0aCA9ICcvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20vYXBpL3YyL3Rlc3QtcGF0aCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiaXRnby51cmwocGF0aCwgMik7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKGV4cGVjdGVkVXJsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IFVSTCBmb3IgdmVyc2lvbiAzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXRoID0gJy90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRVcmwgPSAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjMvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLnVybChwYXRoLCAzKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRVcmwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIHZlcnNpb24gMSBpZiBubyB2ZXJzaW9uIGlzIHByb3ZpZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICd0ZXN0JyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vdGVzdC5iaXRnby5jb20nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXRoID0gJy90ZXN0LXBhdGgnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRVcmwgPSAnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjEvdGVzdC1wYXRoJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJpdGdvLnVybChwYXRoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoZXhwZWN0ZWRVcmwpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVjcnlwdEtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIG5vIHBhcmFtcyBhcmUgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBjYWxsaW5nIHdpdGggbm8gcGFyYW1zIGZvciB0ZXN0XG4gICAgICBhd2FpdCBiaXRnby5kZWNyeXB0S2V5cygpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ01pc3NpbmcgcGFyYW1ldGVyOiB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnMgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJpdGdvXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IG1pc3NpbmcgcmVxdWlyZWQgcGFyYW1cbiAgICAgICAgLmRlY3J5cHRLZXlzKHsgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ01pc3NpbmcgcGFyYW1ldGVyOiB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHBhc3N3b3JkIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtXG4gICAgICBhd2FpdCBiaXRnby5kZWNyeXB0S2V5cyh7IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtdIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ01pc3NpbmcgcGFyYW1ldGVyOiBwYXNzd29yZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB3YWxsZXRJZEVuY3J5cHRlZEtleVBhaXJzIGlzIG5vdCBhbiBhcnJheScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJpdGdvXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IHByb3ZpZGluZyB3cm9uZyB0eXBlXG4gICAgICAgIC5kZWNyeXB0S2V5cyh7IHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6ICdub3QgYW4gYXJyYXknLCBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBhcnJheSBmb3IgZW1wdHkgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmRlY3J5cHRLZXlzKHsgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW10sIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5lbXB0eSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBhbnkgd2FsbGV0SWQgaXMgbWlzc2luZyBvciBub3QgYSBzdHJpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiaXRnb1xuICAgICAgICAuZGVjcnlwdEtleXMoe1xuICAgICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IG1pc3Npbmcgd2FsbGV0SWRcbiAgICAgICAgICAgIHsgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2VhY2gga2V5IHBhaXIgbXVzdCBoYXZlIGEgc3RyaW5nIHdhbGxldElkJyk7XG5cbiAgICAgIGF3YWl0IGJpdGdvXG4gICAgICAgIC5kZWNyeXB0S2V5cyh7XG4gICAgICAgICAgd2FsbGV0SWRFbmNyeXB0ZWRLZXlQYWlyczogW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGludGVudGlvbmFsbHkgcHJvdmlkaW5nIHdyb25nIHR5cGVcbiAgICAgICAgICAgIHsgd2FsbGV0SWQ6IDEyMywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2VhY2gga2V5IHBhaXIgbXVzdCBoYXZlIGEgc3RyaW5nIHdhbGxldElkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIGFueSBlbmNyeXB0ZWRQcnYgaXMgbWlzc2luZyBvciBub3QgYSBzdHJpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiaXRnb1xuICAgICAgICAuZGVjcnlwdEtleXMoe1xuICAgICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IG1pc3NpbmcgZW5jcnlwdGVkUHJ2XG4gICAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2VhY2gga2V5IHBhaXIgbXVzdCBoYXZlIGEgc3RyaW5nIGVuY3J5cHRlZFBydicpO1xuXG4gICAgICBhd2FpdCBiaXRnb1xuICAgICAgICAuZGVjcnlwdEtleXMoe1xuICAgICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpbnRlbnRpb25hbGx5IHByb3ZpZGluZyB3cm9uZyB0eXBlXG4gICAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLCBlbmNyeXB0ZWRQcnY6IDEyMyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZDEyMycsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdlYWNoIGtleSBwYWlyIG11c3QgaGF2ZSBhIHN0cmluZyBlbmNyeXB0ZWRQcnYnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlY3J5cHRLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBiaXRnbzogQml0R29BUEk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAndGVzdCcgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gd2FsbGV0SWRzIG9mIGtleXMgdGhhdCBmYWlsZWQgdG8gZGVjcnlwdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY3J5cHRBc3luY1N0dWIgPSBzaW5vbi5zdHViKGJpdGdvLCAnZGVjcnlwdCcpO1xuICAgICAgZGVjcnlwdEFzeW5jU3R1Yi5vbkZpcnN0Q2FsbCgpLnJlc29sdmVzKCdkZWNyeXB0ZWQta2V5LTEnKTtcbiAgICAgIGRlY3J5cHRBc3luY1N0dWIub25TZWNvbmRDYWxsKCkucmVqZWN0cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0xJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMicsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTInIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICByZXN1bHRbMF0uc2hvdWxkLmVxdWFsKCd3YWxsZXQtaWQtMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgcHJvY2VzcyBtdWx0aXBsZSB3YWxsZXQga2V5cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY3J5cHRBc3luY1N0dWIgPSBzaW5vbi5zdHViKGJpdGdvLCAnZGVjcnlwdCcpO1xuICAgICAgZGVjcnlwdEFzeW5jU3R1YlxuICAgICAgICAud2l0aEFyZ3MoeyBpbnB1dDogJ2VuY3J5cHRlZC1kYXRhLTInLCBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KVxuICAgICAgICAucmVqZWN0cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuICAgICAgZGVjcnlwdEFzeW5jU3R1YlxuICAgICAgICAud2l0aEFyZ3MoeyBpbnB1dDogJ2VuY3J5cHRlZC1kYXRhLTQnLCBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyB9KVxuICAgICAgICAucmVqZWN0cyhuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZmFpbGVkJykpO1xuICAgICAgZGVjcnlwdEFzeW5jU3R1Yi5yZXNvbHZlcygnc3VjY2VzcycpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiaXRnby5kZWNyeXB0S2V5cyh7XG4gICAgICAgIHdhbGxldElkRW5jcnlwdGVkS2V5UGFpcnM6IFtcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTEnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS0xJyB9LFxuICAgICAgICAgIHsgd2FsbGV0SWQ6ICd3YWxsZXQtaWQtMicsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1kYXRhLTInIH0sXG4gICAgICAgICAgeyB3YWxsZXRJZDogJ3dhbGxldC1pZC0zJywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLWRhdGEtMycgfSxcbiAgICAgICAgICB7IHdhbGxldElkOiAnd2FsbGV0LWlkLTQnLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtZGF0YS00JyB9LFxuICAgICAgICBdLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICBkZWNyeXB0QXN5bmNTdHViLmNhbGxDb3VudC5zaG91bGQuZXF1YWwoNCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgICAgcmVzdWx0LnNob3VsZC5jb250YWluRGVlcChbJ3dhbGxldC1pZC0yJywgJ3dhbGxldC1pZC00J10pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVXNlci1BZ2VudCBoZWFkZXIgYmFzZWQgb24gZW52aXJvbm1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2V0IFVzZXItQWdlbnQgaGVhZGVyIHdoZW4gcnVubmluZyBpbiBOb2RlLmpzICh0eXBlb2Ygd2luZG93ID09PSB1bmRlZmluZWQpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICAgIHVzZXJBZ2VudDogJ1Rlc3RBZ2VudC8xLjAnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEVuc3VyZSB3ZSdyZSBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnQgYnkgdmVyaWZ5aW5nIHdpbmRvdyBpcyB1bmRlZmluZWRcbiAgICAgICh0eXBlb2Ygd2luZG93KS5zaG91bGQuZXF1YWwoJ3VuZGVmaW5lZCcpO1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL3BpbmcnKVxuICAgICAgICAubWF0Y2hIZWFkZXIoJ1VzZXItQWdlbnQnLCAnVGVzdEFnZW50LzEuMCcpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgc3RhdHVzOiAnb2snIH0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgcmVxSWQ6IHtcbiAgICAgICAgICB0b1N0cmluZzogKCkgPT4gJ3Rlc3QtMTIzJyxcbiAgICAgICAgICBpbmM6ICgpID0+IHtcbiAgICAgICAgICAgIC8qIG1vY2sgKi9cbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3Qgc2V0IFVzZXItQWdlbnQgaGVhZGVyIHdoZW4gcnVubmluZyBpbiBicm93c2VyICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWQpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gTW9jayB0aGUgd2luZG93IG9iamVjdCB0byBzaW11bGF0ZSBicm93c2VyIGVudmlyb25tZW50XG4gICAgICBjb25zdCB3aW5kb3dTdHViID0geyBsb2NhdGlvbjogJ21vY2snIH07XG4gICAgICAoZ2xvYmFsIGFzIGFueSkud2luZG93ID0gd2luZG93U3R1YjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICAgIHVzZXJBZ2VudDogJ1Rlc3RBZ2VudC8xLjAnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAgIC5nZXQoJy9hcGkvdjEvcGluZycpXG4gICAgICAgICAgLnJlcGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFZlcmlmeSBVc2VyLUFnZW50IGhlYWRlciBpcyBOT1Qgc2V0IHRvIG91ciBjdXN0b20gdmFsdWVcbiAgICAgICAgICAgIGNvbnN0IHVzZXJBZ2VudCA9IHRoaXMucmVxLmhlYWRlcnNbJ3VzZXItYWdlbnQnXTtcbiAgICAgICAgICAgIGlmICh1c2VyQWdlbnQgJiYgdXNlckFnZW50LmluY2x1ZGVzKCdUZXN0QWdlbnQvMS4wJykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyLUFnZW50IHNob3VsZCBub3QgYmUgc2V0IGluIGJyb3dzZXIgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbMjAwLCB7IHN0YXR1czogJ29rJyB9XTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBiaXRnby5waW5nKHtcbiAgICAgICAgICByZXFJZDoge1xuICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+ICd0ZXN0LTEyMycsXG4gICAgICAgICAgICBpbmM6ICgpID0+IHtcbiAgICAgICAgICAgICAgLyogbW9jayAqL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIENsZWFuIHVwIHRoZSBnbG9iYWwgd2luZG93IG1vY2tcbiAgICAgICAgZGVsZXRlIChnbG9iYWwgYXMgYW55KS53aW5kb3c7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdobWFjQXV0aFN0cmF0ZWd5IHRva2VuIGxpZmVjeWNsZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBST09UID0gJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnO1xuXG4gICAgLy8gQnVpbGRzIGEgbW9jayBzdHJhdGVneSB3aG9zZSBzZXRUb2tlbiAvIGNsZWFyVG9rZW4gYXJlIHNpbm9uIHN0dWJzLlxuICAgIGZ1bmN0aW9uIG1ha2VTdHJhdGVneShvdmVycmlkZXM6IFBhcnRpYWw8SUhtYWNBdXRoU3RyYXRlZ3k+ID0ge30pOiB7XG4gICAgICBzdHJhdGVneTogSUhtYWNBdXRoU3RyYXRlZ3k7XG4gICAgICBzZXRUb2tlblN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICAgIGNsZWFyVG9rZW5TdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgfSB7XG4gICAgICBjb25zdCBzZXRUb2tlblN0dWIgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKTtcbiAgICAgIGNvbnN0IGNsZWFyVG9rZW5TdHViID0gc2lub24uc3R1YigpLnJlc29sdmVzKCk7XG4gICAgICBjb25zdCBzdHJhdGVneTogSUhtYWNBdXRoU3RyYXRlZ3kgPSB7XG4gICAgICAgIGNhbGN1bGF0ZVJlcXVlc3RIZWFkZXJzOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBobWFjOiAnaG1hYycsIHRpbWVzdGFtcDogMSwgdG9rZW5IYXNoOiAnaGFzaCcgfSksXG4gICAgICAgIHZlcmlmeVJlc3BvbnNlOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICAgICAgZXhwZWN0ZWRIbWFjOiAnaG1hYycsXG4gICAgICAgICAgc2lnbmF0dXJlU3ViamVjdDogJycsXG4gICAgICAgICAgaXNJblJlc3BvbnNlVmFsaWRpdHlXaW5kb3c6IHRydWUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uVGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgfSksXG4gICAgICAgIGNhbGN1bGF0ZUhNQUM6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnaGFzaGVkLXB3JyksXG4gICAgICAgIHNldFRva2VuOiBzZXRUb2tlblN0dWIsXG4gICAgICAgIGNsZWFyVG9rZW46IGNsZWFyVG9rZW5TdHViLFxuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiwgY2xlYXJUb2tlblN0dWIgfTtcbiAgICB9XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2F1dGhlbnRpY2F0ZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2NhbGxzIHNldFRva2VuIHdpdGggdGhlIGFjY2Vzc190b2tlbiByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgbm9jayhST09UKVxuICAgICAgICAgIC5wb3N0KCcvYXBpL2F1dGgvdjEvc2Vzc2lvbicpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgdXNlcjogeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nIH0sXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhteWFjY2Vzc3Rva2VuJyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBiaXRnby5hdXRoZW50aWNhdGUoeyB1c2VybmFtZTogJ3Rlc3RAZXhhbXBsZS5jb20nLCBwYXNzd29yZDogJ2h1bnRlcjInIH0pO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHNldFRva2VuU3R1Yi5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoJ3YyeG15YWNjZXNzdG9rZW4nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYXdhaXRzIHNldFRva2VuIGJlZm9yZSBtYWtpbmcgZW5zdXJlRWNkaEtleWNoYWluIHJlcXVlc3RzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUaGlzIGlzIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdDogaWYgc2V0VG9rZW4gaXMgbm90IGF3YWl0ZWQsIHRoZVxuICAgICAgICAvLyBzdHJhdGVneSdzIGtleSBtYXRlcmlhbCB3b24ndCBiZSByZWFkeSBiZWZvcmUgY2FsY3VsYXRlUmVxdWVzdEhlYWRlcnNcbiAgICAgICAgLy8gaXMgY2FsbGVkIGZvciB0aGUgR0VUIC91c2VyL3NldHRpbmdzIHJlcXVlc3QsIGFuZCBpdCB3b3VsZCB0aHJvdy5cbiAgICAgICAgbGV0IGtleVJlYWR5ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3kgfSA9IG1ha2VTdHJhdGVneSh7XG4gICAgICAgICAgc2V0VG9rZW46IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gU2ltdWxhdGUgbm9uLXRyaXZpYWwgYXN5bmMga2V5IGRlcml2YXRpb24gKGxpa2UgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkpLlxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldEltbWVkaWF0ZShyZXNvbHZlKSk7XG4gICAgICAgICAgICBrZXlSZWFkeSA9IHRydWU7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2FsY3VsYXRlUmVxdWVzdEhlYWRlcnM6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFrZXlSZWFkeSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRva2VuIGF2YWlsYWJsZS4gQ2FsbCBzZXRUb2tlbigpIG9yIHJlc3RvcmVUb2tlbigpIGZpcnN0LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaG1hYzogJ2htYWMnLCB0aW1lc3RhbXA6IERhdGUubm93KCksIHRva2VuSGFzaDogJ2hhc2gnIH07XG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAucG9zdCgnL2FwaS9hdXRoL3YxL3Nlc3Npb24nKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LFxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiAndjJ4bXl0b2tlbicsXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFRoZSBHRVQgL3VzZXIvc2V0dGluZ3MgcmVxdWVzdCBtYWRlIGJ5IGVuc3VyZVVzZXJFY2RoS2V5Y2hhaW5Jc0NyZWF0ZWRcbiAgICAgICAgLy8gbXVzdCBzdWNjZWVkIOKAlCBpdCB3b3VsZCB0aHJvdyBpZiBzZXRUb2tlbiB3YXNuJ3QgYXdhaXRlZCBmaXJzdC5cbiAgICAgICAgbm9jayhST09UKVxuICAgICAgICAgIC5nZXQoJy9hcGkvdjEvdXNlci9zZXR0aW5ncycpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgICAgc2V0dGluZ3M6IHsgZWNkaEtleWNoYWluOiAneHB1YjEyMycgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBiaXRnby5hdXRoZW50aWNhdGUoe1xuICAgICAgICAgIHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScsXG4gICAgICAgICAgcGFzc3dvcmQ6ICdodW50ZXIyJyxcbiAgICAgICAgICBlbnN1cmVFY2RoS2V5Y2hhaW46IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGtleVJlYWR5LnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhdXRoZW50aWNhdGVXaXRoUGFzc2tleSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRQYXNza2V5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZDogJ2NyZWRlbnRpYWwtaWQnLFxuICAgICAgICByYXdJZDogJ3Jhdy1pZCcsXG4gICAgICAgIHR5cGU6ICdwdWJsaWMta2V5JyxcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICBhdXRoZW50aWNhdG9yRGF0YTogJ2F1dGgtZGF0YScsXG4gICAgICAgICAgY2xpZW50RGF0YUpTT046ICdjbGllbnQtZGF0YScsXG4gICAgICAgICAgc2lnbmF0dXJlOiAnc2lnJyxcbiAgICAgICAgICB1c2VySGFuZGxlOiAndXNlci1oYW5kbGUtMTIzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnY2FsbHMgc2V0VG9rZW4gd2l0aCB0aGUgYWNjZXNzX3Rva2VuIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcblxuICAgICAgICBub2NrKFJPT1QpXG4gICAgICAgICAgLnBvc3QoJy9hcGkvYXV0aC92MS9zZXNzaW9uJylcbiAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3YyeHBhc3NrZXl0b2tlbicsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uYXV0aGVudGljYXRlV2l0aFBhc3NrZXkodmFsaWRQYXNza2V5KTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBzZXRUb2tlblN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKCd2MnhwYXNza2V5dG9rZW4nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NsZWFyQXN5bmMoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdjbGVhcnMgX3Rva2VuIGFuZCBjYWxscyBjbGVhclRva2VuIG9uIHRoZSBzdHJhdGVneScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgY2xlYXJUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhBY2Nlc3NUb2tlbih7IGFjY2Vzc1Rva2VuOiAndjJ4c29tZXRva2VuJyB9KTtcbiAgICAgICAgKGJpdGdvIGFzIGFueSkuX3Rva2VuLnNob3VsZC5lcXVhbCgndjJ4c29tZXRva2VuJyk7XG5cbiAgICAgICAgYXdhaXQgYml0Z28uY2xlYXJBc3luYygpO1xuXG4gICAgICAgICgoYml0Z28gYXMgYW55KS5fdG9rZW4gPT09IHVuZGVmaW5lZCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgY2xlYXJUb2tlblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncmVmcmVzaFRva2VuKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnY2FsbHMgc2V0VG9rZW4gd2l0aCB0aGUgbmV3IGFjY2Vzc190b2tlbiBmcm9tIHRoZSBPQXV0aCByZXNwb25zZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgc2V0VG9rZW5TdHViIH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgICAgY3VzdG9tUm9vdFVSSTogUk9PVCxcbiAgICAgICAgICBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgICAgICBjbGllbnRJZDogJ2NsaWVudC1pZCcsXG4gICAgICAgICAgY2xpZW50U2VjcmV0OiAnY2xpZW50LXNlY3JldCcsXG4gICAgICAgIH0pO1xuICAgICAgICAoYml0Z28gYXMgYW55KS5fcmVmcmVzaFRva2VuID0gJ29sZC1yZWZyZXNoLXRva2VuJztcblxuICAgICAgICBub2NrKFJPT1QpLnBvc3QoJy9vYXV0aC90b2tlbicpLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGFjY2Vzc190b2tlbjogJ3YyeG5ld3Rva2VuJyxcbiAgICAgICAgICByZWZyZXNoX3Rva2VuOiAnbmV3LXJlZnJlc2gtdG9rZW4nLFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBiaXRnby5yZWZyZXNoVG9rZW4oKTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBzZXRUb2tlblN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKCd2MnhuZXd0b2tlbicpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYXV0aGVudGljYXRlV2l0aEF1dGhDb2RlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnY2FsbHMgc2V0VG9rZW4gd2l0aCB0aGUgYWNjZXNzX3Rva2VuIGZyb20gdGhlIE9BdXRoIHJlc3BvbnNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgICBjdXN0b21Sb290VVJJOiBST09ULFxuICAgICAgICAgIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgICAgICAgIGNsaWVudElkOiAnY2xpZW50LWlkJyxcbiAgICAgICAgICBjbGllbnRTZWNyZXQ6ICdjbGllbnQtc2VjcmV0JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbm9jayhST09UKS5wb3N0KCcvb2F1dGgvdG9rZW4nKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICBhY2Nlc3NfdG9rZW46ICd2MnhhdXRoY29kZXRva2VuJyxcbiAgICAgICAgICByZWZyZXNoX3Rva2VuOiAncmVmcmVzaC10b2tlbicsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGVXaXRoQXV0aENvZGUgY2FsbHMgdGhpcy5tZSgpIGFmdGVyIHNldHRpbmcgdGhlIHRva2VuXG4gICAgICAgIG5vY2soUk9PVClcbiAgICAgICAgICAuZ2V0KCcvYXBpL3YxL3VzZXIvbWUnKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgIHVzZXI6IHsgdXNlcm5hbWU6ICd0ZXN0QGV4YW1wbGUuY29tJyB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhBdXRoQ29kZSh7IGF1dGhDb2RlOiAnbXktYXV0aC1jb2RlJyB9KTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBzZXRUb2tlblN0dWIuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKCd2MnhhdXRoY29kZXRva2VuJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzeW5jIHRva2VuLXNldHRpbmcgbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdhdXRoZW50aWNhdGVXaXRoQWNjZXNzVG9rZW4gZG9lcyBub3QgY2FsbCBzZXRUb2tlbiAoc3luY2hyb25vdXMg4oCUIGNhbGxlciBtdXN0IGludm9rZSBzZXRUb2tlbiBvbiB0aGUgc3RyYXRlZ3kgbWFudWFsbHkpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzZXRUb2tlblN0dWIgfSA9IG1ha2VTdHJhdGVneSgpO1xuICAgICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuXG4gICAgICAgIGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhBY2Nlc3NUb2tlbih7IGFjY2Vzc1Rva2VuOiAndjJ4c3luY3Rva2VuJyB9KTtcblxuICAgICAgICBzZXRUb2tlblN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdmcm9tSlNPTiBkb2VzIG5vdCBjYWxsIHNldFRva2VuIChzeW5jaHJvbm91cyDigJQgY2FsbGVyIG11c3QgaW52b2tlIHNldFRva2VuIG9uIHRoZSBzdHJhdGVneSBtYW51YWxseSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIHNldFRva2VuU3R1YiB9ID0gbWFrZVN0cmF0ZWd5KCk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG5cbiAgICAgICAgKGJpdGdvIGFzIGFueSkuZnJvbUpTT04oeyB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSwgdG9rZW46ICd2Mnhqc29udG9rZW4nIH0pO1xuXG4gICAgICAgIHNldFRva2VuU3R1Yi5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhZGRBY2Nlc3NUb2tlbigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRQYXJhbXMgPSB7XG4gICAgICAgIGxhYmVsOiAndGVzdC10b2tlbicsXG4gICAgICAgIHNjb3BlOiBbJ3dhbGxldF92aWV3X2FsbCddLFxuICAgICAgICBkdXJhdGlvbjogMzYwMCxcbiAgICAgIH07XG5cbiAgICAgIGl0KCdzaG91bGQgZm9yY2UgVjEgYXV0aCBhbmQgcmV0dXJuIHBsYWluIHRva2VuIHdoZW4gZWNkaFhwcnYgaXMgYWJzZW50LCBldmVuIGlmIGhtYWNBdXRoU3RyYXRlZ3kgaXMgYXV0aGVudGljYXRlZCAoU1NPL2VudGVycHJpc2UgdXNlcnMpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIFdDTi0xNzkwIC8gQU5ULTk2MzogSE1BQyByZXF1ZXN0IHNpZ25pbmcgYW5kIEVDREggcmVzcG9uc2VcbiAgICAgICAgLy8gZW5jcnlwdGlvbiBhcmUgb3J0aG9nb25hbC4gZm9yY2VWMUF1dGggdGVsbHMgdGhlIHNlcnZlciB0byByZXR1cm4gYSBwbGFpbnRleHQgdG9rZW5cbiAgICAgICAgLy8gaW5zdGVhZCBvZiBFQ0RILWVuY3J5cHRpbmcgaXQuIEl0IG11c3QgYmUgc2V0IHdoZW5ldmVyIGVjZGhYcHJ2IGlzIGFic2VudCxcbiAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBITUFDIHN0cmF0ZWd5IGlzIGFjdGl2ZS5cbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSB9ID0gbWFrZVN0cmF0ZWd5KHtcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHRydWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgICAgLy8gRG8gTk9UIHNldCBfZWNkaFhwcnYg4oCUIHNpbXVsYXRlcyBTU08vZW50ZXJwcmlzZSBzZXNzaW9uIChPa3RhLCBFbnRyYSwgZXRjLilcbiAgICAgICAgYml0Z28uYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuKHsgYWNjZXNzVG9rZW46ICd2MnhzdHJhdGVneXRva2VuJyB9KTtcblxuICAgICAgICBjb25zdCBzY29wZSA9IG5vY2soUk9PVCkucG9zdCgnL2FwaS9hdXRoL3YxL2FjY2Vzc3Rva2VuJykucmVwbHkoMjAwLCB7XG4gICAgICAgICAgdG9rZW46ICd2MnhuZXdwbGFpbnRva2VuJyxcbiAgICAgICAgICBsYWJlbDogJ3Rlc3QtdG9rZW4nLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiaXRnby5hZGRBY2Nlc3NUb2tlbih2YWxpZFBhcmFtcyk7XG5cbiAgICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgLy8gZm9yY2VWMUF1dGggTVVTVCBiZSBzZXQg4oCUIHNlcnZlciByZXR1cm5zIHBsYWludGV4dCB0b2tlbiBzaW5jZSB3ZSBoYXZlIG5vIGRlY3J5cHRpb24ga2V5XG4gICAgICAgIChyZXN1bHQgYXMgYW55KS53YXJuaW5nLnNob3VsZC5tYXRjaCgvcHJvdG9jb2wgZG93bmdyYWRlLyk7XG4gICAgICAgIHJlc3VsdC50b2tlbi5zaG91bGQuZXF1YWwoJ3YyeG5ld3BsYWludG9rZW4nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG5vdCBjYWxsIGhhbmRsZVRva2VuSXNzdWFuY2Ugd2hlbiBlY2RoWHBydiBpcyBwcmVzZW50IGJ1dCB0aGUgc2VydmVyIHJldHVybmVkIGEgcGxhaW50ZXh0IHRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBoYW5kbGVUb2tlblNweSA9IHNpbm9uLnNweShCaXRHb0FQSS5wcm90b3R5cGUsICdoYW5kbGVUb2tlbklzc3VhbmNlJyk7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3kgfSA9IG1ha2VTdHJhdGVneSh7XG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBzaW5vbi5zdHViKCkucmV0dXJucyh0cnVlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG4gICAgICAgIGJpdGdvLmZyb21KU09OKHtcbiAgICAgICAgICB1c2VyOiB7IHVzZXJuYW1lOiAndGVzdEBleGFtcGxlLmNvbScgfSxcbiAgICAgICAgICB0b2tlbjogJ2EnLnJlcGVhdCg0MCksXG4gICAgICAgICAgZWNkaFhwcnY6ICd4cHJ2LXRlc3Qta2V5JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbm9jayhST09UKS5wb3N0KCcvYXBpL2F1dGgvdjEvYWNjZXNzdG9rZW4nKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICB0b2tlbjogJ3YyeHBsYWludGV4dGZyb212MScsXG4gICAgICAgICAgbGFiZWw6ICd0ZXN0LXRva2VuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiaXRnby5hZGRBY2Nlc3NUb2tlbih2YWxpZFBhcmFtcyk7XG5cbiAgICAgICAgICBoYW5kbGVUb2tlblNweS5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgICAgcmVzdWx0LnRva2VuLnNob3VsZC5lcXVhbCgndjJ4cGxhaW50ZXh0ZnJvbXYxJyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaGFuZGxlVG9rZW5TcHkucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3QgY2FsbCBoYW5kbGVUb2tlbklzc3VhbmNlIHdoZW4gZWNkaFhwcnYgaXMgYWJzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBoYW5kbGVUb2tlblNweSA9IHNpbm9uLnNweShCaXRHb0FQSS5wcm90b3R5cGUsICdoYW5kbGVUb2tlbklzc3VhbmNlJyk7XG4gICAgICAgIGNvbnN0IHsgc3RyYXRlZ3kgfSA9IG1ha2VTdHJhdGVneSh7XG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBzaW5vbi5zdHViKCkucmV0dXJucyh0cnVlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogUk9PVCwgaG1hY0F1dGhTdHJhdGVneTogc3RyYXRlZ3kgfSk7XG4gICAgICAgIGJpdGdvLmF1dGhlbnRpY2F0ZVdpdGhBY2Nlc3NUb2tlbih7IGFjY2Vzc1Rva2VuOiAndjJ4c3RyYXRlZ3l0b2tlbicgfSk7XG5cbiAgICAgICAgbm9jayhST09UKS5wb3N0KCcvYXBpL2F1dGgvdjEvYWNjZXNzdG9rZW4nKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICB0b2tlbjogJ3YyeHBsYWludG9rZW4nLFxuICAgICAgICAgIGxhYmVsOiAndGVzdC10b2tlbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmFkZEFjY2Vzc1Rva2VuKHZhbGlkUGFyYW1zKTtcblxuICAgICAgICAvLyBoYW5kbGVUb2tlbklzc3VhbmNlIG11c3Qgbm90IGJlIGNhbGxlZCDigJQgbm8gZWNkaFhwcnYgdG8gZGVjcnlwdCB3aXRoXG4gICAgICAgIGhhbmRsZVRva2VuU3B5LmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgcmVzdWx0LnRva2VuLnNob3VsZC5lcXVhbCgndjJ4cGxhaW50b2tlbicpO1xuXG4gICAgICAgIGhhbmRsZVRva2VuU3B5LnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZvcmNlIFYxIGF1dGggd2hlbiBlY2RoWHBydiBpcyBhYnNlbnQgYW5kIHN0cmF0ZWd5IGlzIG5vdCBhdXRoZW50aWNhdGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5IH0gPSBtYWtlU3RyYXRlZ3koe1xuICAgICAgICAgIGlzQXV0aGVudGljYXRlZDogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgICAgYml0Z28uYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuKHsgYWNjZXNzVG9rZW46ICd2MnhsZWdhY3l0b2tlbicgfSk7XG5cbiAgICAgICAgbm9jayhST09UKS5wb3N0KCcvYXBpL2F1dGgvdjEvYWNjZXNzdG9rZW4nKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICB0b2tlbjogJ3YyeGxlZ2FjeXJlc3VsdCcsXG4gICAgICAgICAgbGFiZWw6ICd0ZXN0LXRva2VuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYml0Z28uYWRkQWNjZXNzVG9rZW4odmFsaWRQYXJhbXMpO1xuXG4gICAgICAgIChyZXN1bHQgYXMgYW55KS53YXJuaW5nLnNob3VsZC5tYXRjaCgvcHJvdG9jb2wgZG93bmdyYWRlLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmb3JjZSBWMSBhdXRoIHdoZW4gaXNBdXRoZW50aWNhdGVkIGlzIG5vdCBkZWZpbmVkIG9uIHN0cmF0ZWd5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB7IHN0cmF0ZWd5IH0gPSBtYWtlU3RyYXRlZ3koKTtcbiAgICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdjdXN0b20nLCBjdXN0b21Sb290VVJJOiBST09ULCBobWFjQXV0aFN0cmF0ZWd5OiBzdHJhdGVneSB9KTtcbiAgICAgICAgYml0Z28uYXV0aGVudGljYXRlV2l0aEFjY2Vzc1Rva2VuKHsgYWNjZXNzVG9rZW46ICd2Mnhub2F1dGhtZXRob2QnIH0pO1xuXG4gICAgICAgIG5vY2soUk9PVCkucG9zdCgnL2FwaS9hdXRoL3YxL2FjY2Vzc3Rva2VuJykucmVwbHkoMjAwLCB7XG4gICAgICAgICAgdG9rZW46ICd2MnhyZXN1bHQnLFxuICAgICAgICAgIGxhYmVsOiAndGVzdC10b2tlbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpdGdvLmFkZEFjY2Vzc1Rva2VuKHZhbGlkUGFyYW1zKTtcblxuICAgICAgICAvLyBXaXRob3V0IGlzQXV0aGVudGljYXRlZCwgc2hvdWxkIGZhbGwgYmFjayB0byBWMSBhdXRoXG4gICAgICAgIChyZXN1bHQgYXMgYW55KS53YXJuaW5nLnNob3VsZC5tYXRjaCgvcHJvdG9jb2wgZG93bmdyYWRlLyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvbnN0YW50cyBwYXJhbWV0ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBwYXNzaW5nIGNvbnN0YW50cyB2aWEgb3B0aW9ucyBhbmQgZXhwb3NlIHZpYSBmZXRjaENvbnN0YW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgICBjbGllbnRDb25zdGFudHM6IHsgbWF4RmVlUmF0ZTogJzEyMzEyMzEyMzEyMzEyMycgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb25zdGFudHMgPSBhd2FpdCBiaXRnby5mZXRjaENvbnN0YW50cygpO1xuICAgICAgY29uc3RhbnRzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtYXhGZWVSYXRlJywgJzEyMzEyMzEyMzEyMzEyMycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWZyZXNoIGNvbnN0YW50cyB3aGVuIGNhY2hlIGhhcyBleHBpcmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoe1xuICAgICAgICBlbnY6ICdjdXN0b20nLFxuICAgICAgICBjdXN0b21Sb290VVJJOiAnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IHVwIGNhY2hlZCBjb25zdGFudHMgd2l0aCBhbiBleHBpcmVkIGNhY2hlXG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNFeHBpcmUgPSAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlIHx8IHt9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c1snY3VzdG9tJ10gPSB7IG1heEZlZVJhdGU6ICdvbGQtdmFsdWUnIH07XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlWydjdXN0b20nXSA9IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwKTsgLy8gRXhwaXJlZCAxIHNlY29uZCBhZ29cblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKCdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJylcbiAgICAgICAgLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJylcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGNvbnN0YW50czogeyBtYXhGZWVSYXRlOiAnbmV3LXZhbHVlJywgbmV3Q29uc3RhbnQ6ICdhZGRlZCcgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0YW50cyA9IGF3YWl0IGJpdGdvLmZldGNoQ29uc3RhbnRzKCk7XG5cbiAgICAgIC8vIFNob3VsZCByZXR1cm4gdGhlIG5ldyBjb25zdGFudHMgZnJvbSB0aGUgc2VydmVyXG4gICAgICBjb25zdGFudHMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21heEZlZVJhdGUnLCAnbmV3LXZhbHVlJyk7XG4gICAgICBjb25zdGFudHMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ25ld0NvbnN0YW50JywgJ2FkZGVkJyk7XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIGNhY2hlZCBjb25zdGFudHMgd2hlbiBjYWNoZSBpcyBzdGlsbCB2YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpdGdvID0gbmV3IEJpdEdvQVBJKHtcbiAgICAgICAgZW52OiAnY3VzdG9tJyxcbiAgICAgICAgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBjYWNoZWQgY29uc3RhbnRzIHdpdGggYSBmdXR1cmUgZXhwaXJ5XG4gICAgICBjb25zdCBjYWNoZWRDb25zdGFudHMgPSB7IG1heEZlZVJhdGU6ICdjYWNoZWQtdmFsdWUnLCBhbm90aGVyU2V0dGluZzogJ2NhY2hlZC1zZXR0aW5nJyB9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNbJ2N1c3RvbSddID0gY2FjaGVkQ29uc3RhbnRzO1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZVsnY3VzdG9tJ10gPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgNSAqIDYwICogMTAwMCk7IC8vIFZhbGlkIGZvciA1IG1vcmUgbWludXRlc1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnKVxuICAgICAgICAuZ2V0KCcvYXBpL3YxL2NsaWVudC9jb25zdGFudHMnKVxuICAgICAgICAucmVwbHkoMjAwLCB7IGNvbnN0YW50czogeyBzaG91bGROb3RCZVVzZWQ6IHRydWUgfSB9KTtcblxuICAgICAgY29uc3QgY29uc3RhbnRzID0gYXdhaXQgYml0Z28uZmV0Y2hDb25zdGFudHMoKTtcblxuICAgICAgLy8gU2hvdWxkIHJldHVybiB0aGUgY2FjaGVkIGNvbnN0YW50c1xuICAgICAgY29uc3RhbnRzLnNob3VsZC5kZWVwRXF1YWwoY2FjaGVkQ29uc3RhbnRzKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgbm8gSFRUUCByZXF1ZXN0IHdhcyBtYWRlIChzaW5jZSBjYWNoZSB3YXMgdmFsaWQpXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuZmFsc2UoKTtcblxuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgY2FjaGVkIGNvbnN0YW50cyB3aGVuIG5vIGNhY2hlIGV4cGlyeSBpcyBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7XG4gICAgICAgIGVudjogJ2N1c3RvbScsXG4gICAgICAgIGN1c3RvbVJvb3RVUkk6ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgY2FjaGVkIGNvbnN0YW50cyB3aXRoIG5vIGV4cGlyeVxuICAgICAgY29uc3QgY2FjaGVkQ29uc3RhbnRzID0geyBtYXhGZWVSYXRlOiAnbm8tZXhwaXJ5LXZhbHVlJyB9O1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50cyA9IChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHMgfHwge307XG4gICAgICAoQml0R29BUEkgYXMgYW55KS5fY29uc3RhbnRzRXhwaXJlID0gKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZSB8fCB7fTtcbiAgICAgIChCaXRHb0FQSSBhcyBhbnkpLl9jb25zdGFudHNbJ2N1c3RvbSddID0gY2FjaGVkQ29uc3RhbnRzO1xuICAgICAgKEJpdEdvQVBJIGFzIGFueSkuX2NvbnN0YW50c0V4cGlyZVsnY3VzdG9tJ10gPSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jaygnaHR0cHM6Ly9hcHAuZXhhbXBsZS5sb2NhbCcpXG4gICAgICAgIC5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgY29uc3RhbnRzOiB7IHNob3VsZE5vdEJlVXNlZDogdHJ1ZSB9IH0pO1xuXG4gICAgICBjb25zdCBjb25zdGFudHMgPSBhd2FpdCBiaXRnby5mZXRjaENvbnN0YW50cygpO1xuXG4gICAgICAvLyBTaG91bGQgcmV0dXJuIHRoZSBjYWNoZWQgY29uc3RhbnRzXG4gICAgICBjb25zdGFudHMuc2hvdWxkLmRlZXBFcXVhbChjYWNoZWRDb25zdGFudHMpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBubyBIVFRQIHJlcXVlc3Qgd2FzIG1hZGUgKHNpbmNlIG5vIGV4cGlyeSBtZWFucyBjYWNoZSBpcyBhbHdheXMgdmFsaWQpXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuZmFsc2UoKTtcblxuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncGFja0tleWNoYWluc0ZGRCcsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAnY3VzdG9tJywgY3VzdG9tUm9vdFVSSTogJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gZmZkKFxuICAgICAga2V5Y2hhaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgdjJLZXljaGFpbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICBtYXhCYXRjaFNpemVCeXRlczogbnVtYmVyXG4gICAgKTogQXJyYXk8eyB2MUJhdGNoOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyB2MkJhdGNoOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBzaXplQnl0ZXM6IG51bWJlciB9PiB7XG4gICAgICByZXR1cm4gKGJpdGdvIGFzIGFueSkucGFja0tleWNoYWluc0ZGRChrZXljaGFpbnMsIHYyS2V5Y2hhaW5zLCBtYXhCYXRjaFNpemVCeXRlcyk7XG4gICAgfVxuXG4gICAgaXQoJ3JldHVybnMgYW4gZW1wdHkgYXJyYXkgd2hlbiBib3RoIGlucHV0cyBhcmUgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaW5zID0gZmZkKHt9LCB7fSwgMTAyNCk7XG4gICAgICBiaW5zLnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgYmlucy5zaG91bGQuaGF2ZS5sZW5ndGgoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFja3MgYWxsIGl0ZW1zIGludG8gYSBzaW5nbGUgYmluIHdoZW4gdGhleSBmaXQgd2l0aGluIHRoZSBsaW1pdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEVhY2ggZW50cnk6IDItYnl0ZSBpZCArIDEwLWJ5dGUgdmFsdWUgPSAxMiBieXRlczsgNSBlbnRyaWVzID0gNjAgYnl0ZXMgPCAyMDAgbGltaXRcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgazE6ICdhYWFhYWFhYWFhJywgazI6ICdiYmJiYmJiYmJiJywgazM6ICdjY2NjY2NjY2NjJyB9O1xuICAgICAgY29uc3QgdjJLZXljaGFpbnMgPSB7IHYxOiAnZGRkZGRkZGRkZCcsIHYyOiAnZWVlZWVlZWVlZScgfTtcbiAgICAgIGNvbnN0IGJpbnMgPSBmZmQoa2V5Y2hhaW5zLCB2MktleWNoYWlucywgMjAwKTtcbiAgICAgIGJpbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgT2JqZWN0LmtleXMoYmluc1swXS52MUJhdGNoKS5zaG91bGQuaGF2ZS5sZW5ndGgoMyk7XG4gICAgICBPYmplY3Qua2V5cyhiaW5zWzBdLnYyQmF0Y2gpLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzcGxpdHMgaW50byBtdWx0aXBsZSBiaW5zIHdoZW4gYSBzaW5nbGUgYmluIGNhbm5vdCBmaXQgYWxsIGl0ZW1zJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWQ9J2sxJyAoMiBieXRlcykgKyA2MDAtY2hhciB2YWx1ZSA9IDYwMiBieXRlczsgMiBlbnRyaWVzIGV4Y2VlZCA3MDAtYnl0ZSBsaW1pdFxuICAgICAgY29uc3Qga2V5Y2hhaW5zID0geyBrMTogJ3gnLnJlcGVhdCg2MDApLCBrMjogJ3knLnJlcGVhdCg2MDApIH07XG4gICAgICBjb25zdCBiaW5zID0gZmZkKGtleWNoYWlucywge30sIDcwMCk7XG4gICAgICBiaW5zLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBhIHNpbmdsZSBpdGVtIGV4Y2VlZHMgbWF4QmF0Y2hTaXplQnl0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBpZD0nazEnICgyIGJ5dGVzKSArIDIwMC1jaGFyIHZhbHVlID0gMjAyIGJ5dGVzID4gMTAwLWJ5dGUgbGltaXRcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgazE6ICd4Jy5yZXBlYXQoMjAwKSB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmZkKGtleWNoYWlucywge30sIDEwMCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXJyb3Igbm90IHRocm93bicpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLm1hdGNoKC9leGNlZWRzIHRoZSBtYXhpbXVtIGJhdGNoIHNpemUvKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdwbGFjZXMgVjEga2V5Y2hhaW5zIGluIHYxQmF0Y2ggYW5kIFYyIGtleWNoYWlucyBpbiB2MkJhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0geyBrMTogJ3YxdmFsdWUnIH07XG4gICAgICBjb25zdCB2MktleWNoYWlucyA9IHsgazI6ICd2MnZhbHVlJyB9O1xuICAgICAgY29uc3QgYmlucyA9IGZmZChrZXljaGFpbnMsIHYyS2V5Y2hhaW5zLCAxMDAwMCk7XG4gICAgICBiaW5zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIGJpbnNbMF0udjFCYXRjaC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnazEnLCAndjF2YWx1ZScpO1xuICAgICAgYmluc1swXS52MkJhdGNoLnNob3VsZC5oYXZlLnByb3BlcnR5KCdrMicsICd2MnZhbHVlJyk7XG4gICAgICBiaW5zWzBdLnYxQmF0Y2guc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdrMicpO1xuICAgICAgYmluc1swXS52MkJhdGNoLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnazEnKTtcbiAgICB9KTtcblxuICAgIGl0KCd1c2VzIEZGRCBvcmRlcmluZyBzbyB0aGUgbGFyZ2VzdCBpdGVtIGlzIHBhY2tlZCBmaXJzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vICdiaWcnOiBpZCgzKSArIDQ5NyBieXRlcyA9IDUwMCBieXRlczsgJ3MxJywnczInOiBpZCgyKSArIDk4IGJ5dGVzID0gMTAwIGJ5dGVzIGVhY2hcbiAgICAgIC8vIG1heEJhdGNoU2l6ZUJ5dGVzID0gNjAwXG4gICAgICAvLyBGRkQgb3JkZXIgKGRlc2NlbmRpbmcpOiBiaWcoNTAwKSwgczEoMTAwKSwgczIoMTAwKVxuICAgICAgLy8gICBiaW4wOiBiaWcoNTAwKS4gczE6IDUwMCsxMDA9NjAwIDw9NjAwLCBmaXRzLiBzMjogNjAwKzEwMD03MDAgPiA2MDAsIG5ldyBiaW4xLlxuICAgICAgLy8gICBSZXN1bHQ6IGJpbjA9e2JpZyxzMX0sIGJpbjE9e3MyfVxuICAgICAgY29uc3Qga2V5Y2hhaW5zID0geyBiaWc6ICd4Jy5yZXBlYXQoNDk3KSwgczE6ICd5Jy5yZXBlYXQoOTgpLCBzMjogJ3onLnJlcGVhdCg5OCkgfTtcbiAgICAgIGNvbnN0IGJpbnMgPSBmZmQoa2V5Y2hhaW5zLCB7fSwgNjAwKTtcbiAgICAgIGJpbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgICAgLy8gJ2JpZycgc2hvdWxkIHNoYXJlIGl0cyBiaW4gd2l0aCBvbmUgc21hbGwgaXRlbSAoRkZEIHBhY2tzIHRoZSBsYXJnZXN0IGZpcnN0KVxuICAgICAgY29uc3QgYmluV2l0aEJpZyA9IGJpbnMuZmluZCgoYikgPT4gJ2JpZycgaW4gYi52MUJhdGNoKSE7XG4gICAgICBPYmplY3Qua2V5cyhiaW5XaXRoQmlnLnYxQmF0Y2gpLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Byb2Nlc3NLZXljaGFpblBhc3N3b3JkVXBkYXRlc0luQmF0Y2hlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBST09UID0gJ2h0dHBzOi8vYXBwLmV4YW1wbGUubG9jYWwnO1xuICAgIGxldCBiaXRnbzogQml0R29BUEk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHN0cmF0ZWd5OiBJSG1hY0F1dGhTdHJhdGVneSA9IHtcbiAgICAgICAgY2FsY3VsYXRlUmVxdWVzdEhlYWRlcnM6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGhtYWM6ICdobWFjJywgdGltZXN0YW1wOiBEYXRlLm5vdygpLCB0b2tlbkhhc2g6ICdoYXNoJyB9KSxcbiAgICAgICAgdmVyaWZ5UmVzcG9uc2U6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgICAgICBleHBlY3RlZEhtYWM6ICdobWFjJyxcbiAgICAgICAgICBzaWduYXR1cmVTdWJqZWN0OiAnJyxcbiAgICAgICAgICBpc0luUmVzcG9uc2VWYWxpZGl0eVdpbmRvdzogdHJ1ZSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25UaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICB9KSxcbiAgICAgICAgY2FsY3VsYXRlSE1BQzogc2lub24uc3R1YigpLnJlc29sdmVzKCdoYXNoZWQtcHcnKSxcbiAgICAgICAgc2V0VG9rZW46IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpLFxuICAgICAgICBjbGVhclRva2VuOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKSxcbiAgICAgIH07XG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHJ1bkJhdGNoZXMoXG4gICAgICBrZXljaGFpbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICB2MktleWNoYWluczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgIG1heEJhdGNoU2l6ZUtCOiBudW1iZXIsXG4gICAgICBtYXhSZXRyaWVzID0gM1xuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgcmV0dXJuIChiaXRnbyBhcyBhbnkpLnByb2Nlc3NLZXljaGFpblBhc3N3b3JkVXBkYXRlc0luQmF0Y2hlcyhrZXljaGFpbnMsIHYyS2V5Y2hhaW5zLCBtYXhCYXRjaFNpemVLQiwgbWF4UmV0cmllcyk7XG4gICAgfVxuXG4gICAgaXQoJ21ha2VzIGEgc2luZ2xlIFBVVCByZXF1ZXN0IGZvciBhIHNtYWxsIHBheWxvYWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soUk9PVCkucHV0KCcvYXBpL3YyL3VzZXIva2V5Y2hhaW5zJykucmVwbHkoMjAwLCB7fSk7XG4gICAgICBhd2FpdCBydW5CYXRjaGVzKHsgazE6ICdzbWFsbCcgfSwge30sIDEwMjQpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYWtlcyB0d28gUFVUIHJlcXVlc3RzIHdoZW4gdGhlIHBheWxvYWQgc3BhbnMgdHdvIGJpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBpZD0nazEnKDIpICsgNjAwID0gNjAyIGJ5dGVzIGVhY2g7IDIgZW50cmllcyBleGNlZWQgMSBLQiBsaW1pdCA9PiAyIGJpbnNcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IHsgazE6ICd4Jy5yZXBlYXQoNjAwKSwgazI6ICd5Jy5yZXBlYXQoNjAwKSB9O1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnR3aWNlKCkucmVwbHkoMjAwLCB7fSk7XG4gICAgICBhd2FpdCBydW5CYXRjaGVzKGtleWNoYWlucywge30sIDEpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXRyaWVzIGEgZmFpbGVkIGJhdGNoIGFuZCBzdWNjZWVkcyBvbiB0aGUgc2Vjb25kIGF0dGVtcHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnJlcGx5KDUwMCwgeyBlcnJvcjogJ2ludGVybmFsIGVycm9yJyB9KTtcbiAgICAgIG5vY2soUk9PVCkucHV0KCcvYXBpL3YyL3VzZXIva2V5Y2hhaW5zJykucmVwbHkoMjAwLCB7fSk7XG4gICAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgICBhd2FpdCBydW5CYXRjaGVzKHsgazE6ICd2YWx1ZScgfSwge30sIDEwMjQsIDMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBhZnRlciBleGhhdXN0aW5nIGFsbCByZXRyaWVzIG9uIHBlcnNpc3RlbnQgSFRUUCBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycpLnRpbWVzKDMpLnJlcGx5KDUwMCwgeyBlcnJvcjogJ2ludGVybmFsIGVycm9yJyB9KTtcbiAgICAgIGxldCB0aHJvd25FcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBydW5CYXRjaGVzKHsgazE6ICd2YWx1ZScgfSwge30sIDEwMjQsIDMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvd25FcnJvciA9IGU7XG4gICAgICB9XG4gICAgICB0aHJvd25FcnJvciEubWVzc2FnZS5zaG91bGQubWF0Y2goL2ZhaWxlZCBhZnRlciAzIHJldHJpZXMvKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgYWZ0ZXIgZXhoYXVzdGluZyBhbGwgcmV0cmllcyB3aGVuIHRoZSBzZXJ2ZXIgcmVwb3J0cyBmYWlsZWQga2V5Y2hhaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKVxuICAgICAgICAucHV0KCcvYXBpL3YyL3VzZXIva2V5Y2hhaW5zJylcbiAgICAgICAgLnRpbWVzKDMpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgZmFpbGVkOiB7IHYxOiB7IGsxOiAnZW5jcnlwdGlvbiBlcnJvcicgfSB9IH0pO1xuICAgICAgbGV0IHRocm93bkVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHJ1bkJhdGNoZXMoeyBrMTogJ3ZhbHVlJyB9LCB7fSwgMTAyNCwgMyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93bkVycm9yID0gZTtcbiAgICAgIH1cbiAgICAgIHRocm93bkVycm9yIS5tZXNzYWdlLnNob3VsZC5tYXRjaCgvaGFkIGZhaWxlZCBrZXljaGFpbnMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdpc3N1ZXMgb25lIGVtcHR5IFBVVCB3aGVuIGJvdGgga2V5Y2hhaW4gbWFwcyBhcmUgZW1wdHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soUk9PVCkucHV0KCcvYXBpL3YyL3VzZXIva2V5Y2hhaW5zJywgeyBrZXljaGFpbnM6IHt9LCB2Ml9rZXljaGFpbnM6IHt9IH0pLnJlcGx5KDIwMCwge30pO1xuICAgICAgYXdhaXQgcnVuQmF0Y2hlcyh7fSwge30sIDEwMjQpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NoYW5nZVBhc3N3b3JkIGJhdGNoaW5nIGZsb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUk9PVCA9ICdodHRwczovL2FwcC5leGFtcGxlLmxvY2FsJztcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuICAgIGxldCBzYW5kYm94OiBzaW5vbi5TaW5vblNhbmRib3g7XG4gICAgbGV0IHYxVXBkYXRlUGFzc3dvcmRTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgbGV0IHYyVXBkYXRlUGFzc3dvcmRTdHViOiBzaW5vbi5TaW5vblN0dWI7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICAgIGNvbnN0IHN0cmF0ZWd5OiBJSG1hY0F1dGhTdHJhdGVneSA9IHtcbiAgICAgICAgY2FsY3VsYXRlUmVxdWVzdEhlYWRlcnM6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHsgaG1hYzogJ2htYWMnLCB0aW1lc3RhbXA6IERhdGUubm93KCksIHRva2VuSGFzaDogJ2hhc2gnIH0pLFxuICAgICAgICB2ZXJpZnlSZXNwb25zZTogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICAgICAgZXhwZWN0ZWRIbWFjOiAnaG1hYycsXG4gICAgICAgICAgc2lnbmF0dXJlU3ViamVjdDogJycsXG4gICAgICAgICAgaXNJblJlc3BvbnNlVmFsaWRpdHlXaW5kb3c6IHRydWUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uVGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgfSksXG4gICAgICAgIGNhbGN1bGF0ZUhNQUM6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCdoYXNoZWQtcHcnKSxcbiAgICAgICAgc2V0VG9rZW46IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCksXG4gICAgICAgIGNsZWFyVG9rZW46IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCksXG4gICAgICB9O1xuXG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ2N1c3RvbScsIGN1c3RvbVJvb3RVUkk6IFJPT1QsIGhtYWNBdXRoU3RyYXRlZ3k6IHN0cmF0ZWd5IH0pO1xuICAgICAgKGJpdGdvIGFzIGFueSkuX3VzZXIgPSB7IHVzZXJuYW1lOiAndGVzdEBiaXRnby5jb20nIH07XG5cbiAgICAgIHNhbmRib3guc3R1YihiaXRnbywgJ3ZlcmlmeVBhc3N3b3JkJykucmVzb2x2ZXModHJ1ZSk7XG5cbiAgICAgIHYxVXBkYXRlUGFzc3dvcmRTdHViID0gc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoeyBrZXljaGFpbnM6IHsgazE6ICd2MWVuYycgfSwgdmVyc2lvbjogMjUgfSk7XG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdrZXljaGFpbnMnKS5yZXR1cm5zKHtcbiAgICAgICAgdXBkYXRlUGFzc3dvcmQ6IHYxVXBkYXRlUGFzc3dvcmRTdHViLFxuICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICB2MlVwZGF0ZVBhc3N3b3JkU3R1YiA9IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHsgdjJrMTogJ3YyZW5jJyB9KTtcbiAgICAgIHNhbmRib3guc3R1YihiaXRnbywgJ2NvaW4nKS5yZXR1cm5zKHtcbiAgICAgICAga2V5Y2hhaW5zOiAoKSA9PiAoe1xuICAgICAgICAgIHVwZGF0ZVBhc3N3b3JkOiB2MlVwZGF0ZVBhc3N3b3JkU3R1YixcbiAgICAgICAgfSksXG4gICAgICB9IGFzIGFueSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgUFVUIC91c2VyL2tleWNoYWlucyBhbmQgUE9TVCAvdXNlci9jaGFuZ2VwYXNzd29yZCB3aXRob3V0IGtleWNoYWlucyB3aGVuIGJhdGNoaW5nIGlzIGVuYWJsZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpXG4gICAgICAgIC5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JylcbiAgICAgICAgLnF1ZXJ5KHRydWUpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgaXNCYXRjaGluZ0Zsb3dFbmFibGVkOiB0cnVlLCBtYXhCYXRjaFNpemVLQjogOTAwIH0pO1xuXG4gICAgICBjb25zdCBiYXRjaFB1dFNjb3BlID0gbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgY29uc3QgY2hhbmdlUGFzc1Njb3BlID0gbm9jayhST09UKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL2NoYW5nZXBhc3N3b3JkJywgKGJvZHk6IGFueSkgPT4gIWJvZHkua2V5Y2hhaW5zICYmICFib2R5LnYyX2tleWNoYWlucylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCBiaXRnby5jaGFuZ2VQYXNzd29yZCh7IG9sZFBhc3N3b3JkOiAnb2xkcHcnLCBuZXdQYXNzd29yZDogJ25ld3B3JyB9KTtcblxuICAgICAgYmF0Y2hQdXRTY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgY2hhbmdlUGFzc1Njb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc3RhZ2VzIGFuIGVtcHR5IGJhdGNoIGFuZCBjaGFuZ2VzIHBhc3N3b3JkIHdoZW4gbm8ga2V5Y2hhaW5zIGFyZSByZS1lbmNyeXB0YWJsZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHYxVXBkYXRlUGFzc3dvcmRTdHViLnJlc29sdmVzKHsga2V5Y2hhaW5zOiB7fSwgdmVyc2lvbjogMjUgfSk7XG4gICAgICB2MlVwZGF0ZVBhc3N3b3JkU3R1Yi5yZXNvbHZlcyh7fSk7XG4gICAgICBub2NrKFJPT1QpXG4gICAgICAgIC5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JylcbiAgICAgICAgLnF1ZXJ5KHRydWUpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgaXNCYXRjaGluZ0Zsb3dFbmFibGVkOiB0cnVlLCBtYXhCYXRjaFNpemVLQjogOTAwIH0pO1xuICAgICAgY29uc3QgYmF0Y2hQdXRTY29wZSA9IG5vY2soUk9PVClcbiAgICAgICAgLnB1dCgnL2FwaS92Mi91c2VyL2tleWNoYWlucycsIHsga2V5Y2hhaW5zOiB7fSwgdjJfa2V5Y2hhaW5zOiB7fSB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBjb25zdCBjaGFuZ2VQYXNzU2NvcGUgPSBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhYm9keS5rZXljaGFpbnMgJiYgIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBhd2FpdCBiaXRnby5jaGFuZ2VQYXNzd29yZCh7IG9sZFBhc3N3b3JkOiAnb2xkcHcnLCBuZXdQYXNzd29yZDogJ25ld3B3JyB9KTtcbiAgICAgIGJhdGNoUHV0U2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNoYW5nZVBhc3NTY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NlbmRzIGtleWNoYWlucyBpbiB0aGUgUE9TVCBib2R5IChsZWdhY3kgZmxvdykgd2hlbiB0aGUgc2VydmVyIGRpc2FibGVzIGJhdGNoaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JykucXVlcnkodHJ1ZSkucmVwbHkoMjAwLCB7IGlzQmF0Y2hpbmdGbG93RW5hYmxlZDogZmFsc2UgfSk7XG5cbiAgICAgIGNvbnN0IGxlZ2FjeVNjb3BlID0gbm9jayhST09UKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL2NoYW5nZXBhc3N3b3JkJywgKGJvZHk6IGFueSkgPT4gISFib2R5LmtleWNoYWlucyAmJiAhIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHsgb2xkUGFzc3dvcmQ6ICdvbGRwdycsIG5ld1Bhc3N3b3JkOiAnbmV3cHcnIH0pO1xuXG4gICAgICBsZWdhY3lTY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhbGxzIGJhY2sgdG8gbGVnYWN5IGZsb3cgd2hlbiB0aGUgYmF0Y2hpbmcgY2hlY2sgcmVxdWVzdCBmYWlscycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVCkuZ2V0KCcvYXBpL3YyL3VzZXIvY2hlY2tCYXRjaGluZ1Bhc3N3b3JkRmxvdycpLnF1ZXJ5KHRydWUpLnJlcGx5KDUwMywgeyBlcnJvcjogJ3NlcnZpY2UgdW5hdmFpbGFibGUnIH0pO1xuXG4gICAgICBjb25zdCBsZWdhY3lTY29wZSA9IG5vY2soUk9PVClcbiAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9jaGFuZ2VwYXNzd29yZCcsIChib2R5OiBhbnkpID0+ICEhYm9keS5rZXljaGFpbnMgJiYgISFib2R5LnYyX2tleWNoYWlucylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCBiaXRnby5jaGFuZ2VQYXNzd29yZCh7IG9sZFBhc3N3b3JkOiAnb2xkcHcnLCBuZXdQYXNzd29yZDogJ25ld3B3JyB9KTtcblxuICAgICAgbGVnYWN5U2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdmb3J3YXJkcyBlbmNyeXB0aW9uVmVyc2lvbiB0byBib3RoIHYxIGFuZCB2MiBrZXljaGFpbnMoKS51cGRhdGVQYXNzd29yZCBjYWxscycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVCkuZ2V0KCcvYXBpL3YyL3VzZXIvY2hlY2tCYXRjaGluZ1Bhc3N3b3JkRmxvdycpLnF1ZXJ5KHRydWUpLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IGZhbHNlIH0pO1xuICAgICAgbm9jayhST09UKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL2NoYW5nZXBhc3N3b3JkJywgKGJvZHk6IGFueSkgPT4gISFib2R5LmtleWNoYWlucyAmJiAhIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHsgb2xkUGFzc3dvcmQ6ICdvbGRwdycsIG5ld1Bhc3N3b3JkOiAnbmV3cHcnLCBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaCh2MVVwZGF0ZVBhc3N3b3JkU3R1YiwgeyBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2godjJVcGRhdGVQYXNzd29yZFN0dWIsIHsgZW5jcnlwdGlvblZlcnNpb246IDIgfSk7XG4gICAgfSk7XG4gICAgaXQoJ2NyZWF0ZXMgb25lIGVuY3J5cHRpb24gc2Vzc2lvbiwgcGFzc2VzIGl0IHRvIGJvdGgga2V5Y2hhaW4gdXBkYXRlIGNhbGxzLCBhbmQgZGVzdHJveXMgaXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKS5xdWVyeSh0cnVlKS5yZXBseSgyMDAsIHsgaXNCYXRjaGluZ0Zsb3dFbmFibGVkOiBmYWxzZSB9KTtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9jaGFuZ2VwYXNzd29yZCcsIChib2R5OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJ2tleWNoYWlucycgaW4gYm9keSAmJiAndjJfa2V5Y2hhaW5zJyBpbiBib2R5O1xuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGNvbnN0IGRlc3Ryb3kgPSBzYW5kYm94LnN0dWIoKTtcbiAgICAgIGNvbnN0IHNlc3Npb246IElFbmNyeXB0aW9uU2Vzc2lvbiA9IHtcbiAgICAgICAgZW5jcnlwdDogc2FuZGJveC5zdHViKCkucmVzb2x2ZXMoJ3Nlc3Npb24tZW5jcnlwdGVkJyksXG4gICAgICAgIGRlY3J5cHQ6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCdzZXNzaW9uLWRlY3J5cHRlZCcpLFxuICAgICAgICBkZXN0cm95LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNyZWF0ZVNlc3Npb24gPSBzYW5kYm94LnN0dWIoYml0Z28sICdjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbicpLnJlc29sdmVzKHNlc3Npb24pO1xuXG4gICAgICBhd2FpdCBiaXRnby5jaGFuZ2VQYXNzd29yZCh7IG9sZFBhc3N3b3JkOiAnb2xkcHcnLCBuZXdQYXNzd29yZDogJ25ld3B3JywgZW5jcnlwdGlvblZlcnNpb246IDIgfSk7XG5cbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGNyZWF0ZVNlc3Npb24pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhFeGFjdGx5KGNyZWF0ZVNlc3Npb24sICduZXdwdycsIDIpO1xuICAgICAgLy8gQ2FsbC1zaXRlIHRydXRoOiB0aGUgcGFyYW1zIG9iamVjdCByZWFjaGVzIGJvdGggdXBkYXRlUGFzc3dvcmQgY2FsbHMsIGJ1dCB0aGVcbiAgICAgIC8vIGRlcHJlY2F0ZWQgdjEtbGVnIChzcmMvdjEva2V5Y2hhaW5zLnRzKSBpZ25vcmVzIGVuY3J5cHRpb25TZXNzaW9uL2VuY3J5cHRpb25WZXJzaW9uXG4gICAgICAvLyBhbmQgcHJlc2VydmVzIGVhY2ggZW52ZWxvcGUncyB2ZXJzaW9uIC0tIHNlZSB0ZXN0L3VuaXQvdjEva2V5Y2hhaW5zLnRzLiBPbmx5IHRoZVxuICAgICAgLy8gY29pbi1sZWcgY29uc3VtZXMgdGhlIHNlc3Npb24uXG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aE1hdGNoKHYxVXBkYXRlUGFzc3dvcmRTdHViLCB7XG4gICAgICAgIG9sZFBhc3N3b3JkOiAnb2xkcHcnLFxuICAgICAgICBuZXdQYXNzd29yZDogJ25ld3B3JyxcbiAgICAgIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaCh2MVVwZGF0ZVBhc3N3b3JkU3R1Yiwge1xuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgICAgZW5jcnlwdGlvblNlc3Npb246IHNlc3Npb24sXG4gICAgICB9KTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2godjJVcGRhdGVQYXNzd29yZFN0dWIsIHtcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgICAgIGVuY3J5cHRpb25TZXNzaW9uOiBzZXNzaW9uLFxuICAgICAgfSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShkZXN0cm95KTtcbiAgICB9KTtcblxuICAgIGl0KCdlbWl0cyBrZXljaGFpbnMvc3RhcnRlZCwgbW9ub3RvbmljIGtleWNoYWlucy91cGRhdGVkIGV2ZW50cywgdGhlbiBmaW5hbGl6aW5nL3N0YXJ0ZWQgYW5kIGZpbmFsaXppbmcvY29tcGxldGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JykucXVlcnkodHJ1ZSkucmVwbHkoMjAwLCB7IGlzQmF0Y2hpbmdGbG93RW5hYmxlZDogZmFsc2UgfSk7XG4gICAgICBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhIWJvZHkua2V5Y2hhaW5zICYmICEhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgdjFVcGRhdGVQYXNzd29yZFN0dWIuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgcHJvZ3Jlc3NDYWxsYmFjaz86IChwOiB1bmtub3duKSA9PiB2b2lkIH0pID0+IHtcbiAgICAgICAgcGFyYW1zLnByb2dyZXNzQ2FsbGJhY2s/Lih7IHN0YXR1czogJ3VwZGF0ZWQnLCBjdXJyZW50S2V5Y2hhaW5JZDogJ3hwdWIxJyB9KTtcbiAgICAgICAgcGFyYW1zLnByb2dyZXNzQ2FsbGJhY2s/Lih7IHN0YXR1czogJ3NraXBwZWQnLCBjdXJyZW50S2V5Y2hhaW5JZDogJ3hwdWIyJyB9KTtcbiAgICAgICAgLy8gb25lIG1hcCBlbnRyeSBwZXIgZW1pdHRlZCBldmVudCwgc2luY2UgdGhlIG1hcCdzIHNpemUgbm93IGZlZWRzIHRoZSB2MiB0b3RhbFxuICAgICAgICByZXR1cm4geyBrZXljaGFpbnM6IHsgazE6ICd2MWVuYycsIGsyOiAndjFlbmMyJyB9LCB2ZXJzaW9uOiAyNSB9O1xuICAgICAgfSk7XG4gICAgICB2MlVwZGF0ZVBhc3N3b3JkU3R1Yi5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtczogeyBwcm9ncmVzc0NhbGxiYWNrPzogKHA6IHVua25vd24pID0+IHZvaWQgfSkgPT4ge1xuICAgICAgICBwYXJhbXMucHJvZ3Jlc3NDYWxsYmFjaz8uKHsgc3RhdHVzOiAndXBkYXRlZCcsIGN1cnJlbnRLZXljaGFpbklkOiAneHB1YjMnIH0pO1xuICAgICAgICByZXR1cm4geyB2MmsxOiAndjJlbmMnIH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZXZlbnRzOiBQYXNzd29yZFJvdGF0aW9uUHJvZ3Jlc3NbXSA9IFtdO1xuICAgICAgYXdhaXQgYml0Z28uY2hhbmdlUGFzc3dvcmQoe1xuICAgICAgICBvbGRQYXNzd29yZDogJ29sZHB3JyxcbiAgICAgICAgbmV3UGFzc3dvcmQ6ICduZXdwdycsXG4gICAgICAgIHByb2dyZXNzQ2FsbGJhY2s6IChwcm9ncmVzcykgPT4gZXZlbnRzLnB1c2gocHJvZ3Jlc3MpLFxuICAgICAgfSk7XG5cbiAgICAgIGV2ZW50cy5zaG91bGQuZGVlcEVxdWFsKFtcbiAgICAgICAgeyBwaGFzZTogJ2tleWNoYWlucycsIHN0YXR1czogJ3N0YXJ0ZWQnLCBjb21wbGV0ZWQ6IDAsIGF0dGVtcHRlZDogMCwgc3VjY2VlZGVkOiAwLCBza2lwcGVkOiAwIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwaGFzZTogJ2tleWNoYWlucycsXG4gICAgICAgICAgc3RhdHVzOiAndXBkYXRlZCcsXG4gICAgICAgICAgY29tcGxldGVkOiAxLFxuICAgICAgICAgIGF0dGVtcHRlZDogMSxcbiAgICAgICAgICBzdWNjZWVkZWQ6IDEsXG4gICAgICAgICAgc2tpcHBlZDogMCxcbiAgICAgICAgICB0b3RhbDogdW5kZWZpbmVkLFxuICAgICAgICAgIGN1cnJlbnRLZXljaGFpbklkOiAneHB1YjEnLFxuICAgICAgICAgIGtleWNoYWluVmVyc2lvbjogJ3YxJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBoYXNlOiAna2V5Y2hhaW5zJyxcbiAgICAgICAgICBzdGF0dXM6ICd1cGRhdGVkJyxcbiAgICAgICAgICBjb21wbGV0ZWQ6IDIsXG4gICAgICAgICAgYXR0ZW1wdGVkOiAyLFxuICAgICAgICAgIHN1Y2NlZWRlZDogMSxcbiAgICAgICAgICBza2lwcGVkOiAxLFxuICAgICAgICAgIHRvdGFsOiB1bmRlZmluZWQsXG4gICAgICAgICAgY3VycmVudEtleWNoYWluSWQ6ICd4cHViMicsXG4gICAgICAgICAga2V5Y2hhaW5WZXJzaW9uOiAndjEnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGhhc2U6ICdrZXljaGFpbnMnLFxuICAgICAgICAgIHN0YXR1czogJ3VwZGF0ZWQnLFxuICAgICAgICAgIGNvbXBsZXRlZDogMyxcbiAgICAgICAgICBhdHRlbXB0ZWQ6IDMsXG4gICAgICAgICAgc3VjY2VlZGVkOiAyLFxuICAgICAgICAgIHNraXBwZWQ6IDEsXG4gICAgICAgICAgdG90YWw6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjdXJyZW50S2V5Y2hhaW5JZDogJ3hwdWIzJyxcbiAgICAgICAgICBrZXljaGFpblZlcnNpb246ICd2MicsXG4gICAgICAgIH0sXG4gICAgICAgIHsgcGhhc2U6ICdmaW5hbGl6aW5nJywgc3RhdHVzOiAnc3RhcnRlZCcgfSxcbiAgICAgICAgeyBwaGFzZTogJ2ZpbmFsaXppbmcnLCBzdGF0dXM6ICdjb21wbGV0ZWQnIH0sXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KCdmb3J3YXJkcyBhIHRydXRoZnVsIHRvdGFsIGZyb20gdGhlIHYyIGxvd2VyLWxldmVsIGNhbGxiYWNrIGludG8gZXZlcnkga2V5Y2hhaW5zL3VwZGF0ZWQgZXZlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpLmdldCgnL2FwaS92Mi91c2VyL2NoZWNrQmF0Y2hpbmdQYXNzd29yZEZsb3cnKS5xdWVyeSh0cnVlKS5yZXBseSgyMDAsIHsgaXNCYXRjaGluZ0Zsb3dFbmFibGVkOiBmYWxzZSB9KTtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9jaGFuZ2VwYXNzd29yZCcsIChib2R5OiBhbnkpID0+ICEhYm9keS5rZXljaGFpbnMgJiYgISFib2R5LnYyX2tleWNoYWlucylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICB2MlVwZGF0ZVBhc3N3b3JkU3R1Yi5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtczogeyBwcm9ncmVzc0NhbGxiYWNrPzogKHA6IHVua25vd24pID0+IHZvaWQgfSkgPT4ge1xuICAgICAgICBwYXJhbXMucHJvZ3Jlc3NDYWxsYmFjaz8uKHsgc3RhdHVzOiAndXBkYXRlZCcsIGN1cnJlbnRLZXljaGFpbklkOiAneHB1YjEnLCB0b3RhbDogMiB9KTtcbiAgICAgICAgcGFyYW1zLnByb2dyZXNzQ2FsbGJhY2s/Lih7IHN0YXR1czogJ3VwZGF0ZWQnLCBjdXJyZW50S2V5Y2hhaW5JZDogJ3hwdWIyJywgdG90YWw6IDIgfSk7XG4gICAgICAgIHJldHVybiB7IHYyazE6ICd2MmVuYycsIHYyazI6ICd2MmVuYzInIH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZXZlbnRzOiBQYXNzd29yZFJvdGF0aW9uUHJvZ3Jlc3NbXSA9IFtdO1xuICAgICAgYXdhaXQgYml0Z28uY2hhbmdlUGFzc3dvcmQoe1xuICAgICAgICBvbGRQYXNzd29yZDogJ29sZHB3JyxcbiAgICAgICAgbmV3UGFzc3dvcmQ6ICduZXdwdycsXG4gICAgICAgIHByb2dyZXNzQ2FsbGJhY2s6IChwcm9ncmVzcykgPT4gZXZlbnRzLnB1c2gocHJvZ3Jlc3MpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHYyRXZlbnRzID0gZXZlbnRzLmZpbHRlcihcbiAgICAgICAgKGUpOiBlIGlzIEV4dHJhY3Q8UGFzc3dvcmRSb3RhdGlvblByb2dyZXNzLCB7IHBoYXNlOiAna2V5Y2hhaW5zJyB9PiA9PlxuICAgICAgICAgIGUucGhhc2UgPT09ICdrZXljaGFpbnMnICYmIGUuc3RhdHVzID09PSAndXBkYXRlZCcgJiYgZS5rZXljaGFpblZlcnNpb24gPT09ICd2MidcbiAgICAgICk7XG4gICAgICAvLyB0aGUgdjEgc3R1YiBrZWVwcyBpdHMgZGVmYXVsdCAxLWVudHJ5IG1hcCwgc28gdjIgZXZlbnRzIGZvcndhcmQgMSAodjEpICsgMiAodjIpID0gM1xuICAgICAgdjJFdmVudHMuZXZlcnkoKGUpID0+IGUudG90YWwgPT09IDMpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnY292ZXJzIGJvdGgga2V5Y2hhaW4gc2V0cyBpbiB0aGUgdG90YWwgc28gbWl4ZWQgdjEvdjIgYWNjb3VudHMgY29tcGxldGUgZXhhY3RseSAoMiB2MSArIDMyIHYyID0gMzQgb2YgMzQpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JykucXVlcnkodHJ1ZSkucmVwbHkoMjAwLCB7IGlzQmF0Y2hpbmdGbG93RW5hYmxlZDogZmFsc2UgfSk7XG4gICAgICBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhIWJvZHkua2V5Y2hhaW5zICYmICEhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgdjFVcGRhdGVQYXNzd29yZFN0dWIuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgcHJvZ3Jlc3NDYWxsYmFjaz86IChwOiB1bmtub3duKSA9PiB2b2lkIH0pID0+IHtcbiAgICAgICAgcGFyYW1zLnByb2dyZXNzQ2FsbGJhY2s/Lih7IHN0YXR1czogJ3VwZGF0ZWQnLCBjdXJyZW50S2V5Y2hhaW5JZDogJ3hwdWIxJyB9KTtcbiAgICAgICAgcGFyYW1zLnByb2dyZXNzQ2FsbGJhY2s/Lih7IHN0YXR1czogJ3VwZGF0ZWQnLCBjdXJyZW50S2V5Y2hhaW5JZDogJ3hwdWIyJyB9KTtcbiAgICAgICAgcmV0dXJuIHsga2V5Y2hhaW5zOiB7IGsxOiAndjFlbmMnLCBrMjogJ3YxZW5jMicgfSwgdmVyc2lvbjogMjUgfTtcbiAgICAgIH0pO1xuICAgICAgdjJVcGRhdGVQYXNzd29yZFN0dWIuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgcHJvZ3Jlc3NDYWxsYmFjaz86IChwOiB1bmtub3duKSA9PiB2b2lkIH0pID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMzI7IGkrKykge1xuICAgICAgICAgIHBhcmFtcy5wcm9ncmVzc0NhbGxiYWNrPy4oeyBzdGF0dXM6ICd1cGRhdGVkJywgY3VycmVudEtleWNoYWluSWQ6IGB2MmtleS0ke2l9YCwgdG90YWw6IDMyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHYyazE6ICd2MmVuYycgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBldmVudHM6IFBhc3N3b3JkUm90YXRpb25Qcm9ncmVzc1tdID0gW107XG4gICAgICBhd2FpdCBiaXRnby5jaGFuZ2VQYXNzd29yZCh7XG4gICAgICAgIG9sZFBhc3N3b3JkOiAnb2xkcHcnLFxuICAgICAgICBuZXdQYXNzd29yZDogJ25ld3B3JyxcbiAgICAgICAgcHJvZ3Jlc3NDYWxsYmFjazogKHByb2dyZXNzKSA9PiBldmVudHMucHVzaChwcm9ncmVzcyksXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2V5Y2hhaW5FdmVudHMgPSBldmVudHMuZmlsdGVyKFxuICAgICAgICAoZSk6IGUgaXMgRXh0cmFjdDxQYXNzd29yZFJvdGF0aW9uUHJvZ3Jlc3MsIHsgcGhhc2U6ICdrZXljaGFpbnMnIH0+ID0+XG4gICAgICAgICAgZS5waGFzZSA9PT0gJ2tleWNoYWlucycgJiYgZS5zdGF0dXMgPT09ICd1cGRhdGVkJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHYxRXZlbnRzID0ga2V5Y2hhaW5FdmVudHMuZmlsdGVyKChlKSA9PiBlLmtleWNoYWluVmVyc2lvbiA9PT0gJ3YxJyk7XG4gICAgICBjb25zdCB2MkV2ZW50cyA9IGtleWNoYWluRXZlbnRzLmZpbHRlcigoZSkgPT4gZS5rZXljaGFpblZlcnNpb24gPT09ICd2MicpO1xuXG4gICAgICAvLyB2MSBldmVudHMgc3RheSBpbmRldGVybWluYXRlOiB0aGUgdjEgc2V0IGhhcyBubyBzZXJ2ZXItcHJvdmlkZWQgY291bnRcbiAgICAgIHYxRXZlbnRzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHYxRXZlbnRzLmV2ZXJ5KChlKSA9PiBlLnRvdGFsID09PSB1bmRlZmluZWQpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIC8vIHYyIGV2ZW50cyBjYXJyeSB0aGUgY29tYmluZWQgZGVub21pbmF0b3I6IDIgKHYxIHNldCkgKyAzMiAodG90YWxDb3VudClcbiAgICAgIHYyRXZlbnRzLnNob3VsZC5oYXZlLmxlbmd0aCgzMik7XG4gICAgICB2MkV2ZW50cy5ldmVyeSgoZSkgPT4gZS50b3RhbCA9PT0gMzQpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIC8vIHRoZSBjb3VudGVyIGNvbXBsZXRlcyBleGFjdGx5IGluc3RlYWQgb2Ygb3ZlcnNob290aW5nIHRoZSB0b3RhbFxuICAgICAgY29uc3QgbGFzdCA9IHYyRXZlbnRzW3YyRXZlbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgbGFzdC5jb21wbGV0ZWQuc2hvdWxkLmVxdWFsKDM0KTtcbiAgICAgIGxhc3QudG90YWwhLnNob3VsZC5lcXVhbCgzNCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZW1pdHMgYSB0ZXJtaW5hbCB0b3RhbCBmb3IgdjEtb25seSBhY2NvdW50cyBzbyB0aGUgY291bnRlciBjYW4gcmVuZGVyIG4gb2YgbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVCkuZ2V0KCcvYXBpL3YyL3VzZXIvY2hlY2tCYXRjaGluZ1Bhc3N3b3JkRmxvdycpLnF1ZXJ5KHRydWUpLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IGZhbHNlIH0pO1xuICAgICAgbm9jayhST09UKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL2NoYW5nZXBhc3N3b3JkJywgKGJvZHk6IGFueSkgPT4gISFib2R5LmtleWNoYWlucyAmJiAhIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIHYxVXBkYXRlUGFzc3dvcmRTdHViLmNhbGxzRmFrZShhc3luYyAocGFyYW1zOiB7IHByb2dyZXNzQ2FsbGJhY2s/OiAocDogdW5rbm93bikgPT4gdm9pZCB9KSA9PiB7XG4gICAgICAgIHBhcmFtcy5wcm9ncmVzc0NhbGxiYWNrPy4oeyBzdGF0dXM6ICd1cGRhdGVkJywgY3VycmVudEtleWNoYWluSWQ6ICd4cHViMScgfSk7XG4gICAgICAgIHBhcmFtcy5wcm9ncmVzc0NhbGxiYWNrPy4oeyBzdGF0dXM6ICd1cGRhdGVkJywgY3VycmVudEtleWNoYWluSWQ6ICd4cHViMicgfSk7XG4gICAgICAgIHJldHVybiB7IGtleWNoYWluczogeyBrMTogJ3YxZW5jJywgazI6ICd2MWVuYzInIH0sIHZlcnNpb246IDI1IH07XG4gICAgICB9KTtcbiAgICAgIC8vIGEgdjEtb25seSBhY2NvdW50OiB0aGUgdjIgd2FsayBmaW5kcyBub3RoaW5nIGFuZCBlbWl0cyBub3RoaW5nXG4gICAgICB2MlVwZGF0ZVBhc3N3b3JkU3R1Yi5jYWxsc0Zha2UoYXN5bmMgKCkgPT4gKHt9KSk7XG5cbiAgICAgIGNvbnN0IGV2ZW50czogUGFzc3dvcmRSb3RhdGlvblByb2dyZXNzW10gPSBbXTtcbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHtcbiAgICAgICAgb2xkUGFzc3dvcmQ6ICdvbGRwdycsXG4gICAgICAgIG5ld1Bhc3N3b3JkOiAnbmV3cHcnLFxuICAgICAgICBwcm9ncmVzc0NhbGxiYWNrOiAocHJvZ3Jlc3MpID0+IGV2ZW50cy5wdXNoKHByb2dyZXNzKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrZXljaGFpbkV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG4gICAgICAgIChlKTogZSBpcyBFeHRyYWN0PFBhc3N3b3JkUm90YXRpb25Qcm9ncmVzcywgeyBwaGFzZTogJ2tleWNoYWlucycgfT4gPT5cbiAgICAgICAgICBlLnBoYXNlID09PSAna2V5Y2hhaW5zJyAmJiBlLnN0YXR1cyA9PT0gJ3VwZGF0ZWQnXG4gICAgICApO1xuICAgICAgY29uc3QgdjFFdmVudHMgPSBrZXljaGFpbkV2ZW50cy5maWx0ZXIoKGUpID0+IGUua2V5Y2hhaW5WZXJzaW9uID09PSAndjEnKTtcbiAgICAgIHYxRXZlbnRzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHYxRXZlbnRzLmV2ZXJ5KChlKSA9PiBlLnRvdGFsID09PSB1bmRlZmluZWQpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIC8vIG5vIHYyIGV2ZW50IGV2ZXIgYXJyaXZlZCwgc28gdGhlIHRlcm1pbmFsIGtleWNoYWlucy91cGRhdGVkIGV2ZW50IGNhcnJpZXMgdGhlXG4gICAgICAvLyBjbGllbnQta25vd24gdjEgc2V0IHNpemUgYXMgdGhlIGRlbm9taW5hdG9yOiAyIG9mIDIsIGltbWVkaWF0ZWx5IGJlZm9yZSBmaW5hbGl6aW5nXG4gICAgICBjb25zdCBsYXN0ID0ga2V5Y2hhaW5FdmVudHNba2V5Y2hhaW5FdmVudHMubGVuZ3RoIC0gMV07XG4gICAgICBsYXN0LmNvbXBsZXRlZC5zaG91bGQuZXF1YWwoMik7XG4gICAgICBsYXN0LnRvdGFsIS5zaG91bGQuZXF1YWwoMik7XG4gICAgICBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDJdLnNob3VsZC5kZWVwRXF1YWwoeyBwaGFzZTogJ2ZpbmFsaXppbmcnLCBzdGF0dXM6ICdzdGFydGVkJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBsZXQgYSB0aHJvd2luZyBwcm9ncmVzc0NhbGxiYWNrIGFib3J0IHRoZSByb3RhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2soUk9PVCkuZ2V0KCcvYXBpL3YyL3VzZXIvY2hlY2tCYXRjaGluZ1Bhc3N3b3JkRmxvdycpLnF1ZXJ5KHRydWUpLnJlcGx5KDIwMCwgeyBpc0JhdGNoaW5nRmxvd0VuYWJsZWQ6IGZhbHNlIH0pO1xuICAgICAgY29uc3QgY2hhbmdlUGFzc1Njb3BlID0gbm9jayhST09UKVxuICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL2NoYW5nZXBhc3N3b3JkJywgKGJvZHk6IGFueSkgPT4gISFib2R5LmtleWNoYWlucyAmJiAhIWJvZHkudjJfa2V5Y2hhaW5zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNoYW5nZVBhc3N3b3JkKHtcbiAgICAgICAgb2xkUGFzc3dvcmQ6ICdvbGRwdycsXG4gICAgICAgIG5ld1Bhc3N3b3JkOiAnbmV3cHcnLFxuICAgICAgICBwcm9ncmVzc0NhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvYnNlcnZlciBib29tJyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY2hhbmdlUGFzc1Njb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZW1pdHMgbm8gZmluYWxpemluZy9jb21wbGV0ZWQgYW5kIG5vIGxlZ2FjeSBmYWxsYmFjayB3aGVuIHRoZSBiYXRjaGluZy1wYXRoIGZpbmFsIFBPU1QgZmFpbHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpXG4gICAgICAgIC5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JylcbiAgICAgICAgLnF1ZXJ5KHRydWUpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgaXNCYXRjaGluZ0Zsb3dFbmFibGVkOiB0cnVlLCBtYXhCYXRjaFNpemVLQjogOTAwIH0pO1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGNoYW5nZVBhc3NTY29wZSA9IG5vY2soUk9PVCkucG9zdCgnL2FwaS92MS91c2VyL2NoYW5nZXBhc3N3b3JkJykucmVwbHkoNTAwLCB7IGVycm9yOiAnYm9vbScgfSk7XG5cbiAgICAgIGNvbnN0IGV2ZW50czogUGFzc3dvcmRSb3RhdGlvblByb2dyZXNzW10gPSBbXTtcbiAgICAgIGF3YWl0IGJpdGdvXG4gICAgICAgIC5jaGFuZ2VQYXNzd29yZCh7XG4gICAgICAgICAgb2xkUGFzc3dvcmQ6ICdvbGRwdycsXG4gICAgICAgICAgbmV3UGFzc3dvcmQ6ICduZXdwdycsXG4gICAgICAgICAgcHJvZ3Jlc3NDYWxsYmFjazogKHByb2dyZXNzKSA9PiBldmVudHMucHVzaChwcm9ncmVzcyksXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWQoKTtcblxuICAgICAgY2hhbmdlUGFzc1Njb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBldmVudHMuc29tZSgoZSkgPT4gZS5waGFzZSA9PT0gJ2ZpbmFsaXppbmcnICYmIGUuc3RhdHVzID09PSAnY29tcGxldGVkJykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29tcGxldGVzIGV4YWN0bHkgb25jZSB2aWEgbGVnYWN5IGZhbGxiYWNrIHdoZW4gdGhlIGJhdGNoaW5nIGNoZWNrIGZhaWxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jayhST09UKS5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JykucXVlcnkodHJ1ZSkucmVwbHkoNTAzLCB7IGVycm9yOiAnc2VydmljZSB1bmF2YWlsYWJsZScgfSk7XG4gICAgICBub2NrKFJPT1QpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvY2hhbmdlcGFzc3dvcmQnLCAoYm9keTogYW55KSA9PiAhIWJvZHkua2V5Y2hhaW5zICYmICEhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgY29uc3QgZXZlbnRzOiBQYXNzd29yZFJvdGF0aW9uUHJvZ3Jlc3NbXSA9IFtdO1xuICAgICAgYXdhaXQgYml0Z28uY2hhbmdlUGFzc3dvcmQoe1xuICAgICAgICBvbGRQYXNzd29yZDogJ29sZHB3JyxcbiAgICAgICAgbmV3UGFzc3dvcmQ6ICduZXdwdycsXG4gICAgICAgIHByb2dyZXNzQ2FsbGJhY2s6IChwcm9ncmVzcykgPT4gZXZlbnRzLnB1c2gocHJvZ3Jlc3MpLFxuICAgICAgfSk7XG5cbiAgICAgIGV2ZW50cy5maWx0ZXIoKGUpID0+IGUucGhhc2UgPT09ICdmaW5hbGl6aW5nJyAmJiBlLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBhZGQga2V5Y2hhaW4gZXZlbnRzIG9yIGRvdWJsZS1jb3VudCB3aGVuIGEgdHJhbnNwb3J0IGJhdGNoIGlzIHJldHJpZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKFJPT1QpXG4gICAgICAgIC5nZXQoJy9hcGkvdjIvdXNlci9jaGVja0JhdGNoaW5nUGFzc3dvcmRGbG93JylcbiAgICAgICAgLnF1ZXJ5KHRydWUpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgaXNCYXRjaGluZ0Zsb3dFbmFibGVkOiB0cnVlLCBtYXhCYXRjaFNpemVLQjogOTAwIH0pO1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS5yZXBseSg1MDAsIHsgZXJyb3I6ICd0cmFuc2llbnQnIH0pO1xuICAgICAgbm9jayhST09UKS5wdXQoJy9hcGkvdjIvdXNlci9rZXljaGFpbnMnKS5yZXBseSgyMDAsIHt9KTtcbiAgICAgIG5vY2soUk9PVClcbiAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9jaGFuZ2VwYXNzd29yZCcsIChib2R5OiBhbnkpID0+ICFib2R5LmtleWNoYWlucyAmJiAhYm9keS52Ml9rZXljaGFpbnMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgdjFVcGRhdGVQYXNzd29yZFN0dWIuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgcHJvZ3Jlc3NDYWxsYmFjaz86IChwOiB1bmtub3duKSA9PiB2b2lkIH0pID0+IHtcbiAgICAgICAgcGFyYW1zLnByb2dyZXNzQ2FsbGJhY2s/Lih7IHN0YXR1czogJ3VwZGF0ZWQnLCBjdXJyZW50S2V5Y2hhaW5JZDogJ3hwdWIxJyB9KTtcbiAgICAgICAgcmV0dXJuIHsga2V5Y2hhaW5zOiB7IGsxOiAndjFlbmMnIH0sIHZlcnNpb246IDI1IH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZXZlbnRzOiBQYXNzd29yZFJvdGF0aW9uUHJvZ3Jlc3NbXSA9IFtdO1xuICAgICAgYXdhaXQgYml0Z28uY2hhbmdlUGFzc3dvcmQoe1xuICAgICAgICBvbGRQYXNzd29yZDogJ29sZHB3JyxcbiAgICAgICAgbmV3UGFzc3dvcmQ6ICduZXdwdycsXG4gICAgICAgIHByb2dyZXNzQ2FsbGJhY2s6IChwcm9ncmVzcykgPT4gZXZlbnRzLnB1c2gocHJvZ3Jlc3MpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGtleWNoYWluRXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZSkgPT4gZS5waGFzZSA9PT0gJ2tleWNoYWlucycgJiYgZS5zdGF0dXMgPT09ICd1cGRhdGVkJyk7XG4gICAgICAvLyBvbmUgcmVhbCBrZXljaGFpbiBldmVudCBwbHVzIHRoZSB0ZXJtaW5hbCBkZW5vbWluYXRvciBldmVudCBmb3IgdGhpcyB2MS1vbmx5XG4gICAgICAvLyBhY2NvdW50IOKAlCB0aGUgcmV0cmllZCB0cmFuc3BvcnQgbXVzdCBjb250cmlidXRlIG5laXRoZXIgYSBkdXBsaWNhdGUgZXZlbnRcbiAgICAgIC8vIG5vciBhIGRvdWJsZS1jb3VudCB0byBlaXRoZXJcbiAgICAgIGtleWNoYWluRXZlbnRzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIGtleWNoYWluRXZlbnRzWzBdLnNob3VsZC5oYXZlLnByb3BlcnRpZXMoeyBzdWNjZWVkZWQ6IDEsIHNraXBwZWQ6IDAsIGF0dGVtcHRlZDogMSwgY29tcGxldGVkOiAxIH0pO1xuICAgICAga2V5Y2hhaW5FdmVudHNbMV0uc2hvdWxkLmhhdmUucHJvcGVydGllcyh7IHN1Y2NlZWRlZDogMSwgc2tpcHBlZDogMCwgYXR0ZW1wdGVkOiAxLCBjb21wbGV0ZWQ6IDEsIHRvdGFsOiAxIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlVXNlckVjZGhLZXljaGFpbiAtIGVuY3J5cHRpb25WZXJzaW9uIHRocmVhZGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBST09UID0gJ2h0dHBzOi8vYXBwLmJpdGdvLXRlc3QuY29tJztcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ3Rlc3QnIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgZW5jcnlwdGlvblZlcnNpb246IDIgdG8gZW5jcnlwdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRBc3luY1NweSA9IHNpbm9uLnNweShiaXRnbywgJ2VuY3J5cHQnKTtcbiAgICAgIG5vY2soUk9PVCkucG9zdCgnL2FwaS92MS9rZXljaGFpbicpLnJlcGx5KDIwMCwgeyB4cHViOiAneHB1YjEyMycsIGlkOiAna2V5LWlkJyB9KTtcblxuICAgICAgYXdhaXQgYml0Z28uY3JlYXRlVXNlckVjZGhLZXljaGFpbignbG9naW5QYXNzd29yZCcsIDIpO1xuXG4gICAgICBhc3NlcnQub2soZW5jcnlwdEFzeW5jU3B5LmNhbGxlZE9uY2UpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRBc3luY1NweS5maXJzdENhbGwuYXJnc1swXS5lbmNyeXB0aW9uVmVyc2lvbiwgMik7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGVuY3J5cHRpb25WZXJzaW9uOiB1bmRlZmluZWQgd2hlbiBub3Qgc2V0IChkZWZhdWx0cyB0byB2MSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBlbmNyeXB0QXN5bmNTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdlbmNyeXB0Jyk7XG4gICAgICBub2NrKFJPT1QpLnBvc3QoJy9hcGkvdjEva2V5Y2hhaW4nKS5yZXBseSgyMDAsIHsgeHB1YjogJ3hwdWIxMjMnLCBpZDogJ2tleS1pZCcgfSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLmNyZWF0ZVVzZXJFY2RoS2V5Y2hhaW4oJ2xvZ2luUGFzc3dvcmQnKTtcblxuICAgICAgYXNzZXJ0Lm9rKGVuY3J5cHRBc3luY1NweS5jYWxsZWRPbmNlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNyeXB0QXN5bmNTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uZW5jcnlwdGlvblZlcnNpb24sIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzcGxpdFNlY3JldCAtIGVuY3J5cHRpb25WZXJzaW9uIHRocmVhZGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYml0Z286IEJpdEdvQVBJO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ3Rlc3QnIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgZW5jcnlwdGlvblZlcnNpb246IDIgdG8gZXZlcnkgZW5jcnlwdCBzaGFyZCBjYWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZW5jcnlwdEFzeW5jU3B5ID0gc2lub24uc3B5KGJpdGdvLCAnZW5jcnlwdCcpO1xuICAgICAgY29uc3QgcGFzc3dvcmRzID0gWydwdzEnLCAncHcyJywgJ3B3MyddO1xuXG4gICAgICBhd2FpdCBiaXRnby5zcGxpdFNlY3JldCh7XG4gICAgICAgIHNlZWQ6ICdhJy5yZXBlYXQoNjQpLFxuICAgICAgICBwYXNzd29yZHMsXG4gICAgICAgIG06IDIsXG4gICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiAyLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNyeXB0QXN5bmNTcHkuY2FsbENvdW50LCAzLCAnc2hvdWxkIGVuY3J5cHQgZWFjaCBzaGFyZCcpO1xuICAgICAgZm9yIChjb25zdCBjYWxsIG9mIGVuY3J5cHRBc3luY1NweS5nZXRDYWxscygpKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjYWxsLmFyZ3NbMF0uZW5jcnlwdGlvblZlcnNpb24sIDIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBlbmNyeXB0aW9uVmVyc2lvbjogdW5kZWZpbmVkIHdoZW4gbm90IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRBc3luY1NweSA9IHNpbm9uLnNweShiaXRnbywgJ2VuY3J5cHQnKTtcblxuICAgICAgYXdhaXQgYml0Z28uc3BsaXRTZWNyZXQoe1xuICAgICAgICBzZWVkOiAnYicucmVwZWF0KDY0KSxcbiAgICAgICAgcGFzc3dvcmRzOiBbJ3B3MScsICdwdzInXSxcbiAgICAgICAgbTogMixcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdEFzeW5jU3B5LmNhbGxDb3VudCwgMik7XG4gICAgICBmb3IgKGNvbnN0IGNhbGwgb2YgZW5jcnlwdEFzeW5jU3B5LmdldENhbGxzKCkpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNhbGwuYXJnc1swXS5lbmNyeXB0aW9uVmVyc2lvbiwgdW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3dhbGxldHMoKSB2MSBmYWNhZGUnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdyZXR1cm5zIEJpdEdvQXBpVjFXYWxsZXRzIHdpdGggYml0Z28gcmVmZXJlbmNlIGFuZCBhbGwgcHJvdG90eXBlIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBjb25zdCB3YWxsZXRzID0gYml0Z28ud2FsbGV0cygpO1xuICAgIHdhbGxldHMuYml0Z28uc2hvdWxkLmVxdWFsKGJpdGdvKTtcbiAgICB3YWxsZXRzLmxpc3Quc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmdldC5zaG91bGQuYmUuYS5GdW5jdGlvbigpO1xuICAgIHdhbGxldHMuZ2V0V2FsbGV0LnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gICAgd2FsbGV0cy5hZGQuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLnJlbW92ZS5zaG91bGQuYmUuYS5GdW5jdGlvbigpO1xuICAgIHdhbGxldHMuYWNjZXB0U2hhcmUuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmNyZWF0ZVdhbGxldFdpdGhLZXljaGFpbnMuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmNyZWF0ZUZvcndhcmRXYWxsZXQuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmNyZWF0ZUtleS5zaG91bGQuYmUuYS5GdW5jdGlvbigpO1xuICAgIHdhbGxldHMubGlzdEludml0ZXMuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLmNhbmNlbEludml0ZS5zaG91bGQuYmUuYS5GdW5jdGlvbigpO1xuICAgIHdhbGxldHMubGlzdFNoYXJlcy5zaG91bGQuYmUuYS5GdW5jdGlvbigpO1xuICAgIHdhbGxldHMuZ2V0U2hhcmUuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgICB3YWxsZXRzLnVwZGF0ZVNoYXJlLnNob3VsZC5iZS5hLkZ1bmN0aW9uKCk7XG4gICAgd2FsbGV0cy5jYW5jZWxTaGFyZS5zaG91bGQuYmUuYS5GdW5jdGlvbigpO1xuICAgIHdhbGxldHMucmVzZW5kU2hhcmVJbnZpdGUuc2hvdWxkLmJlLmEuRnVuY3Rpb24oKTtcbiAgfSk7XG59KTtcbiJdfQ==