bitgo 53.0.1 → 53.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,7 +40,7 @@ exports.reducedAmsTokenConfig = {
40
40
  decimalPlaces: 18,
41
41
  asset: 'tip:faketoken',
42
42
  network: {
43
- name: 'BaseChainTestnet',
43
+ name: 'Data Network Testnet',
44
44
  },
45
45
  primaryKeyCurve: 'secp256k1',
46
46
  contractAddress: '0x1234567890123456789012345678901234567890',
@@ -62,11 +62,33 @@ exports.reducedAmsTokenConfig = {
62
62
  decimalPlaces: 18,
63
63
  asset: 'thypeevm:faketoken',
64
64
  network: {
65
- name: 'HyperliquidTestnet',
65
+ name: 'HyperliquidEVMTestnet',
66
66
  },
67
67
  primaryKeyCurve: 'secp256k1',
68
68
  contractAddress: '0xabcdefabcdefabcdefabcdefabcdefabcdefabcd',
69
69
  },
70
70
  ],
71
+ 'tbsc:faketoken': [
72
+ {
73
+ id: 'c3d4e5f6-a7b8-4901-9cde-f123456789ab',
74
+ fullName: 'Testnet BNB fake token',
75
+ name: 'tbsc:faketoken',
76
+ prefix: '',
77
+ suffix: 'TBSC:FAKETOKEN',
78
+ baseUnit: 'wei',
79
+ kind: 'crypto',
80
+ family: 'bsc',
81
+ isToken: true,
82
+ additionalFeatures: [],
83
+ excludedFeatures: [],
84
+ decimalPlaces: 18,
85
+ asset: 'tbsc:faketoken',
86
+ network: {
87
+ name: 'BinanceSmartChainTestnet',
88
+ },
89
+ primaryKeyCurve: 'secp256k1',
90
+ contractAddress: '0x9876543210987654321098765432109876543210',
91
+ },
92
+ ],
71
93
  };
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1zVG9rZW5Db25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3YyL3Jlc291cmNlcy9hbXNUb2tlbkNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLHFCQUFxQixHQUFHO0lBQ25DLGlCQUFpQixFQUFFO1FBQ2pCO1lBQ0UsRUFBRSxFQUFFLHNDQUFzQztZQUMxQyxRQUFRLEVBQUUsMEJBQTBCO1lBQ3BDLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsTUFBTSxFQUFFLEVBQUU7WUFDVixNQUFNLEVBQUUsaUJBQWlCO1lBQ3pCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRSxJQUFJO1lBQ2Isa0JBQWtCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztZQUN4QyxnQkFBZ0IsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1lBQ3pDLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxPQUFPO2FBQ2Q7WUFDRCxlQUFlLEVBQUUsV0FBVztZQUM1QixlQUFlLEVBQUUsNENBQTRDO1NBQzlEO0tBQ0Y7SUFDRCxlQUFlLEVBQUU7UUFDZjtZQUNFLEVBQUUsRUFBRSxzQ0FBc0M7WUFDMUMsUUFBUSxFQUFFLGdDQUFnQztZQUMxQyxJQUFJLEVBQUUsZUFBZTtZQUNyQixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsSUFBSTtZQUNaLE9BQU8sRUFBRSxJQUFJO1lBQ2Isa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxlQUFlO1lBQ3RCLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsa0JBQWtCO2FBQ3pCO1lBQ0QsZUFBZSxFQUFFLFdBQVc7WUFDNUIsZUFBZSxFQUFFLDRDQUE0QztTQUM5RDtLQUNGO0lBQ0Qsb0JBQW9CLEVBQUU7UUFDcEI7WUFDRSxFQUFFLEVBQUUsc0NBQXNDO1lBQzFDLFFBQVEsRUFBRSxtQ0FBbUM7WUFDN0MsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxvQkFBb0I7WUFDNUIsUUFBUSxFQUFFLEtBQUs7WUFDZixJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE9BQU8sRUFBRSxJQUFJO1lBQ2Isa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxvQkFBb0I7WUFDM0IsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxvQkFBb0I7YUFDM0I7WUFDRCxlQUFlLEVBQUUsV0FBVztZQUM1QixlQUFlLEVBQUUsNENBQTRDO1NBQzlEO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHJlZHVjZWRBbXNUb2tlbkNvbmZpZyA9IHtcbiAgJ2h0ZXRoOmZha2V0b2tlbic6IFtcbiAgICB7XG4gICAgICBpZDogJzQ5ZmY0OWVhLTMzNTUtNDcxNy1iYmIwLTVlOGY1Y2FlMjIwMScsXG4gICAgICBmdWxsTmFtZTogJ0hvb2RpIFRlc3RuZXQgZmFrZSB0b2tlbicsXG4gICAgICBuYW1lOiAnaHRldGg6ZmFrZXRva2VuJyxcbiAgICAgIHByZWZpeDogJycsXG4gICAgICBzdWZmaXg6ICdIVEVUSDpGQUtFVE9LRU4nLFxuICAgICAgYmFzZVVuaXQ6ICd3ZWknLFxuICAgICAga2luZDogJ2NyeXB0bycsXG4gICAgICBmYW1pbHk6ICdldGgnLFxuICAgICAgaXNUb2tlbjogdHJ1ZSxcbiAgICAgIGFkZGl0aW9uYWxGZWF0dXJlczogWydidWxrLXRyYW5zYWN0aW9uJ10sXG4gICAgICBleGNsdWRlZEZlYXR1cmVzOiBbJ2N1c3RvZHktYml0Z28ta29yZWEnXSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IDYsXG4gICAgICBhc3NldDogJ2h0ZXRoOmZha2V0b2tlbicsXG4gICAgICBuZXR3b3JrOiB7XG4gICAgICAgIG5hbWU6ICdIb29kaScsXG4gICAgICB9LFxuICAgICAgcHJpbWFyeUtleUN1cnZlOiAnc2VjcDI1NmsxJyxcbiAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4ODlhOTU5YjkxODRiNGY4Yzg2MzM2NDZkNWRmZDA0OWQyZWJjOTgzYScsXG4gICAgfSxcbiAgXSxcbiAgJ3RpcDpmYWtldG9rZW4nOiBbXG4gICAge1xuICAgICAgaWQ6ICdhMWIyYzNkNC1lNWY2LTQ3ODktOGFiYy1kZWYxMjM0NTY3ODknLFxuICAgICAgZnVsbE5hbWU6ICdEYXRhIE5ldHdvcmsgVGVzdG5ldCBGYWtldG9rZW4nLFxuICAgICAgbmFtZTogJ3RpcDpmYWtldG9rZW4nLFxuICAgICAgcHJlZml4OiAnJyxcbiAgICAgIHN1ZmZpeDogJ1RJUDpGQUtFVE9LRU4nLFxuICAgICAgYmFzZVVuaXQ6ICd3ZWknLFxuICAgICAga2luZDogJ2NyeXB0bycsXG4gICAgICBmYW1pbHk6ICdpcCcsXG4gICAgICBpc1Rva2VuOiB0cnVlLFxuICAgICAgYWRkaXRpb25hbEZlYXR1cmVzOiBbXSxcbiAgICAgIGV4Y2x1ZGVkRmVhdHVyZXM6IFtdLFxuICAgICAgZGVjaW1hbFBsYWNlczogMTgsXG4gICAgICBhc3NldDogJ3RpcDpmYWtldG9rZW4nLFxuICAgICAgbmV0d29yazoge1xuICAgICAgICBuYW1lOiAnQmFzZUNoYWluVGVzdG5ldCcsXG4gICAgICB9LFxuICAgICAgcHJpbWFyeUtleUN1cnZlOiAnc2VjcDI1NmsxJyxcbiAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCcsXG4gICAgfSxcbiAgXSxcbiAgJ3RoeXBlZXZtOmZha2V0b2tlbic6IFtcbiAgICB7XG4gICAgICBpZDogJ2IyYzNkNGU1LWY2YTctNDg5MC05YmNkLWVmMDEyMzQ1Njc4YScsXG4gICAgICBmdWxsTmFtZTogJ0h5cGVybGlxdWlkIEVWTSBUZXN0bmV0IEZha2V0b2tlbicsXG4gICAgICBuYW1lOiAndGh5cGVldm06ZmFrZXRva2VuJyxcbiAgICAgIHByZWZpeDogJycsXG4gICAgICBzdWZmaXg6ICdUSFlQRUVWTTpGQUtFVE9LRU4nLFxuICAgICAgYmFzZVVuaXQ6ICd3ZWknLFxuICAgICAga2luZDogJ2NyeXB0bycsXG4gICAgICBmYW1pbHk6ICdoeXBlZXZtJyxcbiAgICAgIGlzVG9rZW46IHRydWUsXG4gICAgICBhZGRpdGlvbmFsRmVhdHVyZXM6IFtdLFxuICAgICAgZXhjbHVkZWRGZWF0dXJlczogW10sXG4gICAgICBkZWNpbWFsUGxhY2VzOiAxOCxcbiAgICAgIGFzc2V0OiAndGh5cGVldm06ZmFrZXRva2VuJyxcbiAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgbmFtZTogJ0h5cGVybGlxdWlkVGVzdG5ldCcsXG4gICAgICB9LFxuICAgICAgcHJpbWFyeUtleUN1cnZlOiAnc2VjcDI1NmsxJyxcbiAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4YWJjZGVmYWJjZGVmYWJjZGVmYWJjZGVmYWJjZGVmYWJjZGVmYWJjZCcsXG4gICAgfSxcbiAgXSxcbn07XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1zVG9rZW5Db25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3YyL3Jlc291cmNlcy9hbXNUb2tlbkNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLHFCQUFxQixHQUFHO0lBQ25DLGlCQUFpQixFQUFFO1FBQ2pCO1lBQ0UsRUFBRSxFQUFFLHNDQUFzQztZQUMxQyxRQUFRLEVBQUUsMEJBQTBCO1lBQ3BDLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsTUFBTSxFQUFFLEVBQUU7WUFDVixNQUFNLEVBQUUsaUJBQWlCO1lBQ3pCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRSxJQUFJO1lBQ2Isa0JBQWtCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztZQUN4QyxnQkFBZ0IsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1lBQ3pDLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxPQUFPO2FBQ2Q7WUFDRCxlQUFlLEVBQUUsV0FBVztZQUM1QixlQUFlLEVBQUUsNENBQTRDO1NBQzlEO0tBQ0Y7SUFDRCxlQUFlLEVBQUU7UUFDZjtZQUNFLEVBQUUsRUFBRSxzQ0FBc0M7WUFDMUMsUUFBUSxFQUFFLGdDQUFnQztZQUMxQyxJQUFJLEVBQUUsZUFBZTtZQUNyQixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsSUFBSTtZQUNaLE9BQU8sRUFBRSxJQUFJO1lBQ2Isa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxlQUFlO1lBQ3RCLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsc0JBQXNCO2FBQzdCO1lBQ0QsZUFBZSxFQUFFLFdBQVc7WUFDNUIsZUFBZSxFQUFFLDRDQUE0QztTQUM5RDtLQUNGO0lBQ0Qsb0JBQW9CLEVBQUU7UUFDcEI7WUFDRSxFQUFFLEVBQUUsc0NBQXNDO1lBQzFDLFFBQVEsRUFBRSxtQ0FBbUM7WUFDN0MsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxvQkFBb0I7WUFDNUIsUUFBUSxFQUFFLEtBQUs7WUFDZixJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE9BQU8sRUFBRSxJQUFJO1lBQ2Isa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxvQkFBb0I7WUFDM0IsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSx1QkFBdUI7YUFDOUI7WUFDRCxlQUFlLEVBQUUsV0FBVztZQUM1QixlQUFlLEVBQUUsNENBQTRDO1NBQzlEO0tBQ0Y7SUFDRCxnQkFBZ0IsRUFBRTtRQUNoQjtZQUNFLEVBQUUsRUFBRSxzQ0FBc0M7WUFDMUMsUUFBUSxFQUFFLHdCQUF3QjtZQUNsQyxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsTUFBTSxFQUFFLGdCQUFnQjtZQUN4QixRQUFRLEVBQUUsS0FBSztZQUNmLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsSUFBSTtZQUNiLGtCQUFrQixFQUFFLEVBQUU7WUFDdEIsZ0JBQWdCLEVBQUUsRUFBRTtZQUNwQixhQUFhLEVBQUUsRUFBRTtZQUNqQixLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsMEJBQTBCO2FBQ2pDO1lBQ0QsZUFBZSxFQUFFLFdBQVc7WUFDNUIsZUFBZSxFQUFFLDRDQUE0QztTQUM5RDtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCByZWR1Y2VkQW1zVG9rZW5Db25maWcgPSB7XG4gICdodGV0aDpmYWtldG9rZW4nOiBbXG4gICAge1xuICAgICAgaWQ6ICc0OWZmNDllYS0zMzU1LTQ3MTctYmJiMC01ZThmNWNhZTIyMDEnLFxuICAgICAgZnVsbE5hbWU6ICdIb29kaSBUZXN0bmV0IGZha2UgdG9rZW4nLFxuICAgICAgbmFtZTogJ2h0ZXRoOmZha2V0b2tlbicsXG4gICAgICBwcmVmaXg6ICcnLFxuICAgICAgc3VmZml4OiAnSFRFVEg6RkFLRVRPS0VOJyxcbiAgICAgIGJhc2VVbml0OiAnd2VpJyxcbiAgICAgIGtpbmQ6ICdjcnlwdG8nLFxuICAgICAgZmFtaWx5OiAnZXRoJyxcbiAgICAgIGlzVG9rZW46IHRydWUsXG4gICAgICBhZGRpdGlvbmFsRmVhdHVyZXM6IFsnYnVsay10cmFuc2FjdGlvbiddLFxuICAgICAgZXhjbHVkZWRGZWF0dXJlczogWydjdXN0b2R5LWJpdGdvLWtvcmVhJ10sXG4gICAgICBkZWNpbWFsUGxhY2VzOiA2LFxuICAgICAgYXNzZXQ6ICdodGV0aDpmYWtldG9rZW4nLFxuICAgICAgbmV0d29yazoge1xuICAgICAgICBuYW1lOiAnSG9vZGknLFxuICAgICAgfSxcbiAgICAgIHByaW1hcnlLZXlDdXJ2ZTogJ3NlY3AyNTZrMScsXG4gICAgICBjb250cmFjdEFkZHJlc3M6ICcweDg5YTk1OWI5MTg0YjRmOGM4NjMzNjQ2ZDVkZmQwNDlkMmViYzk4M2EnLFxuICAgIH0sXG4gIF0sXG4gICd0aXA6ZmFrZXRva2VuJzogW1xuICAgIHtcbiAgICAgIGlkOiAnYTFiMmMzZDQtZTVmNi00Nzg5LThhYmMtZGVmMTIzNDU2Nzg5JyxcbiAgICAgIGZ1bGxOYW1lOiAnRGF0YSBOZXR3b3JrIFRlc3RuZXQgRmFrZXRva2VuJyxcbiAgICAgIG5hbWU6ICd0aXA6ZmFrZXRva2VuJyxcbiAgICAgIHByZWZpeDogJycsXG4gICAgICBzdWZmaXg6ICdUSVA6RkFLRVRPS0VOJyxcbiAgICAgIGJhc2VVbml0OiAnd2VpJyxcbiAgICAgIGtpbmQ6ICdjcnlwdG8nLFxuICAgICAgZmFtaWx5OiAnaXAnLFxuICAgICAgaXNUb2tlbjogdHJ1ZSxcbiAgICAgIGFkZGl0aW9uYWxGZWF0dXJlczogW10sXG4gICAgICBleGNsdWRlZEZlYXR1cmVzOiBbXSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IDE4LFxuICAgICAgYXNzZXQ6ICd0aXA6ZmFrZXRva2VuJyxcbiAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgbmFtZTogJ0RhdGEgTmV0d29yayBUZXN0bmV0JyxcbiAgICAgIH0sXG4gICAgICBwcmltYXJ5S2V5Q3VydmU6ICdzZWNwMjU2azEnLFxuICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHgxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwJyxcbiAgICB9LFxuICBdLFxuICAndGh5cGVldm06ZmFrZXRva2VuJzogW1xuICAgIHtcbiAgICAgIGlkOiAnYjJjM2Q0ZTUtZjZhNy00ODkwLTliY2QtZWYwMTIzNDU2NzhhJyxcbiAgICAgIGZ1bGxOYW1lOiAnSHlwZXJsaXF1aWQgRVZNIFRlc3RuZXQgRmFrZXRva2VuJyxcbiAgICAgIG5hbWU6ICd0aHlwZWV2bTpmYWtldG9rZW4nLFxuICAgICAgcHJlZml4OiAnJyxcbiAgICAgIHN1ZmZpeDogJ1RIWVBFRVZNOkZBS0VUT0tFTicsXG4gICAgICBiYXNlVW5pdDogJ3dlaScsXG4gICAgICBraW5kOiAnY3J5cHRvJyxcbiAgICAgIGZhbWlseTogJ2h5cGVldm0nLFxuICAgICAgaXNUb2tlbjogdHJ1ZSxcbiAgICAgIGFkZGl0aW9uYWxGZWF0dXJlczogW10sXG4gICAgICBleGNsdWRlZEZlYXR1cmVzOiBbXSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IDE4LFxuICAgICAgYXNzZXQ6ICd0aHlwZWV2bTpmYWtldG9rZW4nLFxuICAgICAgbmV0d29yazoge1xuICAgICAgICBuYW1lOiAnSHlwZXJsaXF1aWRFVk1UZXN0bmV0JyxcbiAgICAgIH0sXG4gICAgICBwcmltYXJ5S2V5Q3VydmU6ICdzZWNwMjU2azEnLFxuICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHhhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkJyxcbiAgICB9LFxuICBdLFxuICAndGJzYzpmYWtldG9rZW4nOiBbXG4gICAge1xuICAgICAgaWQ6ICdjM2Q0ZTVmNi1hN2I4LTQ5MDEtOWNkZS1mMTIzNDU2Nzg5YWInLFxuICAgICAgZnVsbE5hbWU6ICdUZXN0bmV0IEJOQiBmYWtlIHRva2VuJyxcbiAgICAgIG5hbWU6ICd0YnNjOmZha2V0b2tlbicsXG4gICAgICBwcmVmaXg6ICcnLFxuICAgICAgc3VmZml4OiAnVEJTQzpGQUtFVE9LRU4nLFxuICAgICAgYmFzZVVuaXQ6ICd3ZWknLFxuICAgICAga2luZDogJ2NyeXB0bycsXG4gICAgICBmYW1pbHk6ICdic2MnLFxuICAgICAgaXNUb2tlbjogdHJ1ZSxcbiAgICAgIGFkZGl0aW9uYWxGZWF0dXJlczogW10sXG4gICAgICBleGNsdWRlZEZlYXR1cmVzOiBbXSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IDE4LFxuICAgICAgYXNzZXQ6ICd0YnNjOmZha2V0b2tlbicsXG4gICAgICBuZXR3b3JrOiB7XG4gICAgICAgIG5hbWU6ICdCaW5hbmNlU21hcnRDaGFpblRlc3RuZXQnLFxuICAgICAgfSxcbiAgICAgIHByaW1hcnlLZXlDdXJ2ZTogJ3NlY3AyNTZrMScsXG4gICAgICBjb250cmFjdEFkZHJlc3M6ICcweDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTAnLFxuICAgIH0sXG4gIF0sXG59O1xuIl19
@@ -6,6 +6,8 @@ const sdk_core_1 = require("@bitgo/sdk-core");
6
6
  const sdk_test_1 = require("@bitgo/sdk-test");
7
7
  const src_1 = require("../../../../src");
8
8
  const amsTokenConfig_1 = require("../../resources/amsTokenConfig");
9
+ const sdk_coin_evm_1 = require("@bitgo/sdk-coin-evm");
10
+ const sdk_coin_bsc_1 = require("@bitgo/sdk-coin-bsc");
9
11
  describe('Asset metadata service', () => {
10
12
  const microservicesUri = sdk_core_1.Environments['mock'].uri;
11
13
  let bitgo;
@@ -127,6 +129,38 @@ describe('Asset metadata service', () => {
127
129
  }
128
130
  staticsCoin.family.should.equal('hypeevm');
129
131
  });
132
+ it('should register an AMS-only token on a new-gen EVM family via the lazy path', async () => {
133
+ const bitgo = sdk_test_1.TestBitGo.decorate(src_1.BitGo, { env: 'mock', microservicesUri, useAms: true });
134
+ bitgo.initializeTestVars();
135
+ const tokenName = 'thypeevm:faketoken';
136
+ // Setup nocks for AMS API call
137
+ nock(microservicesUri).get(`/api/v1/assets/name/${tokenName}`).reply(200, amsTokenConfig_1.reducedAmsTokenConfig[tokenName][0]);
138
+ await bitgo.registerToken(tokenName);
139
+ const coin = bitgo.coin(tokenName);
140
+ should.exist(coin);
141
+ coin.type.should.equal(tokenName);
142
+ coin.tokenContractAddress.should.equal('0xabcdefabcdefabcdefabcdefabcdefabcdefabcd');
143
+ });
144
+ it('should register a statics ERC721 token on a dual-standard EVM family via the lazy path', async () => {
145
+ const bitgo = sdk_test_1.TestBitGo.decorate(src_1.BitGo, { env: 'mock', microservicesUri, useAms: true });
146
+ bitgo.initializeTestVars();
147
+ const tokenName = 'erc721:hbarevmtoken';
148
+ await bitgo.registerToken(tokenName);
149
+ const coin = bitgo.coin(tokenName);
150
+ should.exist(coin);
151
+ coin.type.should.equal(tokenName);
152
+ coin.should.be.an.instanceOf(sdk_coin_evm_1.EthLikeErc721Token);
153
+ });
154
+ it('should register a testnet ERC721 token on a dual-standard EVM family via the lazy path', async () => {
155
+ const bitgo = sdk_test_1.TestBitGo.decorate(src_1.BitGo, { env: 'mock', microservicesUri, useAms: true });
156
+ bitgo.initializeTestVars();
157
+ const tokenName = 'thbarevm:tmnft';
158
+ await bitgo.registerToken(tokenName);
159
+ const coin = bitgo.coin(tokenName);
160
+ should.exist(coin);
161
+ coin.type.should.equal(tokenName);
162
+ coin.should.be.an.instanceOf(sdk_coin_evm_1.EthLikeErc721Token);
163
+ });
130
164
  it('should register a SOL token from statics library if available', async () => {
131
165
  const bitgo = sdk_test_1.TestBitGo.decorate(src_1.BitGo, { env: 'mock', microservicesUri, useAms: true });
132
166
  bitgo.initializeTestVars();
@@ -144,5 +178,32 @@ describe('Asset metadata service', () => {
144
178
  coin.type.should.equal('tsol:usdc');
145
179
  coin.getBaseFactor().should.equal(1e9);
146
180
  });
181
+ it('should resolve an AMS-only token on a new-gen EVM family after initCoinFactory', () => {
182
+ bitgo.initCoinFactory(amsTokenConfig_1.reducedAmsTokenConfig);
183
+ const coin = bitgo.coin('thypeevm:faketoken');
184
+ should.exist(coin);
185
+ coin.type.should.equal('thypeevm:faketoken');
186
+ coin.name.should.equal('Hyperliquid EVM Testnet Faketoken');
187
+ coin.decimalPlaces.should.equal(18);
188
+ coin.tokenContractAddress.should.equal('0xabcdefabcdefabcdefabcdefabcdefabcdefabcd');
189
+ });
190
+ it('should resolve an AMS-only token on a legacy EVM family after initCoinFactory', () => {
191
+ bitgo.initCoinFactory(amsTokenConfig_1.reducedAmsTokenConfig);
192
+ const coin = bitgo.coin('tbsc:faketoken');
193
+ should.exist(coin);
194
+ coin.type.should.equal('tbsc:faketoken');
195
+ coin.name.should.equal('Testnet BNB fake token');
196
+ coin.decimalPlaces.should.equal(18);
197
+ coin.tokenContractAddress.should.equal('0x9876543210987654321098765432109876543210');
198
+ // AMS-only tokens on legacy families are registered through the family-agnostic
199
+ // EthLikeErc20Token, not the legacy BscToken class.
200
+ coin.should.be.an.instanceOf(sdk_coin_evm_1.EthLikeErc20Token);
201
+ });
202
+ it('should not flip a statics token on a legacy EVM family to the generic token class', () => {
203
+ bitgo.initCoinFactory(amsTokenConfig_1.reducedAmsTokenConfig);
204
+ const coin = bitgo.coin('bsc:solv');
205
+ should.exist(coin);
206
+ coin.should.be.an.instanceOf(sdk_coin_bsc_1.BscToken);
207
+ });
147
208
  });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC92Mi91bml0L2Ftcy9hbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBa0M7QUFDbEMsNkJBQThCO0FBRTlCLDhDQUErQztBQUMvQyw4Q0FBNEM7QUFDNUMseUNBQXNEO0FBQ3RELG1FQUF1RTtBQUV2RSxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsdUJBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDbEQsSUFBSSxLQUFLLENBQUM7SUFDVixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsV0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFrQixDQUFDLENBQUM7UUFDbkcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxzQ0FBcUIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ25GLE1BQU0sVUFBVSxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLFdBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBUyxDQUFDLENBQUM7UUFDdEcsVUFBVSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDaEMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxzQ0FBcUIsQ0FBQyxDQUFDO1FBQ2xELENBQUMsR0FBRyxFQUFFO1lBQ0osVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2IsdU5BQXVOLENBQ3hOLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7UUFDaEUsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDcEMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hGLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLFdBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBa0IsQ0FBQyxDQUFDO1FBQ3pHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTNCLGNBQWM7UUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLHNDQUFxQixDQUFDLENBQUM7UUFFNUYsTUFBTSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1FBQzdCLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxRCxNQUFNLFVBQVUsR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxXQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtCLENBQUMsQ0FBQztZQUMvRyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUVoQyxNQUFNLFVBQVU7aUJBQ2IsYUFBYSxDQUFDLGlCQUFpQixDQUFDO2lCQUNoQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBQzFGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLFdBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBa0IsQ0FBQyxDQUFDO1lBQ3pHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzNCLE1BQU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2pGLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLFdBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBa0IsQ0FBQyxDQUFDO1lBQ3pHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBRTNCLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDO1lBRXBDLGNBQWM7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxzQ0FBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9HLE1BQU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDeEQsTUFBTSxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsV0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFrQixDQUFDLENBQUM7WUFDekcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFM0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBRXhCLE1BQU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0VBQW9FLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEYsTUFBTSxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsV0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFrQixDQUFDLENBQUM7WUFDekcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDM0IsTUFBTSxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxRCxNQUFNLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxXQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWtCLENBQUMsQ0FBQztZQUN6RyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUUzQixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUM7WUFFbEMsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLHNDQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFL0csTUFBTSxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxXQUFXLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsbUVBQW1FO1lBQ25FLElBQUksaUJBQWlCLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDbkUsV0FBVyxDQUFDLGVBQTBCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQ3JHLENBQUM7WUFDRCxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEUsTUFBTSxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsV0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFrQixDQUFDLENBQUM7WUFDekcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFM0IsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUM7WUFFdkMsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLHNDQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFL0csTUFBTSxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxXQUFXLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsbUVBQW1FO1lBQ25FLElBQUksaUJBQWlCLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDbkUsV0FBVyxDQUFDLGVBQTBCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQ3JHLENBQUM7WUFDRCxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0UsTUFBTSxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsV0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFrQixDQUFDLENBQUM7WUFDekcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDM0IsTUFBTSxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyRkFBMkYsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6RyxLQUFLLENBQUMsZUFBZSxDQUFDLHNDQUFxQixDQUFDLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCA9IHJlcXVpcmUoJ3Nob3VsZCcpO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5cbmltcG9ydCB7IEVudmlyb25tZW50cyB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R28sIEJpdEdvT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyByZWR1Y2VkQW1zVG9rZW5Db25maWcgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYW1zVG9rZW5Db25maWcnO1xuXG5kZXNjcmliZSgnQXNzZXQgbWV0YWRhdGEgc2VydmljZScsICgpID0+IHtcbiAgY29uc3QgbWljcm9zZXJ2aWNlc1VyaSA9IEVudmlyb25tZW50c1snbW9jayddLnVyaTtcbiAgbGV0IGJpdGdvO1xuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvLCB7IGVudjogJ21vY2snLCBtaWNyb3NlcnZpY2VzVXJpLCB1c2VBbXM6IHRydWUgfSBhcyBCaXRHb09wdGlvbnMpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNyZWF0ZSBhIGN1c3RvbSBjb2luIGZhY3RvcnkgZnJvbSBhbXMgcmVzcG9uc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgYml0Z28uaW5pdENvaW5GYWN0b3J5KHJlZHVjZWRBbXNUb2tlbkNvbmZpZyk7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ2h0ZXRoOmZha2V0b2tlbicpO1xuICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgICBjb2luLnR5cGUuc2hvdWxkLmVxdWFsKCdodGV0aDpmYWtldG9rZW4nKTtcbiAgICBjb2luLm5hbWUuc2hvdWxkLmVxdWFsKCdIb29kaSBUZXN0bmV0IGZha2UgdG9rZW4nKTtcbiAgICBjb2luLmRlY2ltYWxQbGFjZXMuc2hvdWxkLmVxdWFsKDYpO1xuICAgIGNvaW4udG9rZW5Db250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweDg5YTk1OWI5MTg0YjRmOGM4NjMzNjQ2ZDVkZmQwNDlkMmViYzk4M2EnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgZmV0Y2ggY29pbiBmcm9tIGN1c3RvbSBjb2luIGZhY3Rvcnkgd2hlbiB1c2VBbXMgaXMgZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z29Ob0FtcyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiBmYWxzZSB9IGFzIGFueSk7XG4gICAgYml0Z29Ob0Ftcy5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiaXRnb05vQW1zLmluaXRDb2luRmFjdG9yeShyZWR1Y2VkQW1zVG9rZW5Db25maWcpO1xuICAgICgoKSA9PiB7XG4gICAgICBiaXRnb05vQW1zLmNvaW4oJ2h0ZXRoOmZha2V0b2tlbicpO1xuICAgIH0pLnNob3VsZC50aHJvdyhcbiAgICAgICdDb2luIG9yIHRva2VuIHR5cGUgaHRldGg6ZmFrZXRva2VuIG5vdCBzdXBwb3J0ZWQgb3Igbm90IGNvbXBpbGVkLiBQbGVhc2UgYmUgc3VyZSB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEJpdEdvSlMuIElmIHVzaW5nIEBiaXRnby9zZGstYXBpLCBwbGVhc2UgY29uZmlybSB5b3UgaGF2ZSByZWdpc3RlcmVkIGh0ZXRoOmZha2V0b2tlbiBmaXJzdC4nXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIGEgdG9rZW4gaW4gdGhlIGNvaW4gZmFjdG9yeScsICgpID0+IHtcbiAgICBjb25zdCB0b2tlbk5hbWUgPSAnaHRldGg6ZmFrZXRva2VuJztcbiAgICBiaXRnby5yZWdpc3RlclRva2VuKHRva2VuTmFtZSk7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKTtcbiAgICBzaG91bGQuZXhpc3QoY29pbik7XG4gICAgY29pbi50eXBlLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgIGNvaW4ubmFtZS5zaG91bGQuZXF1YWwoJ0hvb2RpIFRlc3RuZXQgZmFrZSB0b2tlbicpO1xuICAgIGNvaW4uZGVjaW1hbFBsYWNlcy5zaG91bGQuZXF1YWwoNik7XG4gICAgY29pbi50b2tlbkNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoJzB4ODlhOTU5YjkxODRiNGY4Yzg2MzM2NDZkNWRmZDA0OWQyZWJjOTgzYScpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZldGNoIGFsbCBhc3NldHMgZnJvbSBBTVMgYW5kIGluaXRpYWxpemUgdGhlIGNvaW4gZmFjdG9yeScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiB0cnVlIH0gYXMgQml0R29PcHRpb25zKTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgIC8vIFNldHVwIG5vY2tzXG4gICAgbm9jayhtaWNyb3NlcnZpY2VzVXJpKS5nZXQoJy9hcGkvdjEvYXNzZXRzL2xpc3QvdGVzdG5ldCcpLnJlcGx5KDIwMCwgcmVkdWNlZEFtc1Rva2VuQ29uZmlnKTtcblxuICAgIGF3YWl0IGJpdGdvLnJlZ2lzdGVyQWxsVG9rZW5zKCk7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ2h0ZXRoOmZha2V0b2tlbicpO1xuICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlZ2lzdGVyVG9rZW4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHVzZUFtcyBpcyBmYWxzZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJpdGdvTm9BbXMgPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogZmFsc2UgfSBhcyBCaXRHb09wdGlvbnMpO1xuICAgICAgYml0Z29Ob0Ftcy5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgICAgYXdhaXQgYml0Z29Ob0Ftc1xuICAgICAgICAucmVnaXN0ZXJUb2tlbignaHRldGg6ZmFrZXRva2VuJylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3JlZ2lzdGVyVG9rZW4gaXMgb25seSBzdXBwb3J0ZWQgd2hlbiB1c2VBbXMgaXMgc2V0IHRvIHRydWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVnaXN0ZXIgYSB0b2tlbiBmcm9tIHN0YXRpY3MgbGlicmFyeSBpZiBhdmFpbGFibGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiB0cnVlIH0gYXMgQml0R29PcHRpb25zKTtcbiAgICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgICAgYXdhaXQgYml0Z28ucmVnaXN0ZXJUb2tlbignaHRldGg6YmdlcmNodjInKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCdodGV0aDpiZ2VyY2h2MicpO1xuICAgICAgc2hvdWxkLmV4aXN0KGNvaW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmZXRjaCB0b2tlbiBpbmZvcm1hdGlvbiBmcm9tIEFNUyBpZiBub3QgaW4gc3RhdGljcyBsaWJyYXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogdHJ1ZSB9IGFzIEJpdEdvT3B0aW9ucyk7XG4gICAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ2h0ZXRoOmZha2V0b2tlbic7XG5cbiAgICAgIC8vIFNldHVwIG5vY2tzXG4gICAgICBub2NrKG1pY3Jvc2VydmljZXNVcmkpLmdldChgL2FwaS92MS9hc3NldHMvbmFtZS8ke3Rva2VuTmFtZX1gKS5yZXBseSgyMDAsIHJlZHVjZWRBbXNUb2tlbkNvbmZpZ1t0b2tlbk5hbWVdWzBdKTtcblxuICAgICAgYXdhaXQgYml0Z28ucmVnaXN0ZXJUb2tlbih0b2tlbk5hbWUpO1xuICAgICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKTtcbiAgICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgYWJsZSB0byByZWdpc3RlciB0aGUgb2ZjIHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogdHJ1ZSB9IGFzIEJpdEdvT3B0aW9ucyk7XG4gICAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ29mYyc7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnJlZ2lzdGVyVG9rZW4odG9rZW5OYW1lKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSk7XG4gICAgICBzaG91bGQuZXhpc3QoY29pbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGEgRVZNIGNvaW4gdG9rZW4gZnJvbSBzdGF0aWNzIGxpYnJhcnkgaWYgYXZhaWxhYmxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogdHJ1ZSB9IGFzIEJpdEdvT3B0aW9ucyk7XG4gICAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICAgIGF3YWl0IGJpdGdvLnJlZ2lzdGVyVG9rZW4oJ3RpcDp1c2RjJyk7XG4gICAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGlwOnVzZGMnKTtcbiAgICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVnaXN0ZXIgYW4gRVZNIGNvaW4gdG9rZW4gZnJvbSBBTVMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiB0cnVlIH0gYXMgQml0R29PcHRpb25zKTtcbiAgICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuXG4gICAgICBjb25zdCB0b2tlbk5hbWUgPSAndGlwOmZha2V0b2tlbic7XG5cbiAgICAgIC8vIFNldHVwIG5vY2tzIGZvciBBTVMgQVBJIGNhbGxcbiAgICAgIG5vY2sobWljcm9zZXJ2aWNlc1VyaSkuZ2V0KGAvYXBpL3YxL2Fzc2V0cy9uYW1lLyR7dG9rZW5OYW1lfWApLnJlcGx5KDIwMCwgcmVkdWNlZEFtc1Rva2VuQ29uZmlnW3Rva2VuTmFtZV1bMF0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5yZWdpc3RlclRva2VuKHRva2VuTmFtZSk7XG4gICAgICBjb25zdCBjb2luID0gYml0Z28uY29pbih0b2tlbk5hbWUpO1xuICAgICAgc2hvdWxkLmV4aXN0KGNvaW4pO1xuICAgICAgY29pbi50eXBlLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgICAgY29uc3Qgc3RhdGljc0NvaW4gPSBjb2luLmdldENvbmZpZygpO1xuICAgICAgc3RhdGljc0NvaW4ubmFtZS5zaG91bGQuZXF1YWwoJ3RpcCcpO1xuICAgICAgc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcy5zaG91bGQuZXF1YWwoMTgpO1xuICAgICAgLy8gRm9yIEVWTSB0b2tlbnMsIGNvbnRyYWN0QWRkcmVzcyBpcyBhdmFpbGFibGUgb24gdGhlIHN0YXRpY3MgY29pblxuICAgICAgaWYgKCdjb250cmFjdEFkZHJlc3MnIGluIHN0YXRpY3NDb2luICYmIHN0YXRpY3NDb2luLmNvbnRyYWN0QWRkcmVzcykge1xuICAgICAgICAoc3RhdGljc0NvaW4uY29udHJhY3RBZGRyZXNzIGFzIHN0cmluZykuc2hvdWxkLmVxdWFsKCcweDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAnKTtcbiAgICAgIH1cbiAgICAgIHN0YXRpY3NDb2luLmZhbWlseS5zaG91bGQuZXF1YWwoJ2lwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGEgdGh5cGVldm0gRVZNIGNvaW4gdG9rZW4gZnJvbSBBTVMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiB0cnVlIH0gYXMgQml0R29PcHRpb25zKTtcbiAgICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuXG4gICAgICBjb25zdCB0b2tlbk5hbWUgPSAndGh5cGVldm06ZmFrZXRva2VuJztcblxuICAgICAgLy8gU2V0dXAgbm9ja3MgZm9yIEFNUyBBUEkgY2FsbFxuICAgICAgbm9jayhtaWNyb3NlcnZpY2VzVXJpKS5nZXQoYC9hcGkvdjEvYXNzZXRzL25hbWUvJHt0b2tlbk5hbWV9YCkucmVwbHkoMjAwLCByZWR1Y2VkQW1zVG9rZW5Db25maWdbdG9rZW5OYW1lXVswXSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnJlZ2lzdGVyVG9rZW4odG9rZW5OYW1lKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSk7XG4gICAgICBzaG91bGQuZXhpc3QoY29pbik7XG4gICAgICBjb2luLnR5cGUuc2hvdWxkLmVxdWFsKHRva2VuTmFtZSk7XG4gICAgICBjb25zdCBzdGF0aWNzQ29pbiA9IGNvaW4uZ2V0Q29uZmlnKCk7XG4gICAgICBzdGF0aWNzQ29pbi5uYW1lLnNob3VsZC5lcXVhbCgndGh5cGVldm0nKTtcbiAgICAgIHN0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMuc2hvdWxkLmVxdWFsKDE4KTtcbiAgICAgIC8vIEZvciBFVk0gdG9rZW5zLCBjb250cmFjdEFkZHJlc3MgaXMgYXZhaWxhYmxlIG9uIHRoZSBzdGF0aWNzIGNvaW5cbiAgICAgIGlmICgnY29udHJhY3RBZGRyZXNzJyBpbiBzdGF0aWNzQ29pbiAmJiBzdGF0aWNzQ29pbi5jb250cmFjdEFkZHJlc3MpIHtcbiAgICAgICAgKHN0YXRpY3NDb2luLmNvbnRyYWN0QWRkcmVzcyBhcyBzdHJpbmcpLnNob3VsZC5lcXVhbCgnMHhhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkJyk7XG4gICAgICB9XG4gICAgICBzdGF0aWNzQ29pbi5mYW1pbHkuc2hvdWxkLmVxdWFsKCdoeXBlZXZtJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGEgU09MIHRva2VuIGZyb20gc3RhdGljcyBsaWJyYXJ5IGlmIGF2YWlsYWJsZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvLCB7IGVudjogJ21vY2snLCBtaWNyb3NlcnZpY2VzVXJpLCB1c2VBbXM6IHRydWUgfSBhcyBCaXRHb09wdGlvbnMpO1xuICAgICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgICBhd2FpdCBiaXRnby5yZWdpc3RlclRva2VuKCd0c29sOnVzZGMnKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0c29sOnVzZGMnKTtcbiAgICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgICAgIGNvaW4udHlwZS5zaG91bGQuZXF1YWwoJ3Rzb2w6dXNkYycpO1xuICAgICAgY29pbi5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlOSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY3JlYXRlIGEgY3VzdG9tIGNvaW4gZmFjdG9yeSBmcm9tIGFtcyByZXNwb25zZSBhbmQgaW5jbHVkZSBTT0wgdG9rZW5zIGZyb20gc3RhdGljcycsIGFzeW5jICgpID0+IHtcbiAgICBiaXRnby5pbml0Q29pbkZhY3RvcnkocmVkdWNlZEFtc1Rva2VuQ29uZmlnKTtcbiAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndHNvbDp1c2RjJyk7XG4gICAgc2hvdWxkLmV4aXN0KGNvaW4pO1xuICAgIGNvaW4udHlwZS5zaG91bGQuZXF1YWwoJ3Rzb2w6dXNkYycpO1xuICAgIGNvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTkpO1xuICB9KTtcbn0pO1xuIl19
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC92Mi91bml0L2Ftcy9hbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBa0M7QUFDbEMsNkJBQThCO0FBRTlCLDhDQUErQztBQUMvQyw4Q0FBNEM7QUFDNUMseUNBQXNEO0FBQ3RELG1FQUF1RTtBQUN2RSxzREFBNEU7QUFDNUUsc0RBQStDO0FBRS9DLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyx1QkFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNsRCxJQUFJLEtBQUssQ0FBQztJQUNWLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxXQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWtCLENBQUMsQ0FBQztRQUNuRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxLQUFLLENBQUMsZUFBZSxDQUFDLHNDQUFxQixDQUFDLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FB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N0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsdUJBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcblxuaW1wb3J0IHsgRW52aXJvbm1lbnRzIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlc3RCaXRHbyB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHbywgQml0R29PcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IHJlZHVjZWRBbXNUb2tlbkNvbmZpZyB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9hbXNUb2tlbkNvbmZpZyc7XG5pbXBvcnQgeyBFdGhMaWtlRXJjMjBUb2tlbiwgRXRoTGlrZUVyYzcyMVRva2VuIH0gZnJvbSAnQGJpdGdvL3Nkay1jb2luLWV2bSc7XG5pbXBvcnQgeyBCc2NUb2tlbiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1ic2MnO1xuXG5kZXNjcmliZSgnQXNzZXQgbWV0YWRhdGEgc2VydmljZScsICgpID0+IHtcbiAgY29uc3QgbWljcm9zZXJ2aWNlc1VyaSA9IEVudmlyb25tZW50c1snbW9jayddLnVyaTtcbiAgbGV0IGJpdGdvO1xuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvLCB7IGVudjogJ21vY2snLCBtaWNyb3NlcnZpY2VzVXJpLCB1c2VBbXM6IHRydWUgfSBhcyBCaXRHb09wdGlvbnMpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNyZWF0ZSBhIGN1c3RvbSBjb2luIGZhY3RvcnkgZnJvbSBhbXMgcmVzcG9uc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgYml0Z28uaW5pdENvaW5GYWN0b3J5KHJlZHVjZWRBbXNUb2tlbkNvbmZpZyk7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ2h0ZXRoOmZha2V0b2tlbicpO1xuICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgICBjb2luLnR5cGUuc2hvdWxkLmVxdWFsKCdodGV0aDpmYWtldG9rZW4nKTtcbiAgICBjb2luLm5hbWUuc2hvdWxkLmVxdWFsKCdIb29kaSBUZXN0bmV0IGZha2UgdG9rZW4nKTtcbiAgICBjb2luLmRlY2ltYWxQbGFjZXMuc2hvdWxkLmVxdWFsKDYpO1xuICAgIGNvaW4udG9rZW5Db250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweDg5YTk1OWI5MTg0YjRmOGM4NjMzNjQ2ZDVkZmQwNDlkMmViYzk4M2EnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgZmV0Y2ggY29pbiBmcm9tIGN1c3RvbSBjb2luIGZhY3Rvcnkgd2hlbiB1c2VBbXMgaXMgZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z29Ob0FtcyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiBmYWxzZSB9IGFzIGFueSk7XG4gICAgYml0Z29Ob0Ftcy5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiaXRnb05vQW1zLmluaXRDb2luRmFjdG9yeShyZWR1Y2VkQW1zVG9rZW5Db25maWcpO1xuICAgICgoKSA9PiB7XG4gICAgICBiaXRnb05vQW1zLmNvaW4oJ2h0ZXRoOmZha2V0b2tlbicpO1xuICAgIH0pLnNob3VsZC50aHJvdyhcbiAgICAgICdDb2luIG9yIHRva2VuIHR5cGUgaHRldGg6ZmFrZXRva2VuIG5vdCBzdXBwb3J0ZWQgb3Igbm90IGNvbXBpbGVkLiBQbGVhc2UgYmUgc3VyZSB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEJpdEdvSlMuIElmIHVzaW5nIEBiaXRnby9zZGstYXBpLCBwbGVhc2UgY29uZmlybSB5b3UgaGF2ZSByZWdpc3RlcmVkIGh0ZXRoOmZha2V0b2tlbiBmaXJzdC4nXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIGEgdG9rZW4gaW4gdGhlIGNvaW4gZmFjdG9yeScsICgpID0+IHtcbiAgICBjb25zdCB0b2tlbk5hbWUgPSAnaHRldGg6ZmFrZXRva2VuJztcbiAgICBiaXRnby5yZWdpc3RlclRva2VuKHRva2VuTmFtZSk7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKTtcbiAgICBzaG91bGQuZXhpc3QoY29pbik7XG4gICAgY29pbi50eXBlLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgIGNvaW4ubmFtZS5zaG91bGQuZXF1YWwoJ0hvb2RpIFRlc3RuZXQgZmFrZSB0b2tlbicpO1xuICAgIGNvaW4uZGVjaW1hbFBsYWNlcy5zaG91bGQuZXF1YWwoNik7XG4gICAgY29pbi50b2tlbkNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoJzB4ODlhOTU5YjkxODRiNGY4Yzg2MzM2NDZkNWRmZDA0OWQyZWJjOTgzYScpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZldGNoIGFsbCBhc3NldHMgZnJvbSBBTVMgYW5kIGluaXRpYWxpemUgdGhlIGNvaW4gZmFjdG9yeScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiB0cnVlIH0gYXMgQml0R29PcHRpb25zKTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgIC8vIFNldHVwIG5vY2tzXG4gICAgbm9jayhtaWNyb3NlcnZpY2VzVXJpKS5nZXQoJy9hcGkvdjEvYXNzZXRzL2xpc3QvdGVzdG5ldCcpLnJlcGx5KDIwMCwgcmVkdWNlZEFtc1Rva2VuQ29uZmlnKTtcblxuICAgIGF3YWl0IGJpdGdvLnJlZ2lzdGVyQWxsVG9rZW5zKCk7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ2h0ZXRoOmZha2V0b2tlbicpO1xuICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlZ2lzdGVyVG9rZW4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHVzZUFtcyBpcyBmYWxzZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJpdGdvTm9BbXMgPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogZmFsc2UgfSBhcyBCaXRHb09wdGlvbnMpO1xuICAgICAgYml0Z29Ob0Ftcy5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgICAgYXdhaXQgYml0Z29Ob0Ftc1xuICAgICAgICAucmVnaXN0ZXJUb2tlbignaHRldGg6ZmFrZXRva2VuJylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3JlZ2lzdGVyVG9rZW4gaXMgb25seSBzdXBwb3J0ZWQgd2hlbiB1c2VBbXMgaXMgc2V0IHRvIHRydWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVnaXN0ZXIgYSB0b2tlbiBmcm9tIHN0YXRpY3MgbGlicmFyeSBpZiBhdmFpbGFibGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiB0cnVlIH0gYXMgQml0R29PcHRpb25zKTtcbiAgICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgICAgYXdhaXQgYml0Z28ucmVnaXN0ZXJUb2tlbignaHRldGg6YmdlcmNodjInKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCdodGV0aDpiZ2VyY2h2MicpO1xuICAgICAgc2hvdWxkLmV4aXN0KGNvaW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmZXRjaCB0b2tlbiBpbmZvcm1hdGlvbiBmcm9tIEFNUyBpZiBub3QgaW4gc3RhdGljcyBsaWJyYXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogdHJ1ZSB9IGFzIEJpdEdvT3B0aW9ucyk7XG4gICAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ2h0ZXRoOmZha2V0b2tlbic7XG5cbiAgICAgIC8vIFNldHVwIG5vY2tzXG4gICAgICBub2NrKG1pY3Jvc2VydmljZXNVcmkpLmdldChgL2FwaS92MS9hc3NldHMvbmFtZS8ke3Rva2VuTmFtZX1gKS5yZXBseSgyMDAsIHJlZHVjZWRBbXNUb2tlbkNvbmZpZ1t0b2tlbk5hbWVdWzBdKTtcblxuICAgICAgYXdhaXQgYml0Z28ucmVnaXN0ZXJUb2tlbih0b2tlbk5hbWUpO1xuICAgICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKTtcbiAgICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgYWJsZSB0byByZWdpc3RlciB0aGUgb2ZjIHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogdHJ1ZSB9IGFzIEJpdEdvT3B0aW9ucyk7XG4gICAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ29mYyc7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnJlZ2lzdGVyVG9rZW4odG9rZW5OYW1lKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSk7XG4gICAgICBzaG91bGQuZXhpc3QoY29pbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGEgRVZNIGNvaW4gdG9rZW4gZnJvbSBzdGF0aWNzIGxpYnJhcnkgaWYgYXZhaWxhYmxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogdHJ1ZSB9IGFzIEJpdEdvT3B0aW9ucyk7XG4gICAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICAgIGF3YWl0IGJpdGdvLnJlZ2lzdGVyVG9rZW4oJ3RpcDp1c2RjJyk7XG4gICAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGlwOnVzZGMnKTtcbiAgICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVnaXN0ZXIgYW4gRVZNIGNvaW4gdG9rZW4gZnJvbSBBTVMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiB0cnVlIH0gYXMgQml0R29PcHRpb25zKTtcbiAgICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuXG4gICAgICBjb25zdCB0b2tlbk5hbWUgPSAndGlwOmZha2V0b2tlbic7XG5cbiAgICAgIC8vIFNldHVwIG5vY2tzIGZvciBBTVMgQVBJIGNhbGxcbiAgICAgIG5vY2sobWljcm9zZXJ2aWNlc1VyaSkuZ2V0KGAvYXBpL3YxL2Fzc2V0cy9uYW1lLyR7dG9rZW5OYW1lfWApLnJlcGx5KDIwMCwgcmVkdWNlZEFtc1Rva2VuQ29uZmlnW3Rva2VuTmFtZV1bMF0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5yZWdpc3RlclRva2VuKHRva2VuTmFtZSk7XG4gICAgICBjb25zdCBjb2luID0gYml0Z28uY29pbih0b2tlbk5hbWUpO1xuICAgICAgc2hvdWxkLmV4aXN0KGNvaW4pO1xuICAgICAgY29pbi50eXBlLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgICAgY29uc3Qgc3RhdGljc0NvaW4gPSBjb2luLmdldENvbmZpZygpO1xuICAgICAgc3RhdGljc0NvaW4ubmFtZS5zaG91bGQuZXF1YWwoJ3RpcCcpO1xuICAgICAgc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcy5zaG91bGQuZXF1YWwoMTgpO1xuICAgICAgLy8gRm9yIEVWTSB0b2tlbnMsIGNvbnRyYWN0QWRkcmVzcyBpcyBhdmFpbGFibGUgb24gdGhlIHN0YXRpY3MgY29pblxuICAgICAgaWYgKCdjb250cmFjdEFkZHJlc3MnIGluIHN0YXRpY3NDb2luICYmIHN0YXRpY3NDb2luLmNvbnRyYWN0QWRkcmVzcykge1xuICAgICAgICAoc3RhdGljc0NvaW4uY29udHJhY3RBZGRyZXNzIGFzIHN0cmluZykuc2hvdWxkLmVxdWFsKCcweDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAnKTtcbiAgICAgIH1cbiAgICAgIHN0YXRpY3NDb2luLmZhbWlseS5zaG91bGQuZXF1YWwoJ2lwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGEgdGh5cGVldm0gRVZNIGNvaW4gdG9rZW4gZnJvbSBBTVMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiB0cnVlIH0gYXMgQml0R29PcHRpb25zKTtcbiAgICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuXG4gICAgICBjb25zdCB0b2tlbk5hbWUgPSAndGh5cGVldm06ZmFrZXRva2VuJztcblxuICAgICAgLy8gU2V0dXAgbm9ja3MgZm9yIEFNUyBBUEkgY2FsbFxuICAgICAgbm9jayhtaWNyb3NlcnZpY2VzVXJpKS5nZXQoYC9hcGkvdjEvYXNzZXRzL25hbWUvJHt0b2tlbk5hbWV9YCkucmVwbHkoMjAwLCByZWR1Y2VkQW1zVG9rZW5Db25maWdbdG9rZW5OYW1lXVswXSk7XG5cbiAgICAgIGF3YWl0IGJpdGdvLnJlZ2lzdGVyVG9rZW4odG9rZW5OYW1lKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSk7XG4gICAgICBzaG91bGQuZXhpc3QoY29pbik7XG4gICAgICBjb2luLnR5cGUuc2hvdWxkLmVxdWFsKHRva2VuTmFtZSk7XG4gICAgICBjb25zdCBzdGF0aWNzQ29pbiA9IGNvaW4uZ2V0Q29uZmlnKCk7XG4gICAgICBzdGF0aWNzQ29pbi5uYW1lLnNob3VsZC5lcXVhbCgndGh5cGVldm0nKTtcbiAgICAgIHN0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMuc2hvdWxkLmVxdWFsKDE4KTtcbiAgICAgIC8vIEZvciBFVk0gdG9rZW5zLCBjb250cmFjdEFkZHJlc3MgaXMgYXZhaWxhYmxlIG9uIHRoZSBzdGF0aWNzIGNvaW5cbiAgICAgIGlmICgnY29udHJhY3RBZGRyZXNzJyBpbiBzdGF0aWNzQ29pbiAmJiBzdGF0aWNzQ29pbi5jb250cmFjdEFkZHJlc3MpIHtcbiAgICAgICAgKHN0YXRpY3NDb2luLmNvbnRyYWN0QWRkcmVzcyBhcyBzdHJpbmcpLnNob3VsZC5lcXVhbCgnMHhhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkJyk7XG4gICAgICB9XG4gICAgICBzdGF0aWNzQ29pbi5mYW1pbHkuc2hvdWxkLmVxdWFsKCdoeXBlZXZtJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGFuIEFNUy1vbmx5IHRva2VuIG9uIGEgbmV3LWdlbiBFVk0gZmFtaWx5IHZpYSB0aGUgbGF6eSBwYXRoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogdHJ1ZSB9IGFzIEJpdEdvT3B0aW9ucyk7XG4gICAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ3RoeXBlZXZtOmZha2V0b2tlbic7XG5cbiAgICAgIC8vIFNldHVwIG5vY2tzIGZvciBBTVMgQVBJIGNhbGxcbiAgICAgIG5vY2sobWljcm9zZXJ2aWNlc1VyaSkuZ2V0KGAvYXBpL3YxL2Fzc2V0cy9uYW1lLyR7dG9rZW5OYW1lfWApLnJlcGx5KDIwMCwgcmVkdWNlZEFtc1Rva2VuQ29uZmlnW3Rva2VuTmFtZV1bMF0pO1xuXG4gICAgICBhd2FpdCBiaXRnby5yZWdpc3RlclRva2VuKHRva2VuTmFtZSk7XG4gICAgICBjb25zdCBjb2luID0gYml0Z28uY29pbih0b2tlbk5hbWUpO1xuICAgICAgc2hvdWxkLmV4aXN0KGNvaW4pO1xuICAgICAgY29pbi50eXBlLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgICAgKGNvaW4gYXMgRXRoTGlrZUVyYzIwVG9rZW4pLnRva2VuQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCgnMHhhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkZWZhYmNkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGEgc3RhdGljcyBFUkM3MjEgdG9rZW4gb24gYSBkdWFsLXN0YW5kYXJkIEVWTSBmYW1pbHkgdmlhIHRoZSBsYXp5IHBhdGgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJywgbWljcm9zZXJ2aWNlc1VyaSwgdXNlQW1zOiB0cnVlIH0gYXMgQml0R29PcHRpb25zKTtcbiAgICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuXG4gICAgICBjb25zdCB0b2tlbk5hbWUgPSAnZXJjNzIxOmhiYXJldm10b2tlbic7XG4gICAgICBhd2FpdCBiaXRnby5yZWdpc3RlclRva2VuKHRva2VuTmFtZSk7XG4gICAgICBjb25zdCBjb2luID0gYml0Z28uY29pbih0b2tlbk5hbWUpO1xuICAgICAgc2hvdWxkLmV4aXN0KGNvaW4pO1xuICAgICAgY29pbi50eXBlLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgICAgY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihFdGhMaWtlRXJjNzIxVG9rZW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWdpc3RlciBhIHRlc3RuZXQgRVJDNzIxIHRva2VuIG9uIGEgZHVhbC1zdGFuZGFyZCBFVk0gZmFtaWx5IHZpYSB0aGUgbGF6eSBwYXRoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycsIG1pY3Jvc2VydmljZXNVcmksIHVzZUFtczogdHJ1ZSB9IGFzIEJpdEdvT3B0aW9ucyk7XG4gICAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ3RoYmFyZXZtOnRtbmZ0JztcbiAgICAgIGF3YWl0IGJpdGdvLnJlZ2lzdGVyVG9rZW4odG9rZW5OYW1lKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSk7XG4gICAgICBzaG91bGQuZXhpc3QoY29pbik7XG4gICAgICBjb2luLnR5cGUuc2hvdWxkLmVxdWFsKHRva2VuTmFtZSk7XG4gICAgICBjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZU9mKEV0aExpa2VFcmM3MjFUb2tlbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGEgU09MIHRva2VuIGZyb20gc3RhdGljcyBsaWJyYXJ5IGlmIGF2YWlsYWJsZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvLCB7IGVudjogJ21vY2snLCBtaWNyb3NlcnZpY2VzVXJpLCB1c2VBbXM6IHRydWUgfSBhcyBCaXRHb09wdGlvbnMpO1xuICAgICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgICBhd2FpdCBiaXRnby5yZWdpc3RlclRva2VuKCd0c29sOnVzZGMnKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0c29sOnVzZGMnKTtcbiAgICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgICAgIGNvaW4udHlwZS5zaG91bGQuZXF1YWwoJ3Rzb2w6dXNkYycpO1xuICAgICAgY29pbi5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlOSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY3JlYXRlIGEgY3VzdG9tIGNvaW4gZmFjdG9yeSBmcm9tIGFtcyByZXNwb25zZSBhbmQgaW5jbHVkZSBTT0wgdG9rZW5zIGZyb20gc3RhdGljcycsIGFzeW5jICgpID0+IHtcbiAgICBiaXRnby5pbml0Q29pbkZhY3RvcnkocmVkdWNlZEFtc1Rva2VuQ29uZmlnKTtcbiAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndHNvbDp1c2RjJyk7XG4gICAgc2hvdWxkLmV4aXN0KGNvaW4pO1xuICAgIGNvaW4udHlwZS5zaG91bGQuZXF1YWwoJ3Rzb2w6dXNkYycpO1xuICAgIGNvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlc29sdmUgYW4gQU1TLW9ubHkgdG9rZW4gb24gYSBuZXctZ2VuIEVWTSBmYW1pbHkgYWZ0ZXIgaW5pdENvaW5GYWN0b3J5JywgKCkgPT4ge1xuICAgIGJpdGdvLmluaXRDb2luRmFjdG9yeShyZWR1Y2VkQW1zVG9rZW5Db25maWcpO1xuICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0aHlwZWV2bTpmYWtldG9rZW4nKTtcbiAgICBzaG91bGQuZXhpc3QoY29pbik7XG4gICAgY29pbi50eXBlLnNob3VsZC5lcXVhbCgndGh5cGVldm06ZmFrZXRva2VuJyk7XG4gICAgY29pbi5uYW1lLnNob3VsZC5lcXVhbCgnSHlwZXJsaXF1aWQgRVZNIFRlc3RuZXQgRmFrZXRva2VuJyk7XG4gICAgY29pbi5kZWNpbWFsUGxhY2VzLnNob3VsZC5lcXVhbCgxOCk7XG4gICAgY29pbi50b2tlbkNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoJzB4YWJjZGVmYWJjZGVmYWJjZGVmYWJjZGVmYWJjZGVmYWJjZGVmYWJjZCcpO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCByZXNvbHZlIGFuIEFNUy1vbmx5IHRva2VuIG9uIGEgbGVnYWN5IEVWTSBmYW1pbHkgYWZ0ZXIgaW5pdENvaW5GYWN0b3J5JywgKCkgPT4ge1xuICAgIGJpdGdvLmluaXRDb2luRmFjdG9yeShyZWR1Y2VkQW1zVG9rZW5Db25maWcpO1xuICAgIGNvbnN0IGNvaW4gPSBiaXRnby5jb2luKCd0YnNjOmZha2V0b2tlbicpO1xuICAgIHNob3VsZC5leGlzdChjb2luKTtcbiAgICBjb2luLnR5cGUuc2hvdWxkLmVxdWFsKCd0YnNjOmZha2V0b2tlbicpO1xuICAgIGNvaW4ubmFtZS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgQk5CIGZha2UgdG9rZW4nKTtcbiAgICBjb2luLmRlY2ltYWxQbGFjZXMuc2hvdWxkLmVxdWFsKDE4KTtcbiAgICBjb2luLnRva2VuQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCgnMHg5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwJyk7XG4gICAgLy8gQU1TLW9ubHkgdG9rZW5zIG9uIGxlZ2FjeSBmYW1pbGllcyBhcmUgcmVnaXN0ZXJlZCB0aHJvdWdoIHRoZSBmYW1pbHktYWdub3N0aWNcbiAgICAvLyBFdGhMaWtlRXJjMjBUb2tlbiwgbm90IHRoZSBsZWdhY3kgQnNjVG9rZW4gY2xhc3MuXG4gICAgY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihFdGhMaWtlRXJjMjBUb2tlbik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGZsaXAgYSBzdGF0aWNzIHRva2VuIG9uIGEgbGVnYWN5IEVWTSBmYW1pbHkgdG8gdGhlIGdlbmVyaWMgdG9rZW4gY2xhc3MnLCAoKSA9PiB7XG4gICAgYml0Z28uaW5pdENvaW5GYWN0b3J5KHJlZHVjZWRBbXNUb2tlbkNvbmZpZyk7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ2JzYzpzb2x2Jyk7XG4gICAgc2hvdWxkLmV4aXN0KGNvaW4pO1xuICAgIGNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlT2YoQnNjVG9rZW4pO1xuICB9KTtcbn0pO1xuIl19
@@ -68,8 +68,8 @@ describe('TSS ECDSA safe child keychains (user/BitGo hard derive):', async funct
68
68
  const round1Nock = await nockDeriveRound1(bitgoPair);
69
69
  const round2Nock = await nockDeriveRound2(bitgoPair);
70
70
  const round3Nock = await nockDeriveRound3(bitgoPair);
71
- const addKeyNock = await nockAddChildKey(coinName, 2);
72
- const { userKeychain, backupKeychain } = await tssUtils.createSafeChildKeychains({
71
+ const addKeyNock = await nockAddChildKey(coinName);
72
+ const { userKeychain, backupKeychain, bitgoKeychain } = await tssUtils.createSafeChildKeychains({
73
73
  passphrase: 'test',
74
74
  enterprise: enterpriseId,
75
75
  safeId: SAFE_ID,
@@ -85,6 +85,9 @@ describe('TSS ECDSA safe child keychains (user/BitGo hard derive):', async funct
85
85
  assert.ok(round3Nock.isDone());
86
86
  assert.ok(addKeyNock.isDone());
87
87
  assert.equal(userKeychain.commonKeychain, backupKeychain.commonKeychain);
88
+ assert.equal(bitgoKeychain.commonKeychain, userKeychain.commonKeychain);
89
+ assert.equal(bitgoKeychain.source, 'bitgo');
90
+ assert.equal(bitgoKeychain.encryptedPrv, undefined);
88
91
  assert.equal(userKeychain.commonKeychain, sdk_lib_mpc_1.DklsTypes.getCommonKeychain(bitgoPair.getKeyShare()));
89
92
  const encryptedUserPrv = userKeychain.encryptedPrv;
90
93
  assert.ok(encryptedUserPrv);
@@ -105,8 +108,8 @@ describe('TSS ECDSA safe child keychains (user/BitGo hard derive):', async funct
105
108
  const round1Nock = await nockDeriveRound1(bitgoPair, 1, idx);
106
109
  const round2Nock = await nockDeriveRound2(bitgoPair);
107
110
  const round3Nock = await nockDeriveRound3(bitgoPair);
108
- const addKeyNock = await nockAddChildKey(coinName, 2, idx);
109
- const { userKeychain, backupKeychain } = await tssUtils.createSafeChildKeychains({
111
+ const addKeyNock = await nockAddChildKey(coinName, 3, idx);
112
+ const { userKeychain, backupKeychain, bitgoKeychain } = await tssUtils.createSafeChildKeychains({
110
113
  passphrase: 'test',
111
114
  enterprise: enterpriseId,
112
115
  safeId: SAFE_ID,
@@ -122,6 +125,58 @@ describe('TSS ECDSA safe child keychains (user/BitGo hard derive):', async funct
122
125
  assert.ok(round3Nock.isDone());
123
126
  assert.ok(addKeyNock.isDone());
124
127
  assert.equal(userKeychain.commonKeychain, backupKeychain.commonKeychain);
128
+ assert.equal(bitgoKeychain.commonKeychain, userKeychain.commonKeychain);
129
+ });
130
+ it('registers the BitGo child placeholder with the hardened path and no private material', async function () {
131
+ const [userRoot, , bitgoRoot] = await sdk_lib_mpc_1.DklsUtils.generateDKGKeyShares();
132
+ const [vrfUser, , vrfBitgo] = await sdk_lib_mpc_1.DklsVrfUtils.generateVrfDKGKeyShares();
133
+ const bitgoPair = new sdk_lib_mpc_1.DklsDrv.Derive(3, 2, 2, bitgoRoot.getKeyShare(), vrfBitgo.getKeyShare(), PATH_M0);
134
+ await nockDeriveRound1(bitgoPair);
135
+ await nockDeriveRound2(bitgoPair);
136
+ await nockDeriveRound3(bitgoPair);
137
+ const addKeyBodies = [];
138
+ nock('https://bitgo.fakeurl')
139
+ .post(`/api/v2/${coinName}/key`)
140
+ .times(3)
141
+ .reply(200, (uri, requestBody) => {
142
+ addKeyBodies.push(requestBody);
143
+ return { id: requestBody.source, source: requestBody.source, commonKeychain: requestBody.commonKeychain };
144
+ });
145
+ const { bitgoKeychain } = await tssUtils.createSafeChildKeychains({
146
+ passphrase: 'test',
147
+ enterprise: enterpriseId,
148
+ safeId: SAFE_ID,
149
+ parentKeyId: BITGO_ROOT_KEY_ID,
150
+ derivationIndex: DERIVATION_INDEX,
151
+ userRootKeyId: USER_ROOT_KEY_ID,
152
+ backupRootKeyId: BACKUP_ROOT_KEY_ID,
153
+ userRootKeyShare: userRoot.getKeyShare(),
154
+ userRootVrfKeyShare: vrfUser.getKeyShare(),
155
+ });
156
+ const userBody = addKeyBodies.find((body) => body.source === 'user');
157
+ assert.ok(userBody, 'expected a user child registration');
158
+ const bitgoBody = addKeyBodies.find((body) => body.source === 'bitgo');
159
+ assert.ok(bitgoBody, 'expected a bitgo child registration');
160
+ // Same common keychain across all three child registrations.
161
+ assert.equal(bitgoBody.commonKeychain, userBody.commonKeychain);
162
+ assert.equal(bitgoBody.commonKeychain, bitgoKeychain.commonKeychain);
163
+ // All child paths are hardened.
164
+ assert.equal(userBody.derivedFromParentWithPath, "m/0'");
165
+ assert.equal(userBody.parent, USER_ROOT_KEY_ID);
166
+ const backupBody = addKeyBodies.find((body) => body.source === 'backup');
167
+ assert.ok(backupBody, 'expected a backup child registration');
168
+ assert.equal(backupBody.derivedFromParentWithPath, "m/0'");
169
+ assert.equal(backupBody.parent, BACKUP_ROOT_KEY_ID);
170
+ // Exact wire body: public-only placeholder with no private material.
171
+ assert.deepEqual(bitgoBody, {
172
+ source: 'bitgo',
173
+ keyType: 'tss',
174
+ isMPCv2: true,
175
+ commonKeychain: userBody.commonKeychain,
176
+ safeId: SAFE_ID,
177
+ parent: BITGO_ROOT_KEY_ID,
178
+ derivedFromParentWithPath: "m/0'",
179
+ });
125
180
  });
126
181
  it('should reject root key material that is not a valid VRF envelope', async function () {
127
182
  const [, , bitgoRoot] = await sdk_lib_mpc_1.DklsUtils.generateDKGKeyShares();
@@ -251,7 +306,10 @@ describe('TSS ECDSA safe child keychains (user/BitGo hard derive):', async funct
251
306
  };
252
307
  });
253
308
  }
254
- async function nockAddChildKey(coin, times = 2, index = DERIVATION_INDEX) {
309
+ /**
310
+ * Nocks the hardened child key registrations.
311
+ */
312
+ async function nockAddChildKey(coin, times = 3, index = DERIVATION_INDEX) {
255
313
  return nock('https://bitgo.fakeurl')
256
314
  .post(`/api/v2/${coin}/key`, (body) => body.keyType === 'tss' &&
257
315
  body.isMPCv2 === true &&
@@ -268,4 +326,4 @@ describe('TSS ECDSA safe child keychains (user/BitGo hard derive):', async funct
268
326
  }));
269
327
  }
270
328
  });
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC92Mi91bml0L2ludGVybmFsL3Rzc1V0aWxzL2VjZHNhVnJmTVBDdjIvY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBQ2pDLDZCQUE4QjtBQUM5QixtQ0FBbUM7QUFDbkMsbUNBQWdDO0FBRWhDLDhDQUF3RDtBQUN4RCw4Q0FBaUY7QUFDakYsb0RBQTRGO0FBRzVGLCtDQUFpRTtBQUVqRSxNQUFNLE9BQU8sR0FBRyxrQ0FBa0MsQ0FBQztBQUNuRCxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFDOUMsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFFekQsUUFBUSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7SUFDeEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLE1BQU0sWUFBWSxHQUFHLGtDQUFrQyxDQUFDO0lBQ3hELElBQUksS0FBYSxDQUFDO0lBQ2xCLElBQUksS0FBeUIsQ0FBQztJQUM5QixJQUFJLFFBQXVDLENBQUM7SUFDNUMsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxXQUVILENBQUM7SUFDRixJQUFJLFNBQTJFLENBQUM7SUFDaEYsSUFBSSxjQUFtRCxDQUFDO0lBQ3hELElBQUksYUFBa0QsQ0FBQztJQUN2RCxJQUFJLGVBQW1FLENBQUM7SUFFeEUsTUFBTSxDQUFDLEtBQUs7UUFDVixPQUFPLENBQUMsTUFBTSxDQUFD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QUFHLEVBQUUsV0FBK0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRCxFQUFFLEVBQUUsV0FBVyxDQUFDLE1BQU07WUFDdEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1lBQzFCLElBQUksRUFBRSxXQUFXLENBQUMsT0FBTztZQUN6QixjQUFjLEVBQUUsV0FBVyxDQUFDLGNBQWM7WUFDMUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1NBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCAqIGFzIG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdjYm9yLXgnO1xuXG5pbXBvcnQgeyBUZXN0YWJsZUJHLCBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQWRkS2V5Y2hhaW5PcHRpb25zLCBjb21tb24sIEVDRFNBVXRpbHMsIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBEa2xzQ29tbXMsIERrbHNEcnYsIERrbHNUeXBlcywgRGtsc1V0aWxzLCBEa2xzVnJmVXRpbHMgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgTVBDdjJEZXJpdmVSb3VuZDFSZXF1ZXN0LCBNUEN2MkRlcml2ZVJvdW5kMlJlcXVlc3QsIE1QQ3YyRGVyaXZlUm91bmQzUmVxdWVzdCB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHsgTm9uRW1wdHlTdHJpbmcgfSBmcm9tICdpby10cy10eXBlcyc7XG5pbXBvcnQgeyBCaXRHbywgQml0Z29HUEdQdWJsaWNLZXkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMnO1xuXG5jb25zdCBTQUZFX0lEID0gJzZmYTg1MzdlM2VmNWE4NzhmZDNhZTg5OWYzYWI3ZTVhJztcbmNvbnN0IFVTRVJfUk9PVF9LRVlfSUQgPSAncm9vdC11c2VyLWtleS1pZCc7XG5jb25zdCBERVJJVkFUSU9OX0lOREVYID0gMDtcbmNvbnN0IEJJVEdPX1JPT1RfS0VZX0lEID0gJ3Jvb3QtYml0Z28ta2V5LWlkJztcbmNvbnN0IEJBQ0tVUF9ST09UX0tFWV9JRCA9ICdyb290LWJhY2t1cC1rZXktaWQnO1xuY29uc3QgUEFUSF9NMCA9IG5ldyBVaW50OEFycmF5KFsweDgwLCAweDAwLCAweDAwLCAweDAwXSk7XG5cbmRlc2NyaWJlKCdUU1MgRUNEU0Egc2FmZSBjaGlsZCBrZXljaGFpbnMgKHVzZXIvQml0R28gaGFyZCBkZXJpdmUpOicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAnaHRldGgnO1xuICBjb25zdCBlbnRlcnByaXNlSWQgPSAnNjQ0OTE1M2E2ZjZiYzIwMDA2ZDY2NzcxY2RiZTE1ZDMnO1xuICBsZXQgYmdVcmw6IHN0cmluZztcbiAgbGV0IGJpdGdvOiBUZXN0YWJsZUJHICYgQml0R287XG4gIGxldCB0c3NVdGlsczogRUNEU0FVdGlscy5FY2RzYVZyZk1QQ3YyVXRpbHM7XG4gIGxldCB3YWxsZXQ6IFdhbGxldDtcbiAgbGV0IGJpdEdvR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4gJiB7XG4gICAgcmV2b2NhdGlvbkNlcnRpZmljYXRlOiBzdHJpbmc7XG4gIH07XG4gIGxldCBjb25zdGFudHM6IHsgbXBjOiB7IGJpdGdvUHVibGljS2V5OiBzdHJpbmc7IGJpdGdvTVBDdjJQdWJsaWNLZXk6IHN0cmluZyB9IH07XG4gIGxldCBiaXRnb0dwZ1BydktleTogeyBwYXJ0eUlkOiBudW1iZXI7IGdwZ0tleTogc3RyaW5nIH07XG4gIGxldCB1c2VyR3BnUHViS2V5OiB7IHBhcnR5SWQ6IG51bWJlcjsgZ3BnS2V5OiBzdHJpbmcgfTtcbiAgbGV0IHN0YWdlZEJpdGdvTXNnMjogeyBtZXNzYWdlOiBzdHJpbmc7IHNpZ25hdHVyZTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBvcGVucGdwLmNvbmZpZy5yZWplY3RDdXJ2ZXMgPSBuZXcgU2V0KCk7XG4gICAgYml0R29HcGdLZXkgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgIHVzZXJJRHM6IFt7IG5hbWU6ICdiaXRnbycsIGVtYWlsOiAnYml0Z29AdGVzdC5jb20nIH1dLFxuICAgICAgY3VydmU6ICdzZWNwMjU2azEnLFxuICAgIH0pO1xuICAgIGNvbnN0YW50cyA9IHtcbiAgICAgIG1wYzoge1xuICAgICAgICBiaXRnb1B1YmxpY0tleTogYml0R29HcGdLZXkucHVibGljS2V5LFxuICAgICAgICBiaXRnb01QQ3YyUHVibGljS2V5OiBiaXRHb0dwZ0tleS5wdWJsaWNLZXksXG4gICAgICB9LFxuICAgIH07XG4gICAgYml0Z29HcGdQcnZLZXkgPSB7IHBhcnR5SWQ6IDIsIGdwZ0tleTogYml0R29HcGdLZXkucHJpdmF0ZUtleSB9O1xuXG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R28sIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2JpdGdvLmdldEVudigpXS51cmk7XG5cbiAgICBjb25zdCBiYXNlQ29pbiA9IGJpdGdvLmNvaW4oY29pbk5hbWUpO1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2VDb2luLCB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJyxcbiAgICAgIGVudGVycHJpc2U6IGVudGVycHJpc2VJZCxcbiAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfSk7XG4gICAgdHNzVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVZyZk1QQ3YyVXRpbHMoYml0Z28sIGJhc2VDb2luLCB3YWxsZXQpO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgc3RhZ2VkQml0Z29Nc2cyID0gdW5kZWZpbmVkO1xuICAgIGF3YWl0IG5vY2tHZXRCaXRnb1B1YmxpY0tleUJhc2VkT25GZWF0dXJlRmxhZ3MoY29pbk5hbWUsIGVudGVycHJpc2VJZCwgYml0R29HcGdLZXkpO1xuICAgIG5vY2soYmdVcmwpLmdldCgnL2FwaS92MS9jbGllbnQvY29uc3RhbnRzJykudGltZXMoMzIpLnJlcGx5KDIwMCwgeyB0dGw6IDM2MDAsIGNvbnN0YW50cyB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBkZXJpdmUgdGhlIHVzZXIgY2hpbGQgYW5kIHJlZ2lzdGVyIHRoZSBiYWNrdXAgd2l0aG91dCBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgW3VzZXJSb290LCAsIGJpdGdvUm9vdF0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgLCB2cmZCaXRnb10gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBiaXRnb1BhaXIgPSBuZXcgRGtsc0Rydi5EZXJpdmUoMywgMiwgMiwgYml0Z29Sb290LmdldEtleVNoYXJlKCksIHZyZkJpdGdvLmdldEtleVNoYXJlKCksIFBBVEhfTTApO1xuXG4gICAgY29uc3Qgcm91bmQxTm9jayA9IGF3YWl0IG5vY2tEZXJpdmVSb3VuZDEoYml0Z29QYWlyKTtcbiAgICBjb25zdCByb3VuZDJOb2NrID0gYXdhaXQgbm9ja0Rlcml2ZVJvdW5kMihiaXRnb1BhaXIpO1xuICAgIGNvbnN0IHJvdW5kM05vY2sgPSBhd2FpdCBub2NrRGVyaXZlUm91bmQzKGJpdGdvUGFpcik7XG4gICAgY29uc3QgYWRkS2V5Tm9jayA9IGF3YWl0IG5vY2tBZGRDaGlsZEtleShjb2luTmFtZSwgMik7XG5cbiAgICBjb25zdCB7IHVzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4gfSA9IGF3YWl0IHRzc1V0aWxzLmNyZWF0ZVNhZmVDaGlsZEtleWNoYWlucyh7XG4gICAgICBwYXNzcGhyYXNlOiAndGVzdCcsXG4gICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlSWQsXG4gICAgICBzYWZlSWQ6IFNBRkVfSUQsXG4gICAgICBwYXJlbnRLZXlJZDogQklUR09fUk9PVF9LRVlfSUQsXG4gICAgICBkZXJpdmF0aW9uSW5kZXg6IERFUklWQVRJT05fSU5ERVgsXG4gICAgICB1c2VyUm9vdEtleUlkOiBVU0VSX1JPT1RfS0VZX0lELFxuICAgICAgYmFja3VwUm9vdEtleUlkOiBCQUNLVVBfUk9PVF9LRVlfSUQsXG4gICAgICB1c2VyUm9vdEtleVNoYXJlOiB1c2VyUm9vdC5nZXRLZXlTaGFyZSgpLFxuICAgICAgdXNlclJvb3RWcmZLZXlTaGFyZTogdnJmVXNlci5nZXRLZXlTaGFyZSgpLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0Lm9rKHJvdW5kMU5vY2suaXNEb25lKCkpO1xuICAgIGFzc2VydC5vayhyb3VuZDJOb2NrLmlzRG9uZSgpKTtcbiAgICBhc3NlcnQub2socm91bmQzTm9jay5pc0RvbmUoKSk7XG4gICAgYXNzZXJ0Lm9rKGFkZEtleU5vY2suaXNEb25lKCkpO1xuICAgIGFzc2VydC5lcXVhbCh1c2VyS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLmNvbW1vbktleWNoYWluKTtcbiAgICBhc3NlcnQuZXF1YWwodXNlcktleWNoYWluLmNvbW1vbktleWNoYWluLCBEa2xzVHlwZXMuZ2V0Q29tbW9uS2V5Y2hhaW4oYml0Z29QYWlyLmdldEtleVNoYXJlKCkpKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJQcnYgPSB1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICAgIGFzc2VydC5vayhlbmNyeXB0ZWRVc2VyUHJ2KTtcbiAgICBhc3NlcnQuZXF1YWwoYmFja3VwS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LCB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGRlY3J5cHRlZFVzZXJQcnYgPSBhd2FpdCBiaXRnby5kZWNyeXB0KHsgaW5wdXQ6IGVuY3J5cHRlZFVzZXJQcnYsIHBhc3N3b3JkOiAndGVzdCcgfSk7XG4gICAgY29uc3QgdXNlckNoaWxkU2hhcmUgPSBkZWNvZGUoQnVmZmVyLmZyb20oZGVjcnlwdGVkVXNlclBydiwgJ2Jhc2U2NCcpKTtcbiAgICBhc3NlcnQuZXF1YWwodXNlckNoaWxkU2hhcmUudmVyc2lvbiwgdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQuZXF1YWwodXNlckNoaWxkU2hhcmUudnJmLCB1bmRlZmluZWQpO1xuICAgIGFzc2VydC5lcXVhbCh1c2VyQ2hpbGRTaGFyZS5wYXJ0eV9pZCwgMCk7XG4gICAgYXNzZXJ0Lm9rKHVzZXJDaGlsZFNoYXJlLnNfaSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZGVyaXZlIGF0IGEgbm9uLXplcm8gaGFyZGVuZWQgaW5kZXggYW5kIGFncmVlIHdpdGggdGhlIHNlcnZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpZHggPSA3O1xuICAgIGNvbnN0IHBhdGggPSBuZXcgVWludDhBcnJheShbMHg4MCB8IChpZHggPj4+IDI0KSwgMCwgMCwgaWR4XSk7XG4gICAgY29uc3QgW3VzZXJSb290LCAsIGJpdGdvUm9vdF0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgLCB2cmZCaXRnb10gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBiaXRnb1BhaXIgPSBuZXcgRGtsc0Rydi5EZXJpdmUoMywgMiwgMiwgYml0Z29Sb290LmdldEtleVNoYXJlKCksIHZyZkJpdGdvLmdldEtleVNoYXJlKCksIHBhdGgpO1xuXG4gICAgY29uc3Qgcm91bmQxTm9jayA9IGF3YWl0IG5vY2tEZXJpdmVSb3VuZDEoYml0Z29QYWlyLCAxLCBpZHgpO1xuICAgIGNvbnN0IHJvdW5kMk5vY2sgPSBhd2FpdCBub2NrRGVyaXZlUm91bmQyKGJpdGdvUGFpcik7XG4gICAgY29uc3Qgcm91bmQzTm9jayA9IGF3YWl0IG5vY2tEZXJpdmVSb3VuZDMoYml0Z29QYWlyKTtcbiAgICBjb25zdCBhZGRLZXlOb2NrID0gYXdhaXQgbm9ja0FkZENoaWxkS2V5KGNvaW5OYW1lLCAyLCBpZHgpO1xuXG4gICAgY29uc3QgeyB1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluIH0gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVTYWZlQ2hpbGRLZXljaGFpbnMoe1xuICAgICAgcGFzc3BocmFzZTogJ3Rlc3QnLFxuICAgICAgZW50ZXJwcmlzZTogZW50ZXJwcmlzZUlkLFxuICAgICAgc2FmZUlkOiBTQUZFX0lELFxuICAgICAgcGFyZW50S2V5SWQ6IEJJVEdPX1JPT1RfS0VZX0lELFxuICAgICAgZGVyaXZhdGlvbkluZGV4OiBpZHgsXG4gICAgICB1c2VyUm9vdEtleUlkOiBVU0VSX1JPT1RfS0VZX0lELFxuICAgICAgYmFja3VwUm9vdEtleUlkOiBCQUNLVVBfUk9PVF9LRVlfSUQsXG4gICAgICB1c2VyUm9vdEtleVNoYXJlOiB1c2VyUm9vdC5nZXRLZXlTaGFyZSgpLFxuICAgICAgdXNlclJvb3RWcmZLZXlTaGFyZTogdnJmVXNlci5nZXRLZXlTaGFyZSgpLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0Lm9rKHJvdW5kMU5vY2suaXNEb25lKCkpO1xuICAgIGFzc2VydC5vayhyb3VuZDJOb2NrLmlzRG9uZSgpKTtcbiAgICBhc3NlcnQub2socm91bmQzTm9jay5pc0RvbmUoKSk7XG4gICAgYXNzZXJ0Lm9rKGFkZEtleU5vY2suaXNEb25lKCkpO1xuICAgIGFzc2VydC5lcXVhbCh1c2VyS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLmNvbW1vbktleWNoYWluKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgcm9vdCBrZXkgbWF0ZXJpYWwgdGhhdCBpcyBub3QgYSB2YWxpZCBWUkYgZW52ZWxvcGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgWywgLCBiaXRnb1Jvb3RdID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgWywgLCB2cmZCaXRnb10gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBiaXRnb1BhaXIgPSBuZXcgRGtsc0Rydi5EZXJpdmUoMywgMiwgMiwgYml0Z29Sb290LmdldEtleVNoYXJlKCksIHZyZkJpdGdvLmdldEtleVNoYXJlKCksIFBBVEhfTTApO1xuICAgIGNvbnN0IHJvdW5kMU5vY2sgPSBhd2FpdCBub2NrRGVyaXZlUm91bmQxKGJpdGdvUGFpcik7XG4gICAgY29uc3Qgcm91bmQyTm9jayA9IGF3YWl0IG5vY2tEZXJpdmVSb3VuZDIoYml0Z29QYWlyKTtcbiAgICBjb25zdCByb3VuZDNOb2NrID0gYXdhaXQgbm9ja0Rlcml2ZVJvdW5kMyhiaXRnb1BhaXIpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICB0c3NVdGlscy5jcmVhdGVTYWZlQ2hpbGRLZXljaGFpbnMoe1xuICAgICAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0JyxcbiAgICAgICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlSWQsXG4gICAgICAgICAgc2FmZUlkOiBTQUZFX0lELFxuICAgICAgICAgIHBhcmVudEtleUlkOiBCSVRHT19ST09UX0tFWV9JRCxcbiAgICAgICAgICBkZXJpdmF0aW9uSW5kZXg6IERFUklWQVRJT05fSU5ERVgsXG4gICAgICAgICAgdXNlclJvb3RLZXlJZDogVVNFUl9ST09UX0tFWV9JRCxcbiAgICAgICAgICBiYWNrdXBSb290S2V5SWQ6IEJBQ0tVUF9ST09UX0tFWV9JRCxcbiAgICAgICAgICB1c2VyUm9vdEtleVNoYXJlOiBCdWZmZXIuZnJvbSgnZ2FyYmFnZScpLFxuICAgICAgICAgIHVzZXJSb290VnJmS2V5U2hhcmU6IHZyZkJpdGdvLmdldEtleVNoYXJlKCksXG4gICAgICAgIH0pLFxuICAgICAgL0NCT1IgZGVjb2RlfGRvZXMgbm90IG1hdGNoIHJvb3Qga2V5IHNoYXJlIHBhcnR5SWR8VlJGIGtleXNoYXJlL2lcbiAgICApO1xuICAgIGFzc2VydC5vayghcm91bmQxTm9jay5pc0RvbmUoKSwgJ3JvdW5kIDEgbXVzdCBub3QgYmUgc2VudCBmb3IgaW52YWxpZCByb290IG1hdGVyaWFsJyk7XG4gICAgYXNzZXJ0Lm9rKCFyb3VuZDJOb2NrLmlzRG9uZSgpLCAncm91bmQgMiBtdXN0IG5vdCBiZSBzZW50IGZvciBpbnZhbGlkIHJvb3QgbWF0ZXJpYWwnKTtcbiAgICBhc3NlcnQub2soIXJvdW5kM05vY2suaXNEb25lKCksICdyb3VuZCAzIG11c3Qgbm90IGJlIHNlbnQgZm9yIGludmFsaWQgcm9vdCBtYXRlcmlhbCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCBhIHJvb3QgYmxvYiB3aXRoIGEgVlJGIHBhcnR5SWQgbWlzbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgW3VzZXJSb290LCAsIGJpdGdvUm9vdF0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbLCB2cmZCYWNrdXAsIHZyZkJpdGdvXSA9IGF3YWl0IERrbHNWcmZVdGlscy5nZW5lcmF0ZVZyZkRLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IGJpdGdvUGFpciA9IG5ldyBEa2xzRHJ2LkRlcml2ZSgzLCAyLCAyLCBiaXRnb1Jvb3QuZ2V0S2V5U2hhcmUoKSwgdnJmQml0Z28uZ2V0S2V5U2hhcmUoKSwgUEFUSF9NMCk7XG4gICAgY29uc3Qgcm91bmQxTm9jayA9IGF3YWl0IG5vY2tEZXJpdmVSb3VuZDEoYml0Z29QYWlyKTtcbiAgICBjb25zdCByb3VuZDJOb2NrID0gYXdhaXQgbm9ja0Rlcml2ZVJvdW5kMihiaXRnb1BhaXIpO1xuICAgIGNvbnN0IHJvdW5kM05vY2sgPSBhd2FpdCBub2NrRGVyaXZlUm91bmQzKGJpdGdvUGFpcik7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIHRzc1V0aWxzLmNyZWF0ZVNhZmVDaGlsZEtleWNoYWlucyh7XG4gICAgICAgICAgcGFzc3BocmFzZTogJ3Rlc3QnLFxuICAgICAgICAgIGVudGVycHJpc2U6IGVudGVycHJpc2VJZCxcbiAgICAgICAgICBzYWZlSWQ6IFNBRkVfSUQsXG4gICAgICAgICAgcGFyZW50S2V5SWQ6IEJJVEdPX1JPT1RfS0VZX0lELFxuICAgICAgICAgIGRlcml2YXRpb25JbmRleDogREVSSVZBVElPTl9JTkRFWCxcbiAgICAgICAgICB1c2VyUm9vdEtleUlkOiBVU0VSX1JPT1RfS0VZX0lELFxuICAgICAgICAgIGJhY2t1cFJvb3RLZXlJZDogQkFDS1VQX1JPT1RfS0VZX0lELFxuICAgICAgICAgIHVzZXJSb290S2V5U2hhcmU6IHVzZXJSb290LmdldEtleVNoYXJlKCksXG4gICAgICAgICAgdXNlclJvb3RWcmZLZXlTaGFyZTogdnJmQmFja3VwLmdldEtleVNoYXJlKCksXG4gICAgICAgIH0pLFxuICAgICAgL2RvZXMgbm90IG1hdGNoIFZSRiBrZXkgc2hhcmUgcGFydHlJZC9cbiAgICApO1xuICAgIGFzc2VydC5vayghcm91bmQxTm9jay5pc0RvbmUoKSwgJ3JvdW5kIDEgbXVzdCBub3QgYmUgc2VudCBmb3IgbWlzbWF0Y2hlZCBWUkYgbWF0ZXJpYWwnKTtcbiAgICBhc3NlcnQub2soIXJvdW5kMk5vY2suaXNEb25lKCksICdyb3VuZCAyIG11c3Qgbm90IGJlIHNlbnQgZm9yIG1pc21hdGNoZWQgVlJGIG1hdGVyaWFsJyk7XG4gICAgYXNzZXJ0Lm9rKCFyb3VuZDNOb2NrLmlzRG9uZSgpLCAncm91bmQgMyBtdXN0IG5vdCBiZSBzZW50IGZvciBtaXNtYXRjaGVkIFZSRiBtYXRlcmlhbCcpO1xuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBub2NrR2V0Qml0Z29QdWJsaWNLZXlCYXNlZE9uRmVhdHVyZUZsYWdzKFxuICAgIGNvaW46IHN0cmluZyxcbiAgICBlbnRlcnByaXNlSWQ6IHN0cmluZyxcbiAgICBiaXRnb0dwZ0tleVBhaXI6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPlxuICApOiBQcm9taXNlPEJpdGdvR1BHUHVibGljS2V5PiB7XG4gICAgY29uc3QgYml0Z29HUEdQdWJsaWNLZXlSZXNwb25zZTogQml0Z29HUEdQdWJsaWNLZXkgPSB7XG4gICAgICBuYW1lOiAnaXJyZWxldmFudCcsXG4gICAgICBwdWJsaWNLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBtcGN2MlB1YmxpY0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIGVudGVycHJpc2VJZCxcbiAgICB9O1xuICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NvaW59L3Rzcy9wdWJrZXlgKS5xdWVyeSh7IGVudGVycHJpc2VJZCB9KS5yZXBseSgyMDAsIGJpdGdvR1BHUHVibGljS2V5UmVzcG9uc2UpO1xuICAgIHJldHVybiBiaXRnb0dQR1B1YmxpY0tleVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbm9ja0Rlcml2ZVJvdW5kMShiaXRnb1BhaXI6IERrbHNEcnYuRGVyaXZlLCB0aW1lcyA9IDEsIGluZGV4ID0gREVSSVZBVElPTl9JTkRFWCkge1xuICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QoXG4gICAgICAgICcvYXBpL3YyL21wYy9nZW5lcmF0ZWtleScsXG4gICAgICAgIChib2R5KSA9PlxuICAgICAgICAgIGJvZHkucm91bmQgPT09ICdNUEN2MkRlcml2ZS1SMScgJiZcbiAgICAgICAgICBib2R5LnNhZmVJZCA9PT0gU0FGRV9JRCAmJlxuICAgICAgICAgIGJvZHkucGF5bG9hZD8ucGFyZW50S2V5SWQgPT09IEJJVEdPX1JPT1RfS0VZX0lEICYmXG4gICAgICAgICAgYm9keS5wYXlsb2FkPy5kZXJpdmF0aW9uSW5kZXggPT09IGluZGV4ICYmXG4gICAgICAgICAgYm9keS5wYXlsb2FkPy51c2VyR3BnUHVibGljS2V5ICYmXG4gICAgICAgICAgYm9keS5wYXlsb2FkPy51c2VyTXNnMSAmJlxuICAgICAgICAgIGJvZHkucGF5bG9hZD8uYmFja3VwR3BnUHVibGljS2V5ID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBib2R5LnBheWxvYWQ/LmJhY2t1cE1zZzEgPT09IHVuZGVmaW5lZFxuICAgICAgKVxuICAgICAgLnRpbWVzKHRpbWVzKVxuICAgICAgLnJlcGx5KDIwMCwgYXN5bmMgKHVyaSwgcmVxdWVzdEJvZHk6IHsgcGF5bG9hZDogTVBDdjJEZXJpdmVSb3VuZDFSZXF1ZXN0IH0pID0+IHtcbiAgICAgICAgY29uc3QgeyB1c2VyR3BnUHVibGljS2V5LCB1c2VyTXNnMSB9ID0gcmVxdWVzdEJvZHkucGF5bG9hZDtcbiAgICAgICAgdXNlckdwZ1B1YktleSA9IHsgcGFydHlJZDogMCwgZ3BnS2V5OiB1c2VyR3BnUHVibGljS2V5IH07XG4gICAgICAgIGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICAgICAgICBicm9hZGNhc3RNZXNzYWdlczogW3sgZnJvbTogMCwgcGF5bG9hZDogeyBtZXNzYWdlOiB1c2VyTXNnMS5tZXNzYWdlLCBzaWduYXR1cmU6IHVzZXJNc2cxLnNpZ25hdHVyZSB9IH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgW3VzZXJHcGdQdWJLZXldLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgYml0Z29Nc2cxVW5zaWduZWQgPSBhd2FpdCBiaXRnb1BhaXIuaW5pdERlcml2ZSgpO1xuICAgICAgICBjb25zdCBiaXRnb01zZzIgPSBiaXRnb1BhaXIuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbeyBwYXlsb2FkOiBCdWZmZXIuZnJvbSh1c2VyTXNnMS5tZXNzYWdlLCAnYmFzZTY0JyksIGZyb206IDAgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaWduZWRTdGFnZWRNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtEa2xzVHlwZXMuc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb01zZzIuYnJvYWRjYXN0TWVzc2FnZXNbMF0pXSxcbiAgICAgICAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtdLFxuICAgICAgICAgIFtiaXRnb0dwZ1BydktleV1cbiAgICAgICAgKTtcbiAgICAgICAgc3RhZ2VkQml0Z29Nc2cyID0gc2lnbmVkU3RhZ2VkTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXNbMF0ucGF5bG9hZDtcblxuICAgICAgICBjb25zdCBzaWduZWRNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtEa2xzVHlwZXMuc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb01zZzFVbnNpZ25lZCldLFxuICAgICAgICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgW10sXG4gICAgICAgICAgW2JpdGdvR3BnUHJ2S2V5XVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBiaXRnb01zZzEgPSBzaWduZWRNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlc1swXTtcbiAgICAgICAgYXNzZXJ0Lm9rKGJpdGdvTXNnMSwgJ2JpdGdvTXNnMSBub3QgZm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZXNzaW9uSWQ6ICd0ZXN0aWQnIGFzIE5vbkVtcHR5U3RyaW5nLFxuICAgICAgICAgIGJpdGdvTXNnMTogeyBmcm9tOiAyLCAuLi5iaXRnb01zZzEucGF5bG9hZCB9LFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBub2NrRGVyaXZlUm91bmQyKGJpdGdvUGFpcjogRGtsc0Rydi5EZXJpdmUsIHRpbWVzID0gMSkge1xuICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QoXG4gICAgICAgICcvYXBpL3YyL21wYy9nZW5lcmF0ZWtleScsXG4gICAgICAgIChib2R5KSA9PlxuICAgICAgICAgIGJvZHkucm91bmQgPT09ICdNUEN2MkRlcml2ZS1SMicgJiZcbiAgICAgICAgICBib2R5LnNhZmVJZCA9PT0gU0FGRV9JRCAmJlxuICAgICAgICAgIGJvZHkucGF5bG9hZD8uc2Vzc2lvbklkID09PSAndGVzdGlkJyAmJlxuICAgICAgICAgIGJvZHkucGF5bG9hZD8udXNlck1zZzIgJiZcbiAgICAgICAgICBib2R5LnBheWxvYWQ/LmJhY2t1cE1zZzIgPT09IHVuZGVmaW5lZFxuICAgICAgKVxuICAgICAgLnRpbWVzKHRpbWVzKVxuICAgICAgLnJlcGx5KDIwMCwgYXN5bmMgKHVyaSwgcmVxdWVzdEJvZHk6IHsgcGF5bG9hZDogTVBDdjJEZXJpdmVSb3VuZDJSZXF1ZXN0IH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHVzZXJNc2cyIH0gPSByZXF1ZXN0Qm9keS5wYXlsb2FkO1xuICAgICAgICBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFt7IGZyb206IDAsIHBheWxvYWQ6IHsgbWVzc2FnZTogdXNlck1zZzIubWVzc2FnZSwgc2lnbmF0dXJlOiB1c2VyTXNnMi5zaWduYXR1cmUgfSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFt1c2VyR3BnUHViS2V5XSxcbiAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgICBiaXRnb1BhaXIuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbeyBwYXlsb2FkOiBCdWZmZXIuZnJvbSh1c2VyTXNnMi5tZXNzYWdlLCAnYmFzZTY0JyksIGZyb206IDAgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBhc3NlcnQub2soc3RhZ2VkQml0Z29Nc2cyLCAnc3RhZ2VkIEJpdEdvIG1zZzIgbWlzc2luZycpO1xuICAgICAgICByZXR1cm4geyBzZXNzaW9uSWQsIGJpdGdvTXNnMjogeyBmcm9tOiAyLCAuLi5zdGFnZWRCaXRnb01zZzIgfSB9O1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBub2NrRGVyaXZlUm91bmQzKGJpdGdvUGFpcjogRGtsc0Rydi5EZXJpdmUsIHRpbWVzID0gMSkge1xuICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QoXG4gICAgICAgICcvYXBpL3YyL21wYy9nZW5lcmF0ZWtleScsXG4gICAgICAgIChib2R5KSA9PiBib2R5LnJvdW5kID09PSAnTVBDdjJEZXJpdmUtUjMnICYmIGJvZHkuc2FmZUlkID09PSBTQUZFX0lEICYmIGJvZHkucGF5bG9hZD8uc2Vzc2lvbklkID09PSAndGVzdGlkJ1xuICAgICAgKVxuICAgICAgLnRpbWVzKHRpbWVzKVxuICAgICAgLnJlcGx5KDIwMCwgYXN5bmMgKHVyaSwgcmVxdWVzdEJvZHk6IHsgcGF5bG9hZDogTVBDdjJEZXJpdmVSb3VuZDNSZXF1ZXN0IH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBzZXNzaW9uSWQgfSA9IHJlcXVlc3RCb2R5LnBheWxvYWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBEa2xzVHlwZXMuZ2V0Q29tbW9uS2V5Y2hhaW4oYml0Z29QYWlyLmdldEtleVNoYXJlKCkpIGFzIE5vbkVtcHR5U3RyaW5nLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBub2NrQWRkQ2hpbGRLZXkoY29pbjogc3RyaW5nLCB0aW1lcyA9IDIsIGluZGV4ID0gREVSSVZBVElPTl9JTkRFWCkge1xuICAgIHJldHVybiBub2NrKCdodHRwczovL2JpdGdvLmZha2V1cmwnKVxuICAgICAgLnBvc3QoXG4gICAgICAgIGAvYXBpL3YyLyR7Y29pbn0va2V5YCxcbiAgICAgICAgKGJvZHk6IEFkZEtleWNoYWluT3B0aW9ucyAmIHsgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aD86IHN0cmluZyB9KSA9PlxuICAgICAgICAgIGJvZHkua2V5VHlwZSA9PT0gJ3RzcycgJiZcbiAgICAgICAgICBib2R5LmlzTVBDdjIgPT09IHRydWUgJiZcbiAgICAgICAgICBib2R5LnNhZmVJZCA9PT0gU0FGRV9JRCAmJlxuICAgICAgICAgICEhYm9keS5wYXJlbnQgJiZcbiAgICAgICAgICBib2R5LmRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGggPT09IGBtLyR7aW5kZXh9J2BcbiAgICAgIClcbiAgICAgIC50aW1lcyh0aW1lcylcbiAgICAgIC5yZXBseSgyMDAsICh1cmksIHJlcXVlc3RCb2R5OiBBZGRLZXljaGFpbk9wdGlvbnMpID0+ICh7XG4gICAgICAgIGlkOiByZXF1ZXN0Qm9keS5zb3VyY2UsXG4gICAgICAgIHNvdXJjZTogcmVxdWVzdEJvZHkuc291cmNlLFxuICAgICAgICB0eXBlOiByZXF1ZXN0Qm9keS5rZXlUeXBlLFxuICAgICAgICBjb21tb25LZXljaGFpbjogcmVxdWVzdEJvZHkuY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgIGVuY3J5cHRlZFBydjogcmVxdWVzdEJvZHkuZW5jcnlwdGVkUHJ2LFxuICAgICAgfSkpO1xuICB9XG59KTtcbiJdfQ==
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC92Mi91bml0L2ludGVybmFsL3Rzc1V0aWxzL2VjZHNhVnJmTVBDdjIvY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBQ2pDLDZCQUE4QjtBQUM5QixtQ0FBbUM7QUFDbkMsbUNBQWdDO0FBRWhDLDhDQUF3RDtBQUN4RCw4Q0FBaUY7QUFDakYsb0RBQTRGO0FBRzVGLCtDQUFpRTtBQUVqRSxNQUFNLE9BQU8sR0FBRyxrQ0FBa0MsQ0FBQztBQUNuRCxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFDOUMsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFFekQsUUFBUSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7SUFDeEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLE1BQU0sWUFBWSxHQUFHLGtDQUFrQyxDQUFDO0lBQ3hELElBQUksS0FBYSxDQUFDO0lBQ2xCLElBQUksS0FBeUIsQ0FBQztJQUM5QixJQUFJLFFBQXVDLENBQUM7SUFDNUMsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxXQUVILENBQUM7SUFDRixJQUFJLFNBQTJFLENBQUM7SUFDaEYsSUFBSSxjQUFtRCxDQUFDO0lBQ3hELElBQUksYUFBa0QsQ0FBQztJQUN2RCxJQUFJLGVBQW1FLENBQUM7SUFFeEUsTUFBTSxDQUFDLEtBQUs7UUFDVixPQUFPLENBQUMsTUFBTSxDQUFD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QUMsWUFBWTtTQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgKiBhcyBvcGVucGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnY2Jvci14JztcblxuaW1wb3J0IHsgVGVzdGFibGVCRywgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEFkZEtleWNoYWluT3B0aW9ucywgY29tbW9uLCBFQ0RTQVV0aWxzLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgRGtsc0NvbW1zLCBEa2xzRHJ2LCBEa2xzVHlwZXMsIERrbHNVdGlscywgRGtsc1ZyZlV0aWxzIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7IE1QQ3YyRGVyaXZlUm91bmQxUmVxdWVzdCwgTVBDdjJEZXJpdmVSb3VuZDJSZXF1ZXN0LCBNUEN2MkRlcml2ZVJvdW5kM1JlcXVlc3QgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IE5vbkVtcHR5U3RyaW5nIH0gZnJvbSAnaW8tdHMtdHlwZXMnO1xuaW1wb3J0IHsgQml0R28sIEJpdGdvR1BHUHVibGljS2V5IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjJztcblxuY29uc3QgU0FGRV9JRCA9ICc2ZmE4NTM3ZTNlZjVhODc4ZmQzYWU4OTlmM2FiN2U1YSc7XG5jb25zdCBVU0VSX1JPT1RfS0VZX0lEID0gJ3Jvb3QtdXNlci1rZXktaWQnO1xuY29uc3QgREVSSVZBVElPTl9JTkRFWCA9IDA7XG5jb25zdCBCSVRHT19ST09UX0tFWV9JRCA9ICdyb290LWJpdGdvLWtleS1pZCc7XG5jb25zdCBCQUNLVVBfUk9PVF9LRVlfSUQgPSAncm9vdC1iYWNrdXAta2V5LWlkJztcbmNvbnN0IFBBVEhfTTAgPSBuZXcgVWludDhBcnJheShbMHg4MCwgMHgwMCwgMHgwMCwgMHgwMF0pO1xuXG5kZXNjcmliZSgnVFNTIEVDRFNBIHNhZmUgY2hpbGQga2V5Y2hhaW5zICh1c2VyL0JpdEdvIGhhcmQgZGVyaXZlKTonLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5OYW1lID0gJ2h0ZXRoJztcbiAgY29uc3QgZW50ZXJwcmlzZUlkID0gJzY0NDkxNTNhNmY2YmMyMDAwNmQ2Njc3MWNkYmUxNWQzJztcbiAgbGV0IGJnVXJsOiBzdHJpbmc7XG4gIGxldCBiaXRnbzogVGVzdGFibGVCRyAmIEJpdEdvO1xuICBsZXQgdHNzVXRpbHM6IEVDRFNBVXRpbHMuRWNkc2FWcmZNUEN2MlV0aWxzO1xuICBsZXQgd2FsbGV0OiBXYWxsZXQ7XG4gIGxldCBiaXRHb0dwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+ICYge1xuICAgIHJldm9jYXRpb25DZXJ0aWZpY2F0ZTogc3RyaW5nO1xuICB9O1xuICBsZXQgY29uc3RhbnRzOiB7IG1wYzogeyBiaXRnb1B1YmxpY0tleTogc3RyaW5nOyBiaXRnb01QQ3YyUHVibGljS2V5OiBzdHJpbmcgfSB9O1xuICBsZXQgYml0Z29HcGdQcnZLZXk6IHsgcGFydHlJZDogbnVtYmVyOyBncGdLZXk6IHN0cmluZyB9O1xuICBsZXQgdXNlckdwZ1B1YktleTogeyBwYXJ0eUlkOiBudW1iZXI7IGdwZ0tleTogc3RyaW5nIH07XG4gIGxldCBzdGFnZWRCaXRnb01zZzI6IHsgbWVzc2FnZTogc3RyaW5nOyBzaWduYXR1cmU6IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgb3BlbnBncC5jb25maWcucmVqZWN0Q3VydmVzID0gbmV3IFNldCgpO1xuICAgIGJpdEdvR3BnS2V5ID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbeyBuYW1lOiAnYml0Z28nLCBlbWFpbDogJ2JpdGdvQHRlc3QuY29tJyB9XSxcbiAgICAgIGN1cnZlOiAnc2VjcDI1NmsxJyxcbiAgICB9KTtcbiAgICBjb25zdGFudHMgPSB7XG4gICAgICBtcGM6IHtcbiAgICAgICAgYml0Z29QdWJsaWNLZXk6IGJpdEdvR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgICAgYml0Z29NUEN2MlB1YmxpY0tleTogYml0R29HcGdLZXkucHVibGljS2V5LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGJpdGdvR3BnUHJ2S2V5ID0geyBwYXJ0eUlkOiAyLCBncGdLZXk6IGJpdEdvR3BnS2V5LnByaXZhdGVLZXkgfTtcblxuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0udXJpO1xuXG4gICAgY29uc3QgYmFzZUNvaW4gPSBiaXRnby5jb2luKGNvaW5OYW1lKTtcbiAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlQ29pbiwge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsXG4gICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlSWQsXG4gICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH0pO1xuICAgIHRzc1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FWcmZNUEN2MlV0aWxzKGJpdGdvLCBiYXNlQ29pbiwgd2FsbGV0KTtcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIHN0YWdlZEJpdGdvTXNnMiA9IHVuZGVmaW5lZDtcbiAgICBhd2FpdCBub2NrR2V0Qml0Z29QdWJsaWNLZXlCYXNlZE9uRmVhdHVyZUZsYWdzKGNvaW5OYW1lLCBlbnRlcnByaXNlSWQsIGJpdEdvR3BnS2V5KTtcbiAgICBub2NrKGJnVXJsKS5nZXQoJy9hcGkvdjEvY2xpZW50L2NvbnN0YW50cycpLnRpbWVzKDMyKS5yZXBseSgyMDAsIHsgdHRsOiAzNjAwLCBjb25zdGFudHMgfSk7XG4gIH0pO1xuXG4gIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICBub2NrLmNsZWFuQWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZGVyaXZlIHRoZSB1c2VyIGNoaWxkIGFuZCByZWdpc3RlciB0aGUgYmFja3VwIHdpdGhvdXQgZW5jcnlwdGVkUHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFt1c2VyUm9vdCwgLCBiaXRnb1Jvb3RdID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3ZyZlVzZXIsICwgdnJmQml0Z29dID0gYXdhaXQgRGtsc1ZyZlV0aWxzLmdlbmVyYXRlVnJmREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgYml0Z29QYWlyID0gbmV3IERrbHNEcnYuRGVyaXZlKDMsIDIsIDIsIGJpdGdvUm9vdC5nZXRLZXlTaGFyZSgpLCB2cmZCaXRnby5nZXRLZXlTaGFyZSgpLCBQQVRIX00wKTtcblxuICAgIGNvbnN0IHJvdW5kMU5vY2sgPSBhd2FpdCBub2NrRGVyaXZlUm91bmQxKGJpdGdvUGFpcik7XG4gICAgY29uc3Qgcm91bmQyTm9jayA9IGF3YWl0IG5vY2tEZXJpdmVSb3VuZDIoYml0Z29QYWlyKTtcbiAgICBjb25zdCByb3VuZDNOb2NrID0gYXdhaXQgbm9ja0Rlcml2ZVJvdW5kMyhiaXRnb1BhaXIpO1xuICAgIGNvbnN0IGFkZEtleU5vY2sgPSBhd2FpdCBub2NrQWRkQ2hpbGRLZXkoY29pbk5hbWUpO1xuXG4gICAgY29uc3QgeyB1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluIH0gPSBhd2FpdCB0c3NVdGlscy5jcmVhdGVTYWZlQ2hpbGRLZXljaGFpbnMoe1xuICAgICAgcGFzc3BocmFzZTogJ3Rlc3QnLFxuICAgICAgZW50ZXJwcmlzZTogZW50ZXJwcmlzZUlkLFxuICAgICAgc2FmZUlkOiBTQUZFX0lELFxuICAgICAgcGFyZW50S2V5SWQ6IEJJVEdPX1JPT1RfS0VZX0lELFxuICAgICAgZGVyaXZhdGlvbkluZGV4OiBERVJJVkFUSU9OX0lOREVYLFxuICAgICAgdXNlclJvb3RLZXlJZDogVVNFUl9ST09UX0tFWV9JRCxcbiAgICAgIGJhY2t1cFJvb3RLZXlJZDogQkFDS1VQX1JPT1RfS0VZX0lELFxuICAgICAgdXNlclJvb3RLZXlTaGFyZTogdXNlclJvb3QuZ2V0S2V5U2hhcmUoKSxcbiAgICAgIHVzZXJSb290VnJmS2V5U2hhcmU6IHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSxcbiAgICB9KTtcblxuICAgIGFzc2VydC5vayhyb3VuZDFOb2NrLmlzRG9uZSgpKTtcbiAgICBhc3NlcnQub2socm91bmQyTm9jay5pc0RvbmUoKSk7XG4gICAgYXNzZXJ0Lm9rKHJvdW5kM05vY2suaXNEb25lKCkpO1xuICAgIGFzc2VydC5vayhhZGRLZXlOb2NrLmlzRG9uZSgpKTtcbiAgICBhc3NlcnQuZXF1YWwodXNlcktleWNoYWluLmNvbW1vbktleWNoYWluLCBiYWNrdXBLZXljaGFpbi5jb21tb25LZXljaGFpbik7XG4gICAgYXNzZXJ0LmVxdWFsKGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sIHVzZXJLZXljaGFpbi5jb21tb25LZXljaGFpbik7XG4gICAgYXNzZXJ0LmVxdWFsKGJpdGdvS2V5Y2hhaW4uc291cmNlLCAnYml0Z28nKTtcbiAgICBhc3NlcnQuZXF1YWwoYml0Z29LZXljaGFpbi5lbmNyeXB0ZWRQcnYsIHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0LmVxdWFsKHVzZXJLZXljaGFpbi5jb21tb25LZXljaGFpbiwgRGtsc1R5cGVzLmdldENvbW1vbktleWNoYWluKGJpdGdvUGFpci5nZXRLZXlTaGFyZSgpKSk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyUHJ2ID0gdXNlcktleWNoYWluLmVuY3J5cHRlZFBydjtcbiAgICBhc3NlcnQub2soZW5jcnlwdGVkVXNlclBydik7XG4gICAgYXNzZXJ0LmVxdWFsKGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydiwgdW5kZWZpbmVkKTtcbiAgICBjb25zdCBkZWNyeXB0ZWRVc2VyUHJ2ID0gYXdhaXQgYml0Z28uZGVjcnlwdCh7IGlucHV0OiBlbmNyeXB0ZWRVc2VyUHJ2LCBwYXNzd29yZDogJ3Rlc3QnIH0pO1xuICAgIGNvbnN0IHVzZXJDaGlsZFNoYXJlID0gZGVjb2RlKEJ1ZmZlci5mcm9tKGRlY3J5cHRlZFVzZXJQcnYsICdiYXNlNjQnKSk7XG4gICAgYXNzZXJ0LmVxdWFsKHVzZXJDaGlsZFNoYXJlLnZlcnNpb24sIHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0LmVxdWFsKHVzZXJDaGlsZFNoYXJlLnZyZiwgdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQuZXF1YWwodXNlckNoaWxkU2hhcmUucGFydHlfaWQsIDApO1xuICAgIGFzc2VydC5vayh1c2VyQ2hpbGRTaGFyZS5zX2kpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlcml2ZSBhdCBhIG5vbi16ZXJvIGhhcmRlbmVkIGluZGV4IGFuZCBhZ3JlZSB3aXRoIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaWR4ID0gNztcbiAgICBjb25zdCBwYXRoID0gbmV3IFVpbnQ4QXJyYXkoWzB4ODAgfCAoaWR4ID4+PiAyNCksIDAsIDAsIGlkeF0pO1xuICAgIGNvbnN0IFt1c2VyUm9vdCwgLCBiaXRnb1Jvb3RdID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3ZyZlVzZXIsICwgdnJmQml0Z29dID0gYXdhaXQgRGtsc1ZyZlV0aWxzLmdlbmVyYXRlVnJmREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgYml0Z29QYWlyID0gbmV3IERrbHNEcnYuRGVyaXZlKDMsIDIsIDIsIGJpdGdvUm9vdC5nZXRLZXlTaGFyZSgpLCB2cmZCaXRnby5nZXRLZXlTaGFyZSgpLCBwYXRoKTtcblxuICAgIGNvbnN0IHJvdW5kMU5vY2sgPSBhd2FpdCBub2NrRGVyaXZlUm91bmQxKGJpdGdvUGFpciwgMSwgaWR4KTtcbiAgICBjb25zdCByb3VuZDJOb2NrID0gYXdhaXQgbm9ja0Rlcml2ZVJvdW5kMihiaXRnb1BhaXIpO1xuICAgIGNvbnN0IHJvdW5kM05vY2sgPSBhd2FpdCBub2NrRGVyaXZlUm91bmQzKGJpdGdvUGFpcik7XG4gICAgY29uc3QgYWRkS2V5Tm9jayA9IGF3YWl0IG5vY2tBZGRDaGlsZEtleShjb2luTmFtZSwgMywgaWR4KTtcblxuICAgIGNvbnN0IHsgdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiwgYml0Z29LZXljaGFpbiB9ID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zKHtcbiAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0JyxcbiAgICAgIGVudGVycHJpc2U6IGVudGVycHJpc2VJZCxcbiAgICAgIHNhZmVJZDogU0FGRV9JRCxcbiAgICAgIHBhcmVudEtleUlkOiBCSVRHT19ST09UX0tFWV9JRCxcbiAgICAgIGRlcml2YXRpb25JbmRleDogaWR4LFxuICAgICAgdXNlclJvb3RLZXlJZDogVVNFUl9ST09UX0tFWV9JRCxcbiAgICAgIGJhY2t1cFJvb3RLZXlJZDogQkFDS1VQX1JPT1RfS0VZX0lELFxuICAgICAgdXNlclJvb3RLZXlTaGFyZTogdXNlclJvb3QuZ2V0S2V5U2hhcmUoKSxcbiAgICAgIHVzZXJSb290VnJmS2V5U2hhcmU6IHZyZlVzZXIuZ2V0S2V5U2hhcmUoKSxcbiAgICB9KTtcblxuICAgIGFzc2VydC5vayhyb3VuZDFOb2NrLmlzRG9uZSgpKTtcbiAgICBhc3NlcnQub2socm91bmQyTm9jay5pc0RvbmUoKSk7XG4gICAgYXNzZXJ0Lm9rKHJvdW5kM05vY2suaXNEb25lKCkpO1xuICAgIGFzc2VydC5vayhhZGRLZXlOb2NrLmlzRG9uZSgpKTtcbiAgICBhc3NlcnQuZXF1YWwodXNlcktleWNoYWluLmNvbW1vbktleWNoYWluLCBiYWNrdXBLZXljaGFpbi5jb21tb25LZXljaGFpbik7XG4gICAgYXNzZXJ0LmVxdWFsKGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sIHVzZXJLZXljaGFpbi5jb21tb25LZXljaGFpbik7XG4gIH0pO1xuXG4gIGl0KCdyZWdpc3RlcnMgdGhlIEJpdEdvIGNoaWxkIHBsYWNlaG9sZGVyIHdpdGggdGhlIGhhcmRlbmVkIHBhdGggYW5kIG5vIHByaXZhdGUgbWF0ZXJpYWwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgW3VzZXJSb290LCAsIGJpdGdvUm9vdF0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBbdnJmVXNlciwgLCB2cmZCaXRnb10gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBiaXRnb1BhaXIgPSBuZXcgRGtsc0Rydi5EZXJpdmUoMywgMiwgMiwgYml0Z29Sb290LmdldEtleVNoYXJlKCksIHZyZkJpdGdvLmdldEtleVNoYXJlKCksIFBBVEhfTTApO1xuXG4gICAgYXdhaXQgbm9ja0Rlcml2ZVJvdW5kMShiaXRnb1BhaXIpO1xuICAgIGF3YWl0IG5vY2tEZXJpdmVSb3VuZDIoYml0Z29QYWlyKTtcbiAgICBhd2FpdCBub2NrRGVyaXZlUm91bmQzKGJpdGdvUGFpcik7XG5cbiAgICBjb25zdCBhZGRLZXlCb2RpZXM6IEFkZEtleWNoYWluT3B0aW9uc1tdID0gW107XG4gICAgbm9jaygnaHR0cHM6Ly9iaXRnby5mYWtldXJsJylcbiAgICAgIC5wb3N0KGAvYXBpL3YyLyR7Y29pbk5hbWV9L2tleWApXG4gICAgICAudGltZXMoMylcbiAgICAgIC5yZXBseSgyMDAsICh1cmksIHJlcXVlc3RCb2R5OiBBZGRLZXljaGFpbk9wdGlvbnMpID0+IHtcbiAgICAgICAgYWRkS2V5Qm9kaWVzLnB1c2gocmVxdWVzdEJvZHkpO1xuICAgICAgICByZXR1cm4geyBpZDogcmVxdWVzdEJvZHkuc291cmNlLCBzb3VyY2U6IHJlcXVlc3RCb2R5LnNvdXJjZSwgY29tbW9uS2V5Y2hhaW46IHJlcXVlc3RCb2R5LmNvbW1vbktleWNoYWluIH07XG4gICAgICB9KTtcblxuICAgIGNvbnN0IHsgYml0Z29LZXljaGFpbiB9ID0gYXdhaXQgdHNzVXRpbHMuY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zKHtcbiAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0JyxcbiAgICAgIGVudGVycHJpc2U6IGVudGVycHJpc2VJZCxcbiAgICAgIHNhZmVJZDogU0FGRV9JRCxcbiAgICAgIHBhcmVudEtleUlkOiBCSVRHT19ST09UX0tFWV9JRCxcbiAgICAgIGRlcml2YXRpb25JbmRleDogREVSSVZBVElPTl9JTkRFWCxcbiAgICAgIHVzZXJSb290S2V5SWQ6IFVTRVJfUk9PVF9LRVlfSUQsXG4gICAgICBiYWNrdXBSb290S2V5SWQ6IEJBQ0tVUF9ST09UX0tFWV9JRCxcbiAgICAgIHVzZXJSb290S2V5U2hhcmU6IHVzZXJSb290LmdldEtleVNoYXJlKCksXG4gICAgICB1c2VyUm9vdFZyZktleVNoYXJlOiB2cmZVc2VyLmdldEtleVNoYXJlKCksXG4gICAgfSk7XG5cbiAgICBjb25zdCB1c2VyQm9keSA9IGFkZEtleUJvZGllcy5maW5kKChib2R5KSA9PiBib2R5LnNvdXJjZSA9PT0gJ3VzZXInKTtcbiAgICBhc3NlcnQub2sodXNlckJvZHksICdleHBlY3RlZCBhIHVzZXIgY2hpbGQgcmVnaXN0cmF0aW9uJyk7XG4gICAgY29uc3QgYml0Z29Cb2R5ID0gYWRkS2V5Qm9kaWVzLmZpbmQoKGJvZHkpID0+IGJvZHkuc291cmNlID09PSAnYml0Z28nKTtcbiAgICBhc3NlcnQub2soYml0Z29Cb2R5LCAnZXhwZWN0ZWQgYSBiaXRnbyBjaGlsZCByZWdpc3RyYXRpb24nKTtcbiAgICAvLyBTYW1lIGNvbW1vbiBrZXljaGFpbiBhY3Jvc3MgYWxsIHRocmVlIGNoaWxkIHJlZ2lzdHJhdGlvbnMuXG4gICAgYXNzZXJ0LmVxdWFsKGJpdGdvQm9keS5jb21tb25LZXljaGFpbiwgdXNlckJvZHkuY29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydC5lcXVhbChiaXRnb0JvZHkuY29tbW9uS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4pO1xuICAgIC8vIEFsbCBjaGlsZCBwYXRocyBhcmUgaGFyZGVuZWQuXG4gICAgYXNzZXJ0LmVxdWFsKHVzZXJCb2R5LmRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGgsIFwibS8wJ1wiKTtcbiAgICBhc3NlcnQuZXF1YWwodXNlckJvZHkucGFyZW50LCBVU0VSX1JPT1RfS0VZX0lEKTtcbiAgICBjb25zdCBiYWNrdXBCb2R5ID0gYWRkS2V5Qm9kaWVzLmZpbmQoKGJvZHkpID0+IGJvZHkuc291cmNlID09PSAnYmFja3VwJyk7XG4gICAgYXNzZXJ0Lm9rKGJhY2t1cEJvZHksICdleHBlY3RlZCBhIGJhY2t1cCBjaGlsZCByZWdpc3RyYXRpb24nKTtcbiAgICBhc3NlcnQuZXF1YWwoYmFja3VwQm9keS5kZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoLCBcIm0vMCdcIik7XG4gICAgYXNzZXJ0LmVxdWFsKGJhY2t1cEJvZHkucGFyZW50LCBCQUNLVVBfUk9PVF9LRVlfSUQpO1xuICAgIC8vIEV4YWN0IHdpcmUgYm9keTogcHVibGljLW9ubHkgcGxhY2Vob2xkZXIgd2l0aCBubyBwcml2YXRlIG1hdGVyaWFsLlxuICAgIGFzc2VydC5kZWVwRXF1YWwoYml0Z29Cb2R5LCB7XG4gICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICBrZXlUeXBlOiAndHNzJyxcbiAgICAgIGlzTVBDdjI6IHRydWUsXG4gICAgICBjb21tb25LZXljaGFpbjogdXNlckJvZHkuY29tbW9uS2V5Y2hhaW4sXG4gICAgICBzYWZlSWQ6IFNBRkVfSUQsXG4gICAgICBwYXJlbnQ6IEJJVEdPX1JPT1RfS0VZX0lELFxuICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogXCJtLzAnXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IHJvb3Qga2V5IG1hdGVyaWFsIHRoYXQgaXMgbm90IGEgdmFsaWQgVlJGIGVudmVsb3BlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFssICwgYml0Z29Sb290XSA9IGF3YWl0IERrbHNVdGlscy5nZW5lcmF0ZURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IFssICwgdnJmQml0Z29dID0gYXdhaXQgRGtsc1ZyZlV0aWxzLmdlbmVyYXRlVnJmREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgYml0Z29QYWlyID0gbmV3IERrbHNEcnYuRGVyaXZlKDMsIDIsIDIsIGJpdGdvUm9vdC5nZXRLZXlTaGFyZSgpLCB2cmZCaXRnby5nZXRLZXlTaGFyZSgpLCBQQVRIX00wKTtcbiAgICBjb25zdCByb3VuZDFOb2NrID0gYXdhaXQgbm9ja0Rlcml2ZVJvdW5kMShiaXRnb1BhaXIpO1xuICAgIGNvbnN0IHJvdW5kMk5vY2sgPSBhd2FpdCBub2NrRGVyaXZlUm91bmQyKGJpdGdvUGFpcik7XG4gICAgY29uc3Qgcm91bmQzTm9jayA9IGF3YWl0IG5vY2tEZXJpdmVSb3VuZDMoYml0Z29QYWlyKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgdHNzVXRpbHMuY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zKHtcbiAgICAgICAgICBwYXNzcGhyYXNlOiAndGVzdCcsXG4gICAgICAgICAgZW50ZXJwcmlzZTogZW50ZXJwcmlzZUlkLFxuICAgICAgICAgIHNhZmVJZDogU0FGRV9JRCxcbiAgICAgICAgICBwYXJlbnRLZXlJZDogQklUR09fUk9PVF9LRVlfSUQsXG4gICAgICAgICAgZGVyaXZhdGlvbkluZGV4OiBERVJJVkFUSU9OX0lOREVYLFxuICAgICAgICAgIHVzZXJSb290S2V5SWQ6IFVTRVJfUk9PVF9LRVlfSUQsXG4gICAgICAgICAgYmFja3VwUm9vdEtleUlkOiBCQUNLVVBfUk9PVF9LRVlfSUQsXG4gICAgICAgICAgdXNlclJvb3RLZXlTaGFyZTogQnVmZmVyLmZyb20oJ2dhcmJhZ2UnKSxcbiAgICAgICAgICB1c2VyUm9vdFZyZktleVNoYXJlOiB2cmZCaXRnby5nZXRLZXlTaGFyZSgpLFxuICAgICAgICB9KSxcbiAgICAgIC9DQk9SIGRlY29kZXxkb2VzIG5vdCBtYXRjaCByb290IGtleSBzaGFyZSBwYXJ0eUlkfFZSRiBrZXlzaGFyZS9pXG4gICAgKTtcbiAgICBhc3NlcnQub2soIXJvdW5kMU5vY2suaXNEb25lKCksICdyb3VuZCAxIG11c3Qgbm90IGJlIHNlbnQgZm9yIGludmFsaWQgcm9vdCBtYXRlcmlhbCcpO1xuICAgIGFzc2VydC5vayghcm91bmQyTm9jay5pc0RvbmUoKSwgJ3JvdW5kIDIgbXVzdCBub3QgYmUgc2VudCBmb3IgaW52YWxpZCByb290IG1hdGVyaWFsJyk7XG4gICAgYXNzZXJ0Lm9rKCFyb3VuZDNOb2NrLmlzRG9uZSgpLCAncm91bmQgMyBtdXN0IG5vdCBiZSBzZW50IGZvciBpbnZhbGlkIHJvb3QgbWF0ZXJpYWwnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgYSByb290IGJsb2Igd2l0aCBhIFZSRiBwYXJ0eUlkIG1pc21hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IFt1c2VyUm9vdCwgLCBiaXRnb1Jvb3RdID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgWywgdnJmQmFja3VwLCB2cmZCaXRnb10gPSBhd2FpdCBEa2xzVnJmVXRpbHMuZ2VuZXJhdGVWcmZES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBiaXRnb1BhaXIgPSBuZXcgRGtsc0Rydi5EZXJpdmUoMywgMiwgMiwgYml0Z29Sb290LmdldEtleVNoYXJlKCksIHZyZkJpdGdvLmdldEtleVNoYXJlKCksIFBBVEhfTTApO1xuICAgIGNvbnN0IHJvdW5kMU5vY2sgPSBhd2FpdCBub2NrRGVyaXZlUm91bmQxKGJpdGdvUGFpcik7XG4gICAgY29uc3Qgcm91bmQyTm9jayA9IGF3YWl0IG5vY2tEZXJpdmVSb3VuZDIoYml0Z29QYWlyKTtcbiAgICBjb25zdCByb3VuZDNOb2NrID0gYXdhaXQgbm9ja0Rlcml2ZVJvdW5kMyhiaXRnb1BhaXIpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICB0c3NVdGlscy5jcmVhdGVTYWZlQ2hpbGRLZXljaGFpbnMoe1xuICAgICAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0JyxcbiAgICAgICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlSWQsXG4gICAgICAgICAgc2FmZUlkOiBTQUZFX0lELFxuICAgICAgICAgIHBhcmVudEtleUlkOiBCSVRHT19ST09UX0tFWV9JRCxcbiAgICAgICAgICBkZXJpdmF0aW9uSW5kZXg6IERFUklWQVRJT05fSU5ERVgsXG4gICAgICAgICAgdXNlclJvb3RLZXlJZDogVVNFUl9ST09UX0tFWV9JRCxcbiAgICAgICAgICBiYWNrdXBSb290S2V5SWQ6IEJBQ0tVUF9ST09UX0tFWV9JRCxcbiAgICAgICAgICB1c2VyUm9vdEtleVNoYXJlOiB1c2VyUm9vdC5nZXRLZXlTaGFyZSgpLFxuICAgICAgICAgIHVzZXJSb290VnJmS2V5U2hhcmU6IHZyZkJhY2t1cC5nZXRLZXlTaGFyZSgpLFxuICAgICAgICB9KSxcbiAgICAgIC9kb2VzIG5vdCBtYXRjaCBWUkYga2V5IHNoYXJlIHBhcnR5SWQvXG4gICAgKTtcbiAgICBhc3NlcnQub2soIXJvdW5kMU5vY2suaXNEb25lKCksICdyb3VuZCAxIG11c3Qgbm90IGJlIHNlbnQgZm9yIG1pc21hdGNoZWQgVlJGIG1hdGVyaWFsJyk7XG4gICAgYXNzZXJ0Lm9rKCFyb3VuZDJOb2NrLmlzRG9uZSgpLCAncm91bmQgMiBtdXN0IG5vdCBiZSBzZW50IGZvciBtaXNtYXRjaGVkIFZSRiBtYXRlcmlhbCcpO1xuICAgIGFzc2VydC5vayghcm91bmQzTm9jay5pc0RvbmUoKSwgJ3JvdW5kIDMgbXVzdCBub3QgYmUgc2VudCBmb3IgbWlzbWF0Y2hlZCBWUkYgbWF0ZXJpYWwnKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gbm9ja0dldEJpdGdvUHVibGljS2V5QmFzZWRPbkZlYXR1cmVGbGFncyhcbiAgICBjb2luOiBzdHJpbmcsXG4gICAgZW50ZXJwcmlzZUlkOiBzdHJpbmcsXG4gICAgYml0Z29HcGdLZXlQYWlyOiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz5cbiAgKTogUHJvbWlzZTxCaXRnb0dQR1B1YmxpY0tleT4ge1xuICAgIGNvbnN0IGJpdGdvR1BHUHVibGljS2V5UmVzcG9uc2U6IEJpdGdvR1BHUHVibGljS2V5ID0ge1xuICAgICAgbmFtZTogJ2lycmVsZXZhbnQnLFxuICAgICAgcHVibGljS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgbXBjdjJQdWJsaWNLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBlbnRlcnByaXNlSWQsXG4gICAgfTtcbiAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtjb2lufS90c3MvcHVia2V5YCkucXVlcnkoeyBlbnRlcnByaXNlSWQgfSkucmVwbHkoMjAwLCBiaXRnb0dQR1B1YmxpY0tleVJlc3BvbnNlKTtcbiAgICByZXR1cm4gYml0Z29HUEdQdWJsaWNLZXlSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG5vY2tEZXJpdmVSb3VuZDEoYml0Z29QYWlyOiBEa2xzRHJ2LkRlcml2ZSwgdGltZXMgPSAxLCBpbmRleCA9IERFUklWQVRJT05fSU5ERVgpIHtcbiAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KFxuICAgICAgICAnL2FwaS92Mi9tcGMvZ2VuZXJhdGVrZXknLFxuICAgICAgICAoYm9keSkgPT5cbiAgICAgICAgICBib2R5LnJvdW5kID09PSAnTVBDdjJEZXJpdmUtUjEnICYmXG4gICAgICAgICAgYm9keS5zYWZlSWQgPT09IFNBRkVfSUQgJiZcbiAgICAgICAgICBib2R5LnBheWxvYWQ/LnBhcmVudEtleUlkID09PSBCSVRHT19ST09UX0tFWV9JRCAmJlxuICAgICAgICAgIGJvZHkucGF5bG9hZD8uZGVyaXZhdGlvbkluZGV4ID09PSBpbmRleCAmJlxuICAgICAgICAgIGJvZHkucGF5bG9hZD8udXNlckdwZ1B1YmxpY0tleSAmJlxuICAgICAgICAgIGJvZHkucGF5bG9hZD8udXNlck1zZzEgJiZcbiAgICAgICAgICBib2R5LnBheWxvYWQ/LmJhY2t1cEdwZ1B1YmxpY0tleSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgYm9keS5wYXlsb2FkPy5iYWNrdXBNc2cxID09PSB1bmRlZmluZWRcbiAgICAgIClcbiAgICAgIC50aW1lcyh0aW1lcylcbiAgICAgIC5yZXBseSgyMDAsIGFzeW5jICh1cmksIHJlcXVlc3RCb2R5OiB7IHBheWxvYWQ6IE1QQ3YyRGVyaXZlUm91bmQxUmVxdWVzdCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdXNlckdwZ1B1YmxpY0tleSwgdXNlck1zZzEgfSA9IHJlcXVlc3RCb2R5LnBheWxvYWQ7XG4gICAgICAgIHVzZXJHcGdQdWJLZXkgPSB7IHBhcnR5SWQ6IDAsIGdwZ0tleTogdXNlckdwZ1B1YmxpY0tleSB9O1xuICAgICAgICBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFt7IGZyb206IDAsIHBheWxvYWQ6IHsgbWVzc2FnZTogdXNlck1zZzEubWVzc2FnZSwgc2lnbmF0dXJlOiB1c2VyTXNnMS5zaWduYXR1cmUgfSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFt1c2VyR3BnUHViS2V5XSxcbiAgICAgICAgICBbXVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGJpdGdvTXNnMVVuc2lnbmVkID0gYXdhaXQgYml0Z29QYWlyLmluaXREZXJpdmUoKTtcbiAgICAgICAgY29uc3QgYml0Z29Nc2cyID0gYml0Z29QYWlyLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgICBicm9hZGNhc3RNZXNzYWdlczogW3sgcGF5bG9hZDogQnVmZmVyLmZyb20odXNlck1zZzEubWVzc2FnZSwgJ2Jhc2U2NCcpLCBmcm9tOiAwIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2lnbmVkU3RhZ2VkTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLnNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UoYml0Z29Nc2cyLmJyb2FkY2FzdE1lc3NhZ2VzWzBdKV0sXG4gICAgICAgICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXSxcbiAgICAgICAgICBbYml0Z29HcGdQcnZLZXldXG4gICAgICAgICk7XG4gICAgICAgIHN0YWdlZEJpdGdvTXNnMiA9IHNpZ25lZFN0YWdlZE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnBheWxvYWQ7XG5cbiAgICAgICAgY29uc3Qgc2lnbmVkTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLnNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UoYml0Z29Nc2cxVW5zaWduZWQpXSxcbiAgICAgICAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtdLFxuICAgICAgICAgIFtiaXRnb0dwZ1BydktleV1cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYml0Z29Nc2cxID0gc2lnbmVkTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXNbMF07XG4gICAgICAgIGFzc2VydC5vayhiaXRnb01zZzEsICdiaXRnb01zZzEgbm90IGZvdW5kJyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Vzc2lvbklkOiAndGVzdGlkJyBhcyBOb25FbXB0eVN0cmluZyxcbiAgICAgICAgICBiaXRnb01zZzE6IHsgZnJvbTogMiwgLi4uYml0Z29Nc2cxLnBheWxvYWQgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbm9ja0Rlcml2ZVJvdW5kMihiaXRnb1BhaXI6IERrbHNEcnYuRGVyaXZlLCB0aW1lcyA9IDEpIHtcbiAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KFxuICAgICAgICAnL2FwaS92Mi9tcGMvZ2VuZXJhdGVrZXknLFxuICAgICAgICAoYm9keSkgPT5cbiAgICAgICAgICBib2R5LnJvdW5kID09PSAnTVBDdjJEZXJpdmUtUjInICYmXG4gICAgICAgICAgYm9keS5zYWZlSWQgPT09IFNBRkVfSUQgJiZcbiAgICAgICAgICBib2R5LnBheWxvYWQ/LnNlc3Npb25JZCA9PT0gJ3Rlc3RpZCcgJiZcbiAgICAgICAgICBib2R5LnBheWxvYWQ/LnVzZXJNc2cyICYmXG4gICAgICAgICAgYm9keS5wYXlsb2FkPy5iYWNrdXBNc2cyID09PSB1bmRlZmluZWRcbiAgICAgIClcbiAgICAgIC50aW1lcyh0aW1lcylcbiAgICAgIC5yZXBseSgyMDAsIGFzeW5jICh1cmksIHJlcXVlc3RCb2R5OiB7IHBheWxvYWQ6IE1QQ3YyRGVyaXZlUm91bmQyUmVxdWVzdCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCB1c2VyTXNnMiB9ID0gcmVxdWVzdEJvZHkucGF5bG9hZDtcbiAgICAgICAgYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbeyBmcm9tOiAwLCBwYXlsb2FkOiB7IG1lc3NhZ2U6IHVzZXJNc2cyLm1lc3NhZ2UsIHNpZ25hdHVyZTogdXNlck1zZzIuc2lnbmF0dXJlIH0gfV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbdXNlckdwZ1B1YktleV0sXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgYml0Z29QYWlyLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgICBicm9hZGNhc3RNZXNzYWdlczogW3sgcGF5bG9hZDogQnVmZmVyLmZyb20odXNlck1zZzIubWVzc2FnZSwgJ2Jhc2U2NCcpLCBmcm9tOiAwIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgYXNzZXJ0Lm9rKHN0YWdlZEJpdGdvTXNnMiwgJ3N0YWdlZCBCaXRHbyBtc2cyIG1pc3NpbmcnKTtcbiAgICAgICAgcmV0dXJuIHsgc2Vzc2lvbklkLCBiaXRnb01zZzI6IHsgZnJvbTogMiwgLi4uc3RhZ2VkQml0Z29Nc2cyIH0gfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbm9ja0Rlcml2ZVJvdW5kMyhiaXRnb1BhaXI6IERrbHNEcnYuRGVyaXZlLCB0aW1lcyA9IDEpIHtcbiAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KFxuICAgICAgICAnL2FwaS92Mi9tcGMvZ2VuZXJhdGVrZXknLFxuICAgICAgICAoYm9keSkgPT4gYm9keS5yb3VuZCA9PT0gJ01QQ3YyRGVyaXZlLVIzJyAmJiBib2R5LnNhZmVJZCA9PT0gU0FGRV9JRCAmJiBib2R5LnBheWxvYWQ/LnNlc3Npb25JZCA9PT0gJ3Rlc3RpZCdcbiAgICAgIClcbiAgICAgIC50aW1lcyh0aW1lcylcbiAgICAgIC5yZXBseSgyMDAsIGFzeW5jICh1cmksIHJlcXVlc3RCb2R5OiB7IHBheWxvYWQ6IE1QQ3YyRGVyaXZlUm91bmQzUmVxdWVzdCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2Vzc2lvbklkIH0gPSByZXF1ZXN0Qm9keS5wYXlsb2FkO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogRGtsc1R5cGVzLmdldENvbW1vbktleWNoYWluKGJpdGdvUGFpci5nZXRLZXlTaGFyZSgpKSBhcyBOb25FbXB0eVN0cmluZyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vY2tzIHRoZSBoYXJkZW5lZCBjaGlsZCBrZXkgcmVnaXN0cmF0aW9ucy5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIG5vY2tBZGRDaGlsZEtleShjb2luOiBzdHJpbmcsIHRpbWVzID0gMywgaW5kZXggPSBERVJJVkFUSU9OX0lOREVYKSB7XG4gICAgcmV0dXJuIG5vY2soJ2h0dHBzOi8vYml0Z28uZmFrZXVybCcpXG4gICAgICAucG9zdChcbiAgICAgICAgYC9hcGkvdjIvJHtjb2lufS9rZXlgLFxuICAgICAgICAoYm9keTogQWRkS2V5Y2hhaW5PcHRpb25zICYgeyBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoPzogc3RyaW5nIH0pID0+XG4gICAgICAgICAgYm9keS5rZXlUeXBlID09PSAndHNzJyAmJlxuICAgICAgICAgIGJvZHkuaXNNUEN2MiA9PT0gdHJ1ZSAmJlxuICAgICAgICAgIGJvZHkuc2FmZUlkID09PSBTQUZFX0lEICYmXG4gICAgICAgICAgISFib2R5LnBhcmVudCAmJlxuICAgICAgICAgIGJvZHkuZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aCA9PT0gYG0vJHtpbmRleH0nYFxuICAgICAgKVxuICAgICAgLnRpbWVzKHRpbWVzKVxuICAgICAgLnJlcGx5KDIwMCwgKHVyaSwgcmVxdWVzdEJvZHk6IEFkZEtleWNoYWluT3B0aW9ucykgPT4gKHtcbiAgICAgICAgaWQ6IHJlcXVlc3RCb2R5LnNvdXJjZSxcbiAgICAgICAgc291cmNlOiByZXF1ZXN0Qm9keS5zb3VyY2UsXG4gICAgICAgIHR5cGU6IHJlcXVlc3RCb2R5LmtleVR5cGUsXG4gICAgICAgIGNvbW1vbktleWNoYWluOiByZXF1ZXN0Qm9keS5jb21tb25LZXljaGFpbixcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiByZXF1ZXN0Qm9keS5lbmNyeXB0ZWRQcnYsXG4gICAgICB9KSk7XG4gIH1cbn0pO1xuIl19