@bitgo/sdk-coin-tempo 1.5.2 → 1.6.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.
@@ -1,115 +1,178 @@
1
1
  "use strict";
2
+ /**
3
+ * TIP-20 Integration Tests
4
+ *
5
+ * End-to-end flows for TIP-20 token transactions on Tempo using testnet token addresses.
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
2
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
+ const assert_1 = __importDefault(require("assert"));
3
12
  const mocha_1 = require("mocha");
4
- const transactionBuilder_1 = require("../../src/lib/transactionBuilder");
13
+ const ethers_1 = require("ethers");
5
14
  const statics_1 = require("@bitgo/statics");
15
+ const transactionBuilder_1 = require("../../src/lib/transactionBuilder");
16
+ const transaction_1 = require("../../src/lib/transaction");
17
+ const constants_1 = require("../../src/lib/constants");
18
+ const tempo_1 = require("../resources/tempo");
6
19
  const mockCoinConfig = statics_1.coins.get('ttempo');
20
+ const ALPHA_USD_TOKEN = tempo_1.TESTNET_TOKENS.alphaUSD.address;
21
+ const BETA_USD_TOKEN = tempo_1.TESTNET_TOKENS.betaUSD.address;
22
+ const THETA_USD_TOKEN = tempo_1.TESTNET_TOKENS.thetaUSD.address;
23
+ const RECEIVER_ADDRESS = tempo_1.TEST_RECIPIENT_ADDRESS;
7
24
  (0, mocha_1.describe)('TIP-20 Integration Tests', () => {
8
- const ALPHA_USD_TOKEN = '0x...';
9
- const BETA_USD_TOKEN = '0x...';
10
- const THETA_USD_TOKEN = '0x...';
11
- const RECEIVER_ADDRESS = '0x...';
12
- mocha_1.describe.skip('Single Transfer', () => {
13
- (0, mocha_1.it)('should build single TIP-20 transfer without memo', async () => {
25
+ (0, mocha_1.describe)('Single Transfer', () => {
26
+ (0, mocha_1.it)('should build and serialize single TIP-20 transfer', async () => {
14
27
  const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
15
- builder.addOperation({
28
+ builder
29
+ .addOperation({
16
30
  token: ALPHA_USD_TOKEN,
17
31
  to: RECEIVER_ADDRESS,
18
- amount: '1.0',
19
- });
20
- builder.feeToken(ALPHA_USD_TOKEN);
21
- // TODO: const tx = await builder.build();
32
+ amount: '1',
33
+ memo: '1',
34
+ })
35
+ .feeToken(ALPHA_USD_TOKEN)
36
+ .nonce(0)
37
+ .gas(tempo_1.TX_PARAMS.defaultGas)
38
+ .maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
39
+ .maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
40
+ const tx = (await builder.build());
41
+ assert_1.default.ok(tx instanceof transaction_1.Tip20Transaction);
42
+ assert_1.default.strictEqual(tx.getOperationCount(), 1);
43
+ assert_1.default.strictEqual(tx.isBatch(), false);
44
+ assert_1.default.strictEqual(tx.getOperations()[0].memo, '1');
45
+ const serialized = await tx.serialize();
46
+ assert_1.default.ok(serialized.startsWith(constants_1.AA_TRANSACTION_TYPE));
22
47
  });
23
- (0, mocha_1.it)('should build single TIP-20 transfer with memo', async () => {
48
+ });
49
+ (0, mocha_1.describe)('Batch Transfer', () => {
50
+ (0, mocha_1.it)('should build multi-token batch transfer', async () => {
24
51
  const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
25
- builder.addOperation({
26
- token: ALPHA_USD_TOKEN,
27
- to: RECEIVER_ADDRESS,
28
- amount: '1.0',
29
- memo: '12345',
30
- });
31
- builder.feeToken(ALPHA_USD_TOKEN);
32
- // TODO: const tx = await builder.build();
52
+ builder
53
+ .addOperation({ token: ALPHA_USD_TOKEN, to: RECEIVER_ADDRESS, amount: '15', memo: '1' })
54
+ .addOperation({ token: BETA_USD_TOKEN, to: RECEIVER_ADDRESS, amount: '20', memo: '2' })
55
+ .addOperation({ token: THETA_USD_TOKEN, to: RECEIVER_ADDRESS, amount: '7', memo: '3' })
56
+ .feeToken(BETA_USD_TOKEN)
57
+ .nonce(10)
58
+ .gas(400000n)
59
+ .maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
60
+ .maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
61
+ const tx = (await builder.build());
62
+ assert_1.default.strictEqual(tx.getOperationCount(), 3);
63
+ assert_1.default.strictEqual(tx.isBatch(), true);
64
+ assert_1.default.strictEqual(tx.getFeeToken(), BETA_USD_TOKEN);
65
+ const operations = tx.getOperations();
66
+ assert_1.default.strictEqual(operations[0].token, ALPHA_USD_TOKEN);
67
+ assert_1.default.strictEqual(operations[1].token, BETA_USD_TOKEN);
68
+ assert_1.default.strictEqual(operations[2].token, THETA_USD_TOKEN);
33
69
  });
34
70
  });
35
- mocha_1.describe.skip('Batch Transfer', () => {
36
- (0, mocha_1.it)('should build batch transfer with multiple memos', async () => {
71
+ (0, mocha_1.describe)('Transaction Signing', () => {
72
+ (0, mocha_1.it)('should produce unsigned transaction with correct RLP structure', async () => {
37
73
  const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
38
74
  builder
39
- .addOperation({
40
- token: ALPHA_USD_TOKEN,
41
- to: RECEIVER_ADDRESS,
42
- amount: '0.5',
43
- memo: '1001',
44
- })
45
- .addOperation({
46
- token: ALPHA_USD_TOKEN,
47
- to: RECEIVER_ADDRESS,
48
- amount: '0.3',
49
- memo: '1002',
50
- })
51
- .addOperation({
52
- token: ALPHA_USD_TOKEN,
53
- to: RECEIVER_ADDRESS,
54
- amount: '0.2',
55
- memo: '1003',
56
- });
57
- builder.feeToken(ALPHA_USD_TOKEN);
58
- // TODO: const tx = await builder.build();
75
+ .addOperation({ token: ALPHA_USD_TOKEN, to: RECEIVER_ADDRESS, amount: '1' })
76
+ .feeToken(ALPHA_USD_TOKEN)
77
+ .nonce(0)
78
+ .gas(tempo_1.TX_PARAMS.defaultGas)
79
+ .maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
80
+ .maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
81
+ const tx = (await builder.build());
82
+ const unsignedHex = await tx.serialize();
83
+ assert_1.default.ok(unsignedHex.startsWith(constants_1.AA_TRANSACTION_TYPE));
84
+ assert_1.default.strictEqual(tx.getSignature(), undefined);
85
+ // Verify RLP structure (13 fields for unsigned)
86
+ const rlpPart = '0x' + unsignedHex.slice(4);
87
+ const decoded = ethers_1.ethers.utils.RLP.decode(rlpPart);
88
+ assert_1.default.strictEqual(decoded.length, 13);
59
89
  });
60
- (0, mocha_1.it)('should build multi-token batch transfer', async () => {
90
+ (0, mocha_1.it)('should apply signature and produce broadcast format', async () => {
61
91
  const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
62
92
  builder
63
- .addOperation({
64
- token: ALPHA_USD_TOKEN,
65
- to: RECEIVER_ADDRESS,
66
- amount: '1.5',
67
- memo: '2001',
68
- })
69
- .addOperation({
70
- token: BETA_USD_TOKEN,
71
- to: RECEIVER_ADDRESS,
72
- amount: '2.0',
73
- memo: '2002',
74
- })
75
- .addOperation({
76
- token: THETA_USD_TOKEN,
77
- to: RECEIVER_ADDRESS,
78
- amount: '0.75',
79
- memo: '2003',
80
- });
81
- builder.feeToken(BETA_USD_TOKEN);
82
- // TODO: const tx = await builder.build();
93
+ .addOperation({ token: ALPHA_USD_TOKEN, to: RECEIVER_ADDRESS, amount: '1' })
94
+ .feeToken(ALPHA_USD_TOKEN)
95
+ .nonce(0)
96
+ .gas(tempo_1.TX_PARAMS.defaultGas)
97
+ .maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
98
+ .maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
99
+ const tx = (await builder.build());
100
+ tx.setSignature(tempo_1.SIGNATURE_TEST_DATA.validSignature);
101
+ const signedHex = await tx.toBroadcastFormat();
102
+ // Verify it includes signature (14 fields)
103
+ assert_1.default.ok(signedHex.startsWith(constants_1.AA_TRANSACTION_TYPE));
104
+ const rlpPart = '0x' + signedHex.slice(4);
105
+ const decoded = ethers_1.ethers.utils.RLP.decode(rlpPart);
106
+ assert_1.default.strictEqual(decoded.length, 14);
107
+ const storedSig = tx.getSignature();
108
+ assert_1.default.ok(storedSig);
109
+ assert_1.default.strictEqual(storedSig?.r, tempo_1.SIGNATURE_TEST_DATA.validSignature.r);
83
110
  });
84
111
  });
85
- mocha_1.describe.skip('Transaction Signing', () => {
86
- (0, mocha_1.it)('should sign and serialize transaction', async () => {
112
+ (0, mocha_1.describe)('Fee Token Selection', () => {
113
+ (0, mocha_1.it)('should pay fees with different token than transfer', async () => {
87
114
  const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
88
- builder.addOperation({
89
- token: ALPHA_USD_TOKEN,
90
- to: RECEIVER_ADDRESS,
91
- amount: '1.0',
92
- memo: '9999',
93
- });
94
- builder.feeToken(ALPHA_USD_TOKEN);
95
- // TODO: Implement signing with ethers.js Wallet
96
- // TODO: const tx = await builder.build();
97
- // TODO: tx.setSignature(signature);
98
- // TODO: const serialized = await tx.toBroadcastFormat();
115
+ builder
116
+ .addOperation({ token: ALPHA_USD_TOKEN, to: RECEIVER_ADDRESS, amount: '1' })
117
+ .feeToken(BETA_USD_TOKEN)
118
+ .nonce(0)
119
+ .gas(tempo_1.TX_PARAMS.defaultGas)
120
+ .maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
121
+ .maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
122
+ const tx = (await builder.build());
123
+ assert_1.default.strictEqual(tx.getOperations()[0].token, ALPHA_USD_TOKEN);
124
+ assert_1.default.strictEqual(tx.getFeeToken(), BETA_USD_TOKEN);
125
+ });
126
+ (0, mocha_1.it)('should build transaction without explicit fee token', async () => {
127
+ const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
128
+ builder
129
+ .addOperation({ token: ALPHA_USD_TOKEN, to: RECEIVER_ADDRESS, amount: '1' })
130
+ .nonce(0)
131
+ .gas(tempo_1.TX_PARAMS.defaultGas)
132
+ .maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
133
+ .maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
134
+ const tx = (await builder.build());
135
+ assert_1.default.strictEqual(tx.getFeeToken(), undefined);
136
+ const serialized = await tx.serialize();
137
+ assert_1.default.ok(serialized.startsWith(constants_1.AA_TRANSACTION_TYPE));
99
138
  });
100
139
  });
101
- mocha_1.describe.skip('Fee Token Selection', () => {
102
- (0, mocha_1.it)('should pay fees with different token than transfer', async () => {
140
+ (0, mocha_1.describe)('Transaction JSON', () => {
141
+ (0, mocha_1.it)('should produce complete JSON representation', async () => {
103
142
  const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
104
- builder.addOperation({
105
- token: ALPHA_USD_TOKEN,
106
- to: RECEIVER_ADDRESS,
107
- amount: '1.0',
108
- memo: '5555',
109
- });
110
- builder.feeToken(BETA_USD_TOKEN);
111
- // TODO: const tx = await builder.build();
143
+ builder
144
+ .addOperation({ token: ALPHA_USD_TOKEN, to: RECEIVER_ADDRESS, amount: '123456', memo: '5' })
145
+ .feeToken(BETA_USD_TOKEN)
146
+ .nonce(42)
147
+ .gas(150000n)
148
+ .maxFeePerGas(3000000000n)
149
+ .maxPriorityFeePerGas(1500000000n);
150
+ const tx = (await builder.build());
151
+ const json = tx.toJson();
152
+ assert_1.default.strictEqual(json.type, constants_1.AA_TRANSACTION_TYPE);
153
+ assert_1.default.strictEqual(json.chainId, constants_1.TEMPO_CHAIN_IDS.TESTNET);
154
+ assert_1.default.strictEqual(json.nonce, 42);
155
+ assert_1.default.strictEqual(json.gas, '150000');
156
+ assert_1.default.strictEqual(json.feeToken, BETA_USD_TOKEN);
157
+ const ops = json.operations;
158
+ assert_1.default.strictEqual(ops[0].token, ALPHA_USD_TOKEN);
159
+ assert_1.default.strictEqual(ops[0].amount, '123456');
160
+ assert_1.default.strictEqual(ops[0].memo, '5');
161
+ });
162
+ });
163
+ (0, mocha_1.describe)('canBroadcast Check', () => {
164
+ (0, mocha_1.it)('should return true for valid transaction', async () => {
165
+ const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
166
+ builder
167
+ .addOperation({ token: ALPHA_USD_TOKEN, to: RECEIVER_ADDRESS, amount: '1' })
168
+ .feeToken(ALPHA_USD_TOKEN)
169
+ .nonce(0)
170
+ .gas(tempo_1.TX_PARAMS.defaultGas)
171
+ .maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
172
+ .maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
173
+ const tx = (await builder.build());
174
+ assert_1.default.strictEqual(tx.canBroadcast(), true);
112
175
  });
113
176
  });
114
177
  });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwMjAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ludGVncmF0aW9uL3RpcDIwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQXFDO0FBQ3JDLHlFQUEyRTtBQUUzRSw0Q0FBdUM7QUFFdkMsTUFBTSxjQUFjLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUUzQyxJQUFBLGdCQUFRLEVBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQWtCLENBQUM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsT0FBa0IsQ0FBQztJQUMxQyxNQUFNLGVBQWUsR0FBRyxPQUFrQixDQUFDO0lBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBa0IsQ0FBQztJQUU1QyxnQkFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDcEMsSUFBQSxVQUFFLEVBQUMsa0RBQWtELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSw0Q0FBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1RCxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUNuQixLQUFLLEVBQUUsZUFBZTtnQkFDdEIsRUFBRSxFQUFFLGdCQUFnQjtnQkFDcEIsTUFBTSxFQUFFLEtBQUs7YUFDZCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2xDLDBDQUEwQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUEsVUFBRSxFQUFDLCtDQUErQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksNENBQXVCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUQsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDbkIsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLEVBQUUsRUFBRSxnQkFBZ0I7Z0JBQ3BC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QU8sR0FBRyxJQUFJLDRDQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxlQUFlO2dCQUN0QixFQUFFLEVBQUUsZ0JBQWdCO2dCQUNwQixNQUFNLEVBQUUsS0FBSztnQkFDYixJQUFJLEVBQUUsTUFBTTthQUNiLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakMsMENBQTBDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCB9IGZyb20gJ21vY2hhJztcbmltcG9ydCB7IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQWRkcmVzcyB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHlwZXMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmNvbnN0IG1vY2tDb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dGVtcG8nKTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBJbnRlZ3JhdGlvbiBUZXN0cycsICgpID0+IHtcbiAgY29uc3QgQUxQSEFfVVNEX1RPS0VOID0gJzB4Li4uJyBhcyBBZGRyZXNzO1xuICBjb25zdCBCRVRBX1VTRF9UT0tFTiA9ICcweC4uLicgYXMgQWRkcmVzcztcbiAgY29uc3QgVEhFVEFfVVNEX1RPS0VOID0gJzB4Li4uJyBhcyBBZGRyZXNzO1xuICBjb25zdCBSRUNFSVZFUl9BRERSRVNTID0gJzB4Li4uJyBhcyBBZGRyZXNzO1xuXG4gIGRlc2NyaWJlLnNraXAoJ1NpbmdsZSBUcmFuc2ZlcicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHNpbmdsZSBUSVAtMjAgdHJhbnNmZXIgd2l0aG91dCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbih7XG4gICAgICAgIHRva2VuOiBBTFBIQV9VU0RfVE9LRU4sXG4gICAgICAgIHRvOiBSRUNFSVZFUl9BRERSRVNTLFxuICAgICAgICBhbW91bnQ6ICcxLjAnLFxuICAgICAgfSk7XG4gICAgICBidWlsZGVyLmZlZVRva2VuKEFMUEhBX1VTRF9UT0tFTik7XG4gICAgICAvLyBUT0RPOiBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgc2luZ2xlIFRJUC0yMCB0cmFuc2ZlciB3aXRoIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHtcbiAgICAgICAgdG9rZW46IEFMUEhBX1VTRF9UT0tFTixcbiAgICAgICAgdG86IFJFQ0VJVkVSX0FERFJFU1MsXG4gICAgICAgIGFtb3VudDogJzEuMCcsXG4gICAgICAgIG1lbW86ICcxMjM0NScsXG4gICAgICB9KTtcbiAgICAgIGJ1aWxkZXIuZmVlVG9rZW4oQUxQSEFfVVNEX1RPS0VOKTtcbiAgICAgIC8vIFRPRE86IGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZS5za2lwKCdCYXRjaCBUcmFuc2ZlcicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGJhdGNoIHRyYW5zZmVyIHdpdGggbXVsdGlwbGUgbWVtb3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7XG4gICAgICAgICAgdG9rZW46IEFMUEhBX1VTRF9UT0tFTixcbiAgICAgICAgICB0bzogUkVDRUlWRVJfQUREUkVTUyxcbiAgICAgICAgICBhbW91bnQ6ICcwLjUnLFxuICAgICAgICAgIG1lbW86ICcxMDAxJyxcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7XG4gICAgICAgICAgdG9rZW46IEFMUEhBX1VTRF9UT0tFTixcbiAgICAgICAgICB0bzogUkVDRUlWRVJfQUREUkVTUyxcbiAgICAgICAgICBhbW91bnQ6ICcwLjMnLFxuICAgICAgICAgIG1lbW86ICcxMDAyJyxcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7XG4gICAgICAgICAgdG9rZW46IEFMUEhBX1VTRF9UT0tFTixcbiAgICAgICAgICB0bzogUkVDRUlWRVJfQUREUkVTUyxcbiAgICAgICAgICBhbW91bnQ6ICcwLjInLFxuICAgICAgICAgIG1lbW86ICcxMDAzJyxcbiAgICAgICAgfSk7XG4gICAgICBidWlsZGVyLmZlZVRva2VuKEFMUEhBX1VTRF9UT0tFTik7XG4gICAgICAvLyBUT0RPOiBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgbXVsdGktdG9rZW4gYmF0Y2ggdHJhbnNmZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7XG4gICAgICAgICAgdG9rZW46IEFMUEhBX1VTRF9UT0tFTixcbiAgICAgICAgICB0bzogUkVDRUlWRVJfQUREUkVTUyxcbiAgICAgICAgICBhbW91bnQ6ICcxLjUnLFxuICAgICAgICAgIG1lbW86ICcyMDAxJyxcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7XG4gICAgICAgICAgdG9rZW46IEJFVEFfVVNEX1RPS0VOLFxuICAgICAgICAgIHRvOiBSRUNFSVZFUl9BRERSRVNTLFxuICAgICAgICAgIGFtb3VudDogJzIuMCcsXG4gICAgICAgICAgbWVtbzogJzIwMDInLFxuICAgICAgICB9KVxuICAgICAgICAuYWRkT3BlcmF0aW9uKHtcbiAgICAgICAgICB0b2tlbjogVEhFVEFfVVNEX1RPS0VOLFxuICAgICAgICAgIHRvOiBSRUNFSVZFUl9BRERSRVNTLFxuICAgICAgICAgIGFtb3VudDogJzAuNzUnLFxuICAgICAgICAgIG1lbW86ICcyMDAzJyxcbiAgICAgICAgfSk7XG4gICAgICBidWlsZGVyLmZlZVRva2VuKEJFVEFfVVNEX1RPS0VOKTtcbiAgICAgIC8vIFRPRE86IGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZS5za2lwKCdUcmFuc2FjdGlvbiBTaWduaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2lnbiBhbmQgc2VyaWFsaXplIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbih7XG4gICAgICAgIHRva2VuOiBBTFBIQV9VU0RfVE9LRU4sXG4gICAgICAgIHRvOiBSRUNFSVZFUl9BRERSRVNTLFxuICAgICAgICBhbW91bnQ6ICcxLjAnLFxuICAgICAgICBtZW1vOiAnOTk5OScsXG4gICAgICB9KTtcbiAgICAgIGJ1aWxkZXIuZmVlVG9rZW4oQUxQSEFfVVNEX1RPS0VOKTtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCBzaWduaW5nIHdpdGggZXRoZXJzLmpzIFdhbGxldFxuICAgICAgLy8gVE9ETzogY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAvLyBUT0RPOiB0eC5zZXRTaWduYXR1cmUoc2lnbmF0dXJlKTtcbiAgICAgIC8vIFRPRE86IGNvbnN0IHNlcmlhbGl6ZWQgPSBhd2FpdCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZS5za2lwKCdGZWUgVG9rZW4gU2VsZWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcGF5IGZlZXMgd2l0aCBkaWZmZXJlbnQgdG9rZW4gdGhhbiB0cmFuc2ZlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlci5hZGRPcGVyYXRpb24oe1xuICAgICAgICB0b2tlbjogQUxQSEFfVVNEX1RPS0VOLFxuICAgICAgICB0bzogUkVDRUlWRVJfQUREUkVTUyxcbiAgICAgICAgYW1vdW50OiAnMS4wJyxcbiAgICAgICAgbWVtbzogJzU1NTUnLFxuICAgICAgfSk7XG4gICAgICBidWlsZGVyLmZlZVRva2VuKEJFVEFfVVNEX1RPS0VOKTtcbiAgICAgIC8vIFRPRE86IGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwMjAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ludGVncmF0aW9uL3RpcDIwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7OztBQUVILG9EQUE0QjtBQUM1QixpQ0FBcUM7QUFDckMsbUNBQWdDO0FBQ2hDLDRDQUF1QztBQUN2Qyx5RUFBMkU7QUFDM0UsMkRBQTZEO0FBRTdELHVEQUErRTtBQUMvRSw4Q0FBNEc7QUFFNUcsTUFBTSxjQUFjLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUUzQyxNQUFNLGVBQWUsR0FBRyxzQkFBYyxDQUFDLFFBQVEsQ0FBQyxPQUFrQixDQUFDO0FBQ25FLE1BQU0sY0FBYyxHQUFHLHNCQUFjLENBQUMsT0FBTyxDQUFDLE9BQWtCLENBQUM7QUFDakUsTUFBTSxlQUFlLEdBQUcsc0JBQWMsQ0FBQyxRQUFRLENBQUMsT0FBa0IsQ0FBQztBQUNuRSxNQUFNLGdCQUFnQixHQUFHLDhCQUFpQyxDQUFDO0FBRTNELElBQUEsZ0JBQVEsRUFBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7SUFDeEMsSUFBQSxnQkFBUSxFQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtRQUMvQixJQUFBLFVBQUUsRUFBQyxtREFBbUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFJLDRDQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRTVELE9BQU87aUJBQ0osWUFBWSxDQUFDO2dCQUNaLEtBQUssRUFBRSxlQUFlO2dCQUN0QixFQUFFLEVBQUUsZ0JBQWdCO2dCQUNwQixNQUFNLEVBQUUsR0FBRztnQkFDWCxJQUFJLEVBQUUsR0FBRzthQUNWLENBQUM7aUJBQ0QsUUFBUSxDQUFDLGVBQWUsQ0FBQztpQkFDekIsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDUixHQUFHLENBQUMsaUJBQVMsQ0FBQyxVQUFVLENBQUM7aUJBQ3pC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SUFBSSxFQUFFO1lBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksNENBQXVCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFNUQsT0FBTztpQkFDSixZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7aUJBQzNFLFFBQVEsQ0FBQyxlQUFlLENBQUM7aUJBQ3pCLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ1IsR0FBRyxDQUFDLGlCQUFTLENBQUMsVUFBVSxDQUFDO2lCQUN6QixZQUFZLENBQUMsaUJBQVMsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDM0Msb0JBQW9CLENBQUMsaUJBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBRS9ELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQXFCLENBQUM7WUFDdkQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVElQLTIwIEludGVncmF0aW9uIFRlc3RzXG4gKlxuICogRW5kLXRvLWVuZCBmbG93cyBmb3IgVElQLTIwIHRva2VuIHRyYW5zYWN0aW9ucyBvbiBUZW1wbyB1c2luZyB0ZXN0bmV0IHRva2VuIGFkZHJlc3Nlcy5cbiAqL1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBkZXNjcmliZSwgaXQgfSBmcm9tICdtb2NoYSc7XG5pbXBvcnQgeyBldGhlcnMgfSBmcm9tICdldGhlcnMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRpcDIwVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuLi8uLi9zcmMvbGliL3R5cGVzJztcbmltcG9ydCB7IEFBX1RSQU5TQUNUSU9OX1RZUEUsIFRFTVBPX0NIQUlOX0lEUyB9IGZyb20gJy4uLy4uL3NyYy9saWIvY29uc3RhbnRzJztcbmltcG9ydCB7IFRFU1RORVRfVE9LRU5TLCBUWF9QQVJBTVMsIFNJR05BVFVSRV9URVNUX0RBVEEsIFRFU1RfUkVDSVBJRU5UX0FERFJFU1MgfSBmcm9tICcuLi9yZXNvdXJjZXMvdGVtcG8nO1xuXG5jb25zdCBtb2NrQ29pbkNvbmZpZyA9IGNvaW5zLmdldCgndHRlbXBvJyk7XG5cbmNvbnN0IEFMUEhBX1VTRF9UT0tFTiA9IFRFU1RORVRfVE9LRU5TLmFscGhhVVNELmFkZHJlc3MgYXMgQWRkcmVzcztcbmNvbnN0IEJFVEFfVVNEX1RPS0VOID0gVEVTVE5FVF9UT0tFTlMuYmV0YVVTRC5hZGRyZXNzIGFzIEFkZHJlc3M7XG5jb25zdCBUSEVUQV9VU0RfVE9LRU4gPSBURVNUTkVUX1RPS0VOUy50aGV0YVVTRC5hZGRyZXNzIGFzIEFkZHJlc3M7XG5jb25zdCBSRUNFSVZFUl9BRERSRVNTID0gVEVTVF9SRUNJUElFTlRfQUREUkVTUyBhcyBBZGRyZXNzO1xuXG5kZXNjcmliZSgnVElQLTIwIEludGVncmF0aW9uIFRlc3RzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnU2luZ2xlIFRyYW5zZmVyJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYW5kIHNlcmlhbGl6ZSBzaW5nbGUgVElQLTIwIHRyYW5zZmVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG5cbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7XG4gICAgICAgICAgdG9rZW46IEFMUEhBX1VTRF9UT0tFTixcbiAgICAgICAgICB0bzogUkVDRUlWRVJfQUREUkVTUyxcbiAgICAgICAgICBhbW91bnQ6ICcxJyxcbiAgICAgICAgICBtZW1vOiAnMScsXG4gICAgICAgIH0pXG4gICAgICAgIC5mZWVUb2tlbihBTFBIQV9VU0RfVE9LRU4pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKFRYX1BBUkFNUy5kZWZhdWx0R2FzKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0Lm9rKHR4IGluc3RhbmNlb2YgVGlwMjBUcmFuc2FjdGlvbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHguZ2V0T3BlcmF0aW9uQ291bnQoKSwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHguaXNCYXRjaCgpLCBmYWxzZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHguZ2V0T3BlcmF0aW9ucygpWzBdLm1lbW8sICcxJyk7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcbiAgICAgIGFzc2VydC5vayhzZXJpYWxpemVkLnN0YXJ0c1dpdGgoQUFfVFJBTlNBQ1RJT05fVFlQRSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQmF0Y2ggVHJhbnNmZXInLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBtdWx0aS10b2tlbiBiYXRjaCB0cmFuc2ZlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuXG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogQUxQSEFfVVNEX1RPS0VOLCB0bzogUkVDRUlWRVJfQUREUkVTUywgYW1vdW50OiAnMTUnLCBtZW1vOiAnMScgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBCRVRBX1VTRF9UT0tFTiwgdG86IFJFQ0VJVkVSX0FERFJFU1MsIGFtb3VudDogJzIwJywgbWVtbzogJzInIH0pXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogVEhFVEFfVVNEX1RPS0VOLCB0bzogUkVDRUlWRVJfQUREUkVTUywgYW1vdW50OiAnNycsIG1lbW86ICczJyB9KVxuICAgICAgICAuZmVlVG9rZW4oQkVUQV9VU0RfVE9LRU4pXG4gICAgICAgIC5ub25jZSgxMClcbiAgICAgICAgLmdhcyg0MDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldE9wZXJhdGlvbkNvdW50KCksIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlzQmF0Y2goKSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHguZ2V0RmVlVG9rZW4oKSwgQkVUQV9VU0RfVE9LRU4pO1xuXG4gICAgICBjb25zdCBvcGVyYXRpb25zID0gdHguZ2V0T3BlcmF0aW9ucygpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wZXJhdGlvbnNbMF0udG9rZW4sIEFMUEhBX1VTRF9UT0tFTik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BlcmF0aW9uc1sxXS50b2tlbiwgQkVUQV9VU0RfVE9LRU4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wZXJhdGlvbnNbMl0udG9rZW4sIFRIRVRBX1VTRF9UT0tFTik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBTaWduaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSB1bnNpZ25lZCB0cmFuc2FjdGlvbiB3aXRoIGNvcnJlY3QgUkxQIHN0cnVjdHVyZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuXG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogQUxQSEFfVVNEX1RPS0VOLCB0bzogUkVDRUlWRVJfQUREUkVTUywgYW1vdW50OiAnMScgfSlcbiAgICAgICAgLmZlZVRva2VuKEFMUEhBX1VTRF9UT0tFTilcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoVFhfUEFSQU1TLmRlZmF1bHRHYXMpXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdW5zaWduZWRIZXggPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcblxuICAgICAgYXNzZXJ0Lm9rKHVuc2lnbmVkSGV4LnN0YXJ0c1dpdGgoQUFfVFJBTlNBQ1RJT05fVFlQRSkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldFNpZ25hdHVyZSgpLCB1bmRlZmluZWQpO1xuXG4gICAgICAvLyBWZXJpZnkgUkxQIHN0cnVjdHVyZSAoMTMgZmllbGRzIGZvciB1bnNpZ25lZClcbiAgICAgIGNvbnN0IHJscFBhcnQgPSAnMHgnICsgdW5zaWduZWRIZXguc2xpY2UoNCk7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZXRoZXJzLnV0aWxzLlJMUC5kZWNvZGUocmxwUGFydCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVjb2RlZC5sZW5ndGgsIDEzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgc2lnbmF0dXJlIGFuZCBwcm9kdWNlIGJyb2FkY2FzdCBmb3JtYXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcblxuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IEFMUEhBX1VTRF9UT0tFTiwgdG86IFJFQ0VJVkVSX0FERFJFU1MsIGFtb3VudDogJzEnIH0pXG4gICAgICAgIC5mZWVUb2tlbihBTFBIQV9VU0RfVE9LRU4pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKFRYX1BBUkFNUy5kZWZhdWx0R2FzKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICAgIHR4LnNldFNpZ25hdHVyZShTSUdOQVRVUkVfVEVTVF9EQVRBLnZhbGlkU2lnbmF0dXJlKTtcblxuICAgICAgY29uc3Qgc2lnbmVkSGV4ID0gYXdhaXQgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gVmVyaWZ5IGl0IGluY2x1ZGVzIHNpZ25hdHVyZSAoMTQgZmllbGRzKVxuICAgICAgYXNzZXJ0Lm9rKHNpZ25lZEhleC5zdGFydHNXaXRoKEFBX1RSQU5TQUNUSU9OX1RZUEUpKTtcbiAgICAgIGNvbnN0IHJscFBhcnQgPSAnMHgnICsgc2lnbmVkSGV4LnNsaWNlKDQpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGV0aGVycy51dGlscy5STFAuZGVjb2RlKHJscFBhcnQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29kZWQubGVuZ3RoLCAxNCk7XG5cbiAgICAgIGNvbnN0IHN0b3JlZFNpZyA9IHR4LmdldFNpZ25hdHVyZSgpO1xuICAgICAgYXNzZXJ0Lm9rKHN0b3JlZFNpZyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3RvcmVkU2lnPy5yLCBTSUdOQVRVUkVfVEVTVF9EQVRBLnZhbGlkU2lnbmF0dXJlLnIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRmVlIFRva2VuIFNlbGVjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHBheSBmZWVzIHdpdGggZGlmZmVyZW50IHRva2VuIHRoYW4gdHJhbnNmZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcblxuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IEFMUEhBX1VTRF9UT0tFTiwgdG86IFJFQ0VJVkVSX0FERFJFU1MsIGFtb3VudDogJzEnIH0pXG4gICAgICAgIC5mZWVUb2tlbihCRVRBX1VTRF9UT0tFTilcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoVFhfUEFSQU1TLmRlZmF1bHRHYXMpXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHguZ2V0T3BlcmF0aW9ucygpWzBdLnRva2VuLCBBTFBIQV9VU0RfVE9LRU4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldEZlZVRva2VuKCksIEJFVEFfVVNEX1RPS0VOKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgdHJhbnNhY3Rpb24gd2l0aG91dCBleHBsaWNpdCBmZWUgdG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcblxuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IEFMUEhBX1VTRF9UT0tFTiwgdG86IFJFQ0VJVkVSX0FERFJFU1MsIGFtb3VudDogJzEnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKFRYX1BBUkFNUy5kZWZhdWx0R2FzKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldEZlZVRva2VuKCksIHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gYXdhaXQgdHguc2VyaWFsaXplKCk7XG4gICAgICBhc3NlcnQub2soc2VyaWFsaXplZC5zdGFydHNXaXRoKEFBX1RSQU5TQUNUSU9OX1RZUEUpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIEpTT04nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGNvbXBsZXRlIEpTT04gcmVwcmVzZW50YXRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcblxuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IEFMUEhBX1VTRF9UT0tFTiwgdG86IFJFQ0VJVkVSX0FERFJFU1MsIGFtb3VudDogJzEyMzQ1NicsIG1lbW86ICc1JyB9KVxuICAgICAgICAuZmVlVG9rZW4oQkVUQV9VU0RfVE9LRU4pXG4gICAgICAgIC5ub25jZSg0MilcbiAgICAgICAgLmdhcygxNTAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDMwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoMTUwMDAwMDAwMG4pO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLnR5cGUsIEFBX1RSQU5TQUNUSU9OX1RZUEUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24uY2hhaW5JZCwgVEVNUE9fQ0hBSU5fSURTLlRFU1RORVQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24ubm9uY2UsIDQyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLmdhcywgJzE1MDAwMCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24uZmVlVG9rZW4sIEJFVEFfVVNEX1RPS0VOKTtcblxuICAgICAgY29uc3Qgb3BzID0ganNvbi5vcGVyYXRpb25zIGFzIGFueVtdO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1swXS50b2tlbiwgQUxQSEFfVVNEX1RPS0VOKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcHNbMF0uYW1vdW50LCAnMTIzNDU2Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzWzBdLm1lbW8sICc1Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjYW5Ccm9hZGNhc3QgQ2hlY2snLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdmFsaWQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcblxuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IEFMUEhBX1VTRF9UT0tFTiwgdG86IFJFQ0VJVkVSX0FERFJFU1MsIGFtb3VudDogJzEnIH0pXG4gICAgICAgIC5mZWVUb2tlbihBTFBIQV9VU0RfVE9LRU4pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKFRYX1BBUkFNUy5kZWZhdWx0R2FzKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5jYW5Ccm9hZGNhc3QoKSwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Test resources for Tempo SDK
3
+ */
4
+ export declare const TESTNET_TOKENS: {
5
+ pathUSD: {
6
+ address: string;
7
+ name: string;
8
+ };
9
+ alphaUSD: {
10
+ address: string;
11
+ name: string;
12
+ };
13
+ betaUSD: {
14
+ address: string;
15
+ name: string;
16
+ };
17
+ thetaUSD: {
18
+ address: string;
19
+ name: string;
20
+ };
21
+ };
22
+ export declare const TEST_RECIPIENT_ADDRESS = "0x742d35Cc6634C0532925a3b844Bc454e4438f44e";
23
+ export declare const TX_PARAMS: {
24
+ defaultGas: bigint;
25
+ defaultMaxFeePerGas: bigint;
26
+ defaultMaxPriorityFeePerGas: bigint;
27
+ };
28
+ export declare const SIGNATURE_TEST_DATA: {
29
+ validSignature: {
30
+ r: `0x${string}`;
31
+ s: `0x${string}`;
32
+ yParity: number;
33
+ };
34
+ };
35
+ export declare const MEMO_TEST_CASES: {
36
+ valid: {
37
+ input: string;
38
+ description: string;
39
+ }[];
40
+ invalid: {
41
+ input: string;
42
+ description: string;
43
+ }[];
44
+ };
45
+ export declare const ERROR_MESSAGES: {
46
+ noOperations: RegExp;
47
+ missingNonce: RegExp;
48
+ missingGas: RegExp;
49
+ missingMaxFeePerGas: RegExp;
50
+ missingMaxPriorityFeePerGas: RegExp;
51
+ memoTooLong: RegExp;
52
+ };
53
+ //# sourceMappingURL=tempo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../../test/resources/tempo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;CAiB1B,CAAC;AAGF,eAAO,MAAM,sBAAsB,+CAA+C,CAAC;AAMnF,eAAO,MAAM,SAAS;;;;CAIrB,CAAC;AAMF,eAAO,MAAM,mBAAmB;;WAE+C,KAAK,MAAM,EAAE;WACb,KAAK,MAAM,EAAE;;;CAG3F,CAAC;AAMF,eAAO,MAAM,eAAe;;;;;;;;;CAQ3B,CAAC;AAMF,eAAO,MAAM,cAAc;;;;;;;CAO1B,CAAC"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * Test resources for Tempo SDK
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ERROR_MESSAGES = exports.MEMO_TEST_CASES = exports.SIGNATURE_TEST_DATA = exports.TX_PARAMS = exports.TEST_RECIPIENT_ADDRESS = exports.TESTNET_TOKENS = void 0;
7
+ // ============================================================================
8
+ // TIP-20 Token Addresses (Tempo Testnet)
9
+ // ============================================================================
10
+ exports.TESTNET_TOKENS = {
11
+ pathUSD: {
12
+ address: '0x20c0000000000000000000000000000000000000',
13
+ name: 'ttempo:pathusd',
14
+ },
15
+ alphaUSD: {
16
+ address: '0x20c0000000000000000000000000000000000001',
17
+ name: 'ttempo:alphausd',
18
+ },
19
+ betaUSD: {
20
+ address: '0x20c0000000000000000000000000000000000002',
21
+ name: 'ttempo:betausd',
22
+ },
23
+ thetaUSD: {
24
+ address: '0x20c0000000000000000000000000000000000003',
25
+ name: 'ttempo:thetausd',
26
+ },
27
+ };
28
+ // Valid checksummed test recipient address
29
+ exports.TEST_RECIPIENT_ADDRESS = '0x742d35Cc6634C0532925a3b844Bc454e4438f44e';
30
+ // ============================================================================
31
+ // Transaction Parameters
32
+ // ============================================================================
33
+ exports.TX_PARAMS = {
34
+ defaultGas: BigInt('100000'),
35
+ defaultMaxFeePerGas: BigInt('2000000000'),
36
+ defaultMaxPriorityFeePerGas: BigInt('1000000000'),
37
+ };
38
+ // ============================================================================
39
+ // Signature Test Data
40
+ // ============================================================================
41
+ exports.SIGNATURE_TEST_DATA = {
42
+ validSignature: {
43
+ r: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
44
+ s: '0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321',
45
+ yParity: 0,
46
+ },
47
+ };
48
+ // ============================================================================
49
+ // Memo Test Cases
50
+ // ============================================================================
51
+ exports.MEMO_TEST_CASES = {
52
+ valid: [
53
+ { input: '12345', description: 'numeric' },
54
+ { input: 'INV-001', description: 'alphanumeric with dash' },
55
+ { input: 'a'.repeat(32), description: 'max length 32 bytes' },
56
+ { input: '', description: 'empty string' },
57
+ ],
58
+ invalid: [{ input: 'a'.repeat(33), description: '33 bytes - exceeds limit' }],
59
+ };
60
+ // ============================================================================
61
+ // Error Messages
62
+ // ============================================================================
63
+ exports.ERROR_MESSAGES = {
64
+ noOperations: /At least one operation is required/,
65
+ missingNonce: /Nonce is required/,
66
+ missingGas: /Gas limit is required/,
67
+ missingMaxFeePerGas: /maxFeePerGas is required/,
68
+ missingMaxPriorityFeePerGas: /maxPriorityFeePerGas is required/,
69
+ memoTooLong: /Memo too long/,
70
+ };
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3Jlc291cmNlcy90ZW1wby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILCtFQUErRTtBQUMvRSx5Q0FBeUM7QUFDekMsK0VBQStFO0FBRWxFLFFBQUEsY0FBYyxHQUFHO0lBQzVCLE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGdCQUFnQjtLQUN2QjtJQUNELFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGlCQUFpQjtLQUN4QjtJQUNELE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGdCQUFnQjtLQUN2QjtJQUNELFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBRSw0Q0FBNEM7UUFDckQsSUFBSSxFQUFFLGlCQUFpQjtLQUN4QjtDQUNGLENBQUM7QUFFRiwyQ0FBMkM7QUFDOUIsUUFBQSxzQkFBc0IsR0FBRyw0Q0FBNEMsQ0FBQztBQUVuRiwrRUFBK0U7QUFDL0UseUJBQXlCO0FBQ3pCLCtFQUErRTtBQUVsRSxRQUFBLFNBQVMsR0FBRztJQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUM1QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQ3pDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUM7Q0FDbEQsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxzQkFBc0I7QUFDdEIsK0VBQStFO0FBRWxFLFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsY0FBYyxFQUFFO1FBQ2QsQ0FBQyxFQUFFLG9FQUFxRjtRQUN4RixDQUFDLEVBQUUsb0VBQXFGO1FBQ3hGLE9BQU8sRUFBRSxDQUFDO0tBQ1g7Q0FDRixDQUFDO0FBRUYsK0VBQStFO0FBQy9FLGtCQUFrQjtBQUNsQiwrRUFBK0U7QUFFbEUsUUFBQSxlQUFlLEdBQUc7SUFDN0IsS0FBSyxFQUFFO1FBQ0wsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUU7UUFDMUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRTtRQUMzRCxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRTtRQUM3RCxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtLQUMzQztJQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixFQUFFLENBQUM7Q0FDOUUsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxpQkFBaUI7QUFDakIsK0VBQStFO0FBRWxFLFFBQUEsY0FBYyxHQUFHO0lBQzVCLFlBQVksRUFBRSxvQ0FBb0M7SUFDbEQsWUFBWSxFQUFFLG1CQUFtQjtJQUNqQyxVQUFVLEVBQUUsdUJBQXVCO0lBQ25DLG1CQUFtQixFQUFFLDBCQUEwQjtJQUMvQywyQkFBMkIsRUFBRSxrQ0FBa0M7SUFDL0QsV0FBVyxFQUFFLGVBQWU7Q0FDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdCByZXNvdXJjZXMgZm9yIFRlbXBvIFNES1xuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRJUC0yMCBUb2tlbiBBZGRyZXNzZXMgKFRlbXBvIFRlc3RuZXQpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBURVNUTkVUX1RPS0VOUyA9IHtcbiAgcGF0aFVTRDoge1xuICAgIGFkZHJlc3M6ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgIG5hbWU6ICd0dGVtcG86cGF0aHVzZCcsXG4gIH0sXG4gIGFscGhhVVNEOiB7XG4gICAgYWRkcmVzczogJzB4MjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsXG4gICAgbmFtZTogJ3R0ZW1wbzphbHBoYXVzZCcsXG4gIH0sXG4gIGJldGFVU0Q6IHtcbiAgICBhZGRyZXNzOiAnMHgyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyJyxcbiAgICBuYW1lOiAndHRlbXBvOmJldGF1c2QnLFxuICB9LFxuICB0aGV0YVVTRDoge1xuICAgIGFkZHJlc3M6ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMnLFxuICAgIG5hbWU6ICd0dGVtcG86dGhldGF1c2QnLFxuICB9LFxufTtcblxuLy8gVmFsaWQgY2hlY2tzdW1tZWQgdGVzdCByZWNpcGllbnQgYWRkcmVzc1xuZXhwb3J0IGNvbnN0IFRFU1RfUkVDSVBJRU5UX0FERFJFU1MgPSAnMHg3NDJkMzVDYzY2MzRDMDUzMjkyNWEzYjg0NEJjNDU0ZTQ0MzhmNDRlJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHJhbnNhY3Rpb24gUGFyYW1ldGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgVFhfUEFSQU1TID0ge1xuICBkZWZhdWx0R2FzOiBCaWdJbnQoJzEwMDAwMCcpLFxuICBkZWZhdWx0TWF4RmVlUGVyR2FzOiBCaWdJbnQoJzIwMDAwMDAwMDAnKSxcbiAgZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzOiBCaWdJbnQoJzEwMDAwMDAwMDAnKSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNpZ25hdHVyZSBUZXN0IERhdGFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IFNJR05BVFVSRV9URVNUX0RBVEEgPSB7XG4gIHZhbGlkU2lnbmF0dXJlOiB7XG4gICAgcjogJzB4MTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZicgYXMgYDB4JHtzdHJpbmd9YCxcbiAgICBzOiAnMHhmZWRjYmEwOTg3NjU0MzIxZmVkY2JhMDk4NzY1NDMyMWZlZGNiYTA5ODc2NTQzMjFmZWRjYmEwOTg3NjU0MzIxJyBhcyBgMHgke3N0cmluZ31gLFxuICAgIHlQYXJpdHk6IDAsXG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW1vIFRlc3QgQ2FzZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IE1FTU9fVEVTVF9DQVNFUyA9IHtcbiAgdmFsaWQ6IFtcbiAgICB7IGlucHV0OiAnMTIzNDUnLCBkZXNjcmlwdGlvbjogJ251bWVyaWMnIH0sXG4gICAgeyBpbnB1dDogJ0lOVi0wMDEnLCBkZXNjcmlwdGlvbjogJ2FscGhhbnVtZXJpYyB3aXRoIGRhc2gnIH0sXG4gICAgeyBpbnB1dDogJ2EnLnJlcGVhdCgzMiksIGRlc2NyaXB0aW9uOiAnbWF4IGxlbmd0aCAzMiBieXRlcycgfSxcbiAgICB7IGlucHV0OiAnJywgZGVzY3JpcHRpb246ICdlbXB0eSBzdHJpbmcnIH0sXG4gIF0sXG4gIGludmFsaWQ6IFt7IGlucHV0OiAnYScucmVwZWF0KDMzKSwgZGVzY3JpcHRpb246ICczMyBieXRlcyAtIGV4Y2VlZHMgbGltaXQnIH1dLFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgTWVzc2FnZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IEVSUk9SX01FU1NBR0VTID0ge1xuICBub09wZXJhdGlvbnM6IC9BdCBsZWFzdCBvbmUgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLyxcbiAgbWlzc2luZ05vbmNlOiAvTm9uY2UgaXMgcmVxdWlyZWQvLFxuICBtaXNzaW5nR2FzOiAvR2FzIGxpbWl0IGlzIHJlcXVpcmVkLyxcbiAgbWlzc2luZ01heEZlZVBlckdhczogL21heEZlZVBlckdhcyBpcyByZXF1aXJlZC8sXG4gIG1pc3NpbmdNYXhQcmlvcml0eUZlZVBlckdhczogL21heFByaW9yaXR5RmVlUGVyR2FzIGlzIHJlcXVpcmVkLyxcbiAgbWVtb1Rvb0xvbmc6IC9NZW1vIHRvbyBsb25nLyxcbn07XG4iXX0=