@bitgo-beta/sdk-coin-polyx 1.0.0-alpha.21 → 1.0.0-alpha.211

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.
Files changed (225) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +2 -1
  4. package/dist/src/lib/baseBuilder.d.ts +24 -0
  5. package/dist/src/lib/baseBuilder.d.ts.map +1 -0
  6. package/dist/src/lib/baseBuilder.js +31 -0
  7. package/dist/src/lib/batchStakingBuilder.d.ts +79 -0
  8. package/dist/src/lib/batchStakingBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/batchStakingBuilder.js +302 -0
  10. package/dist/src/lib/batchUnstakingBuilder.d.ts +39 -0
  11. package/dist/src/lib/batchUnstakingBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/batchUnstakingBuilder.js +129 -0
  13. package/dist/src/lib/bondExtraBuilder.d.ts +37 -0
  14. package/dist/src/lib/bondExtraBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/bondExtraBuilder.js +103 -0
  16. package/dist/src/lib/constants.d.ts +21 -0
  17. package/dist/src/lib/constants.d.ts.map +1 -0
  18. package/dist/src/lib/constants.js +24 -0
  19. package/dist/src/lib/hexTokenTransferBuilder.d.ts +24 -0
  20. package/dist/src/lib/hexTokenTransferBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/hexTokenTransferBuilder.js +46 -0
  22. package/dist/src/lib/hexTransferBuilder.d.ts +28 -0
  23. package/dist/src/lib/hexTransferBuilder.d.ts.map +1 -0
  24. package/dist/src/lib/hexTransferBuilder.js +51 -0
  25. package/dist/src/lib/iface.d.ts +249 -0
  26. package/dist/src/lib/iface.d.ts.map +1 -1
  27. package/dist/src/lib/iface.js +48 -1
  28. package/dist/src/lib/index.d.ts +36 -0
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +82 -5
  31. package/dist/src/lib/nominateBuilder.d.ts +18 -0
  32. package/dist/src/lib/nominateBuilder.d.ts.map +1 -0
  33. package/dist/src/lib/nominateBuilder.js +101 -0
  34. package/dist/src/lib/preApproveAssetBuilder.d.ts +33 -0
  35. package/dist/src/lib/preApproveAssetBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/preApproveAssetBuilder.js +77 -0
  37. package/dist/src/lib/registerDidWithCDDBuilder.d.ts +7 -2
  38. package/dist/src/lib/registerDidWithCDDBuilder.d.ts.map +1 -1
  39. package/dist/src/lib/registerDidWithCDDBuilder.js +22 -3
  40. package/dist/src/lib/rejectInstructionBuilder.d.ts +29 -0
  41. package/dist/src/lib/rejectInstructionBuilder.d.ts.map +1 -0
  42. package/dist/src/lib/rejectInstructionBuilder.js +89 -0
  43. package/dist/src/lib/tokenTransferBuilder.d.ts +64 -0
  44. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  45. package/dist/src/lib/tokenTransferBuilder.js +167 -0
  46. package/dist/src/lib/transaction.d.ts +30 -0
  47. package/dist/src/lib/transaction.d.ts.map +1 -0
  48. package/dist/src/lib/transaction.js +211 -0
  49. package/dist/src/lib/transactionBuilderFactory.d.ts +59 -1
  50. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  51. package/dist/src/lib/transactionBuilderFactory.js +288 -8
  52. package/dist/src/lib/transferBuilder.d.ts +4 -2
  53. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  54. package/dist/src/lib/transferBuilder.js +12 -5
  55. package/dist/src/lib/txnSchema.d.ts +67 -0
  56. package/dist/src/lib/txnSchema.d.ts.map +1 -1
  57. package/dist/src/lib/txnSchema.js +231 -2
  58. package/dist/src/lib/unbondBuilder.d.ts +37 -0
  59. package/dist/src/lib/unbondBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/unbondBuilder.js +100 -0
  61. package/dist/src/lib/utils.d.ts +40 -0
  62. package/dist/src/lib/utils.d.ts.map +1 -1
  63. package/dist/src/lib/utils.js +94 -1
  64. package/dist/src/lib/v8BatchStakingBuilder.d.ts +85 -0
  65. package/dist/src/lib/v8BatchStakingBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/v8BatchStakingBuilder.js +266 -0
  67. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts +11 -0
  68. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/v8BatchUnstakingBuilder.js +21 -0
  70. package/dist/src/lib/v8BondExtraBuilder.d.ts +11 -0
  71. package/dist/src/lib/v8BondExtraBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/v8BondExtraBuilder.js +21 -0
  73. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts +20 -0
  74. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/v8HexTokenTransferBuilder.js +42 -0
  76. package/dist/src/lib/v8HexTransferBuilder.d.ts +11 -0
  77. package/dist/src/lib/v8HexTransferBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/v8HexTransferBuilder.js +21 -0
  79. package/dist/src/lib/v8NominateBuilder.d.ts +11 -0
  80. package/dist/src/lib/v8NominateBuilder.d.ts.map +1 -0
  81. package/dist/src/lib/v8NominateBuilder.js +21 -0
  82. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts +11 -0
  83. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts.map +1 -0
  84. package/dist/src/lib/v8PreApproveAssetBuilder.js +21 -0
  85. package/dist/src/lib/v8RegisterDidBuilder.d.ts +47 -0
  86. package/dist/src/lib/v8RegisterDidBuilder.d.ts.map +1 -0
  87. package/dist/src/lib/v8RegisterDidBuilder.js +96 -0
  88. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts +11 -0
  89. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  90. package/dist/src/lib/v8RegisterDidWithCDDBuilder.js +21 -0
  91. package/dist/src/lib/v8TokenTransferBuilder.d.ts +24 -0
  92. package/dist/src/lib/v8TokenTransferBuilder.d.ts.map +1 -0
  93. package/dist/src/lib/v8TokenTransferBuilder.js +101 -0
  94. package/dist/src/lib/v8TransferBuilder.d.ts +11 -0
  95. package/dist/src/lib/v8TransferBuilder.d.ts.map +1 -0
  96. package/dist/src/lib/v8TransferBuilder.js +21 -0
  97. package/dist/src/lib/v8UnbondBuilder.d.ts +11 -0
  98. package/dist/src/lib/v8UnbondBuilder.d.ts.map +1 -0
  99. package/dist/src/lib/v8UnbondBuilder.js +21 -0
  100. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts +11 -0
  101. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts.map +1 -0
  102. package/dist/src/lib/v8WithdrawUnbondedBuilder.js +21 -0
  103. package/dist/src/lib/withdrawUnbondedBuilder.d.ts +35 -0
  104. package/dist/src/lib/withdrawUnbondedBuilder.d.ts.map +1 -0
  105. package/dist/src/lib/withdrawUnbondedBuilder.js +91 -0
  106. package/dist/src/polyx.d.ts +51 -9
  107. package/dist/src/polyx.d.ts.map +1 -1
  108. package/dist/src/polyx.js +272 -15
  109. package/dist/src/polyxToken.d.ts +20 -0
  110. package/dist/src/polyxToken.d.ts.map +1 -0
  111. package/dist/src/polyxToken.js +55 -0
  112. package/dist/src/register.d.ts.map +1 -1
  113. package/dist/src/register.js +5 -1
  114. package/dist/src/resources/index.d.ts +2 -0
  115. package/dist/src/resources/index.d.ts.map +1 -1
  116. package/dist/src/resources/index.js +3 -1
  117. package/dist/src/resources/mainnetV8.d.ts +13 -0
  118. package/dist/src/resources/mainnetV8.d.ts.map +1 -0
  119. package/dist/src/resources/mainnetV8.js +24 -0
  120. package/dist/src/resources/testnetV8.d.ts +13 -0
  121. package/dist/src/resources/testnetV8.d.ts.map +1 -0
  122. package/dist/src/resources/testnetV8.js +16 -0
  123. package/dist/src/tpolyx.d.ts +7 -0
  124. package/dist/src/tpolyx.d.ts.map +1 -1
  125. package/dist/src/tpolyx.js +11 -1
  126. package/dist/test/integration/index.d.ts +1 -0
  127. package/dist/test/integration/index.d.ts.map +1 -0
  128. package/dist/test/integration/index.js +1 -0
  129. package/dist/test/resources/index.d.ts +139 -0
  130. package/dist/test/resources/index.d.ts.map +1 -0
  131. package/dist/test/resources/index.js +150 -0
  132. package/dist/test/resources/mainnet.d.ts +2 -0
  133. package/dist/test/resources/mainnet.d.ts.map +1 -0
  134. package/dist/test/resources/mainnet.js +5 -0
  135. package/dist/test/resources/materialData.json +8 -0
  136. package/dist/test/resources/materialDataModified.json +8 -0
  137. package/dist/test/resources/testnet.d.ts +2 -0
  138. package/dist/test/resources/testnet.d.ts.map +1 -0
  139. package/dist/test/resources/testnet.js +5 -0
  140. package/dist/test/resources/wrwUsers.d.ts +19 -0
  141. package/dist/test/resources/wrwUsers.d.ts.map +1 -0
  142. package/dist/test/resources/wrwUsers.js +60 -0
  143. package/dist/test/unit/polyx.d.ts +2 -0
  144. package/dist/test/unit/polyx.d.ts.map +1 -0
  145. package/dist/test/unit/polyx.js +356 -0
  146. package/dist/test/unit/transactionBuilder/base.d.ts +4 -0
  147. package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
  148. package/dist/test/unit/transactionBuilder/base.js +245 -0
  149. package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts +2 -0
  150. package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts.map +1 -0
  151. package/dist/test/unit/transactionBuilder/batchStakingBuilder.js +309 -0
  152. package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts +2 -0
  153. package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts.map +1 -0
  154. package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.js +159 -0
  155. package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts +2 -0
  156. package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts.map +1 -0
  157. package/dist/test/unit/transactionBuilder/bondExtraBuilder.js +158 -0
  158. package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts +2 -0
  159. package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts.map +1 -0
  160. package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.js +261 -0
  161. package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts +2 -0
  162. package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts.map +1 -0
  163. package/dist/test/unit/transactionBuilder/hexTransferBuilder.js +389 -0
  164. package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts +2 -0
  165. package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts.map +1 -0
  166. package/dist/test/unit/transactionBuilder/nominateBuilder.js +226 -0
  167. package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts +2 -0
  168. package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts.map +1 -0
  169. package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.js +115 -0
  170. package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts +2 -0
  171. package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts.map +1 -0
  172. package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.js +302 -0
  173. package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts +2 -0
  174. package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts.map +1 -0
  175. package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.js +128 -0
  176. package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts +2 -0
  177. package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts.map +1 -0
  178. package/dist/test/unit/transactionBuilder/singletonRegistry.js +59 -0
  179. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  180. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  181. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +140 -0
  182. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  183. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  184. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +240 -0
  185. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  186. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  187. package/dist/test/unit/transactionBuilder/transferBuilder.js +326 -0
  188. package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts +2 -0
  189. package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts.map +1 -0
  190. package/dist/test/unit/transactionBuilder/unbondBuilder.js +144 -0
  191. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts +2 -0
  192. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts.map +1 -0
  193. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +252 -0
  194. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts +2 -0
  195. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts.map +1 -0
  196. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.js +90 -0
  197. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts +2 -0
  198. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts.map +1 -0
  199. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.js +62 -0
  200. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts +2 -0
  201. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts.map +1 -0
  202. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.js +45 -0
  203. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts +2 -0
  204. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts.map +1 -0
  205. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.js +87 -0
  206. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts +2 -0
  207. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  208. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.js +45 -0
  209. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts +2 -0
  210. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts.map +1 -0
  211. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.js +114 -0
  212. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts +2 -0
  213. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts.map +1 -0
  214. package/dist/test/unit/transactionBuilder/v8TransferBuilder.js +107 -0
  215. package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts +2 -0
  216. package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts.map +1 -0
  217. package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.js +138 -0
  218. package/dist/test/unit/utils.d.ts +2 -0
  219. package/dist/test/unit/utils.d.ts.map +1 -0
  220. package/dist/test/unit/utils.js +143 -0
  221. package/dist/tsconfig.tsbuildinfo +1 -0
  222. package/package.json +15 -9
  223. package/.eslintignore +0 -4
  224. package/.mocharc.yml +0 -8
  225. package/CHANGELOG.md +0 -22
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const statics_1 = require("@bitgo-beta/statics");
8
+ const lib_1 = require("../../../src/lib");
9
+ const src_1 = require("../../../src");
10
+ const resources_1 = require("../../resources");
11
+ const base_1 = require("./base");
12
+ // Expected NEW-encoding hex values from problem.md example table
13
+ const NEW_MEMO_HEX = {
14
+ 0: '0x3000000000000000000000000000000000000000000000000000000000000000',
15
+ 1: '0x3100000000000000000000000000000000000000000000000000000000000000',
16
+ 2: '0x3200000000000000000000000000000000000000000000000000000000000000',
17
+ 56594: '0x3536353934000000000000000000000000000000000000000000000000000000',
18
+ 102329716: '0x3130323332393731360000000000000000000000000000000000000000000000',
19
+ testmemo: '0x746573746d656d6f000000000000000000000000000000000000000000000000',
20
+ abc: '0x6162630000000000000000000000000000000000000000000000000000000000',
21
+ };
22
+ describe('HexTransferBuilder — memo encoding', () => {
23
+ let builder;
24
+ beforeEach(() => {
25
+ const config = (0, base_1.buildTestConfig)();
26
+ builder = new lib_1.HexTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
27
+ });
28
+ describe('memo() produces NEW encoding', () => {
29
+ it('encodes "0"', () => {
30
+ builder.memo('0');
31
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['0']);
32
+ });
33
+ it('encodes "1"', () => {
34
+ builder.memo('1');
35
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['1']);
36
+ });
37
+ it('encodes "2"', () => {
38
+ builder.memo('2');
39
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['2']);
40
+ });
41
+ it('encodes "56594"', () => {
42
+ builder.memo('56594');
43
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['56594']);
44
+ });
45
+ it('encodes "102329716"', () => {
46
+ builder.memo('102329716');
47
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['102329716']);
48
+ });
49
+ it('encodes "testmemo"', () => {
50
+ builder.memo('testmemo');
51
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['testmemo']);
52
+ });
53
+ it('encodes "abc"', () => {
54
+ builder.memo('abc');
55
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['abc']);
56
+ });
57
+ it('stores an already-encoded 0x hex memo as-is (round-trip)', () => {
58
+ const alreadyEncoded = NEW_MEMO_HEX['56594'];
59
+ builder.memo(alreadyEncoded);
60
+ should_1.default.equal(builder._memo, alreadyEncoded);
61
+ });
62
+ });
63
+ describe('NEW encoding differs from OLD encoding', () => {
64
+ it('produces different bytes than TransferBuilder for "56594"', () => {
65
+ const { TransferBuilder } = require('../../../src/lib');
66
+ const config = (0, base_1.buildTestConfig)();
67
+ const oldBuilder = new TransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
68
+ const newBuilder = new lib_1.HexTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
69
+ oldBuilder.memo('56594');
70
+ newBuilder.memo('56594');
71
+ const oldMemo = oldBuilder._memo;
72
+ const newMemo = newBuilder._memo;
73
+ should_1.default.notEqual(oldMemo, newMemo);
74
+ // OLD: left-pad with ASCII '0' chars
75
+ should_1.default.ok(oldMemo.startsWith('000000'), `OLD memo should start with ASCII '0' padding, got: ${oldMemo}`);
76
+ // NEW: 0x-prefixed hex
77
+ should_1.default.ok(newMemo.startsWith('0x'), `NEW memo should start with 0x, got: ${newMemo}`);
78
+ should_1.default.equal(newMemo, NEW_MEMO_HEX['56594']);
79
+ });
80
+ it('produces different bytes than TransferBuilder for "0"', () => {
81
+ const { TransferBuilder } = require('../../../src/lib');
82
+ const config = (0, base_1.buildTestConfig)();
83
+ const oldBuilder = new TransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
84
+ const newBuilder = new lib_1.HexTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
85
+ oldBuilder.memo('0');
86
+ newBuilder.memo('0');
87
+ should_1.default.notEqual(oldBuilder._memo, newBuilder._memo);
88
+ });
89
+ });
90
+ describe('build transaction with NEW memo encoding', () => {
91
+ const sender = resources_1.accounts.account1;
92
+ const receiver = resources_1.accounts.account2;
93
+ it('should build a transaction with NEW memo "56594"', async () => {
94
+ builder
95
+ .amount('1000000')
96
+ .to({ address: receiver.address })
97
+ .sender({ address: sender.address })
98
+ .memo('56594')
99
+ .validity({ firstValid: 3933, maxDuration: 64 })
100
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
101
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
102
+ .fee({ amount: 0, type: 'tip' });
103
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
104
+ const tx = await builder.build();
105
+ const txJson = tx.toJson();
106
+ should_1.default.deepEqual(txJson.amount, '1000000');
107
+ should_1.default.deepEqual(txJson.to, receiver.address);
108
+ should_1.default.deepEqual(txJson.sender, sender.address);
109
+ });
110
+ it('should build a transaction with NEW memo "testmemo"', async () => {
111
+ builder
112
+ .amount('1000000')
113
+ .to({ address: receiver.address })
114
+ .sender({ address: sender.address })
115
+ .memo('testmemo')
116
+ .validity({ firstValid: 3933, maxDuration: 64 })
117
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
118
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
119
+ .fee({ amount: 0, type: 'tip' });
120
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
121
+ const tx = await builder.build();
122
+ const txJson = tx.toJson();
123
+ should_1.default.deepEqual(txJson.amount, '1000000');
124
+ should_1.default.deepEqual(txJson.to, receiver.address);
125
+ should_1.default.deepEqual(builder._memo, NEW_MEMO_HEX['testmemo']);
126
+ });
127
+ it('should build a transaction with NEW memo "0" (default)', async () => {
128
+ builder
129
+ .amount('1000000')
130
+ .to({ address: receiver.address })
131
+ .sender({ address: sender.address })
132
+ .memo('0')
133
+ .validity({ firstValid: 3933, maxDuration: 64 })
134
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
135
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
136
+ .fee({ amount: 0, type: 'tip' });
137
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
138
+ const tx = await builder.build();
139
+ should_1.default.ok(tx);
140
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['0']);
141
+ });
142
+ it('should build a transaction with NEW memo "102329716"', async () => {
143
+ builder
144
+ .amount('1000000')
145
+ .to({ address: receiver.address })
146
+ .sender({ address: sender.address })
147
+ .memo('102329716')
148
+ .validity({ firstValid: 3933, maxDuration: 64 })
149
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
150
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
151
+ .fee({ amount: 0, type: 'tip' });
152
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
153
+ const tx = await builder.build();
154
+ should_1.default.ok(tx);
155
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['102329716']);
156
+ });
157
+ it('raw transaction bytes differ between OLD and NEW builder for same memo', async () => {
158
+ const { TransferBuilder } = require('../../../src/lib');
159
+ const config = (0, base_1.buildTestConfig)();
160
+ const material = src_1.utils.getMaterial(config.network.type);
161
+ const commonParams = {
162
+ address: receiver.address,
163
+ amount: '1000000',
164
+ sender: sender.address,
165
+ firstValid: 3933,
166
+ maxDuration: 64,
167
+ referenceBlock: '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d',
168
+ nonce: 1,
169
+ };
170
+ const oldBuilder = new TransferBuilder(config)
171
+ .material(material)
172
+ .amount(commonParams.amount)
173
+ .to({ address: commonParams.address })
174
+ .sender({ address: commonParams.sender })
175
+ .memo('56594')
176
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
177
+ .referenceBlock(commonParams.referenceBlock)
178
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: commonParams.nonce })
179
+ .fee({ amount: 0, type: 'tip' });
180
+ oldBuilder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
181
+ const oldTx = await oldBuilder.build();
182
+ const newBuilder = new lib_1.HexTransferBuilder(config)
183
+ .material(material)
184
+ .amount(commonParams.amount)
185
+ .to({ address: commonParams.address })
186
+ .sender({ address: commonParams.sender })
187
+ .memo('56594')
188
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
189
+ .referenceBlock(commonParams.referenceBlock)
190
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: commonParams.nonce })
191
+ .fee({ amount: 0, type: 'tip' });
192
+ newBuilder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
193
+ const newTx = await newBuilder.build();
194
+ should_1.default.notEqual(oldTx.toBroadcastFormat(), newTx.toBroadcastFormat());
195
+ });
196
+ });
197
+ });
198
+ describe('HexTransferBuilder — Mainnet', () => {
199
+ let builder;
200
+ const sender = resources_1.accounts.account5Mainnet;
201
+ const receiver = resources_1.accounts.account6Mainnet;
202
+ beforeEach(() => {
203
+ const config = (0, base_1.buildMainnetConfig)();
204
+ builder = new lib_1.HexTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
205
+ });
206
+ it('should encode memo "56594" correctly on mainnet', () => {
207
+ builder.memo('56594');
208
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['56594']);
209
+ });
210
+ it('should build a mainnet transaction with NEW memo', async () => {
211
+ builder
212
+ .amount('1000000')
213
+ .to({ address: receiver.address })
214
+ .sender({ address: sender.address })
215
+ .memo('56594')
216
+ .validity({ firstValid: 3933, maxDuration: 64 })
217
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
218
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
219
+ .fee({ amount: 0, type: 'tip' });
220
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
221
+ const tx = await builder.build();
222
+ const txJson = tx.toJson();
223
+ should_1.default.deepEqual(txJson.amount, '1000000');
224
+ should_1.default.deepEqual(txJson.to, receiver.address);
225
+ should_1.default.deepEqual(txJson.sender, sender.address);
226
+ });
227
+ });
228
+ describe('HexTransferBuilder — factory.from() rebuild round-trip', () => {
229
+ const sender = resources_1.accounts.account1;
230
+ const receiver = resources_1.accounts.account2;
231
+ const commonParams = {
232
+ amount: '1000000',
233
+ firstValid: 3933,
234
+ maxDuration: 64,
235
+ referenceBlock: '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d',
236
+ nonce: 1,
237
+ };
238
+ let factory;
239
+ beforeEach(() => {
240
+ factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx'));
241
+ });
242
+ it('factory.from() returns HexTransferBuilder for a NEW-encoded signed transaction', async () => {
243
+ const builder = new lib_1.HexTransferBuilder((0, base_1.buildTestConfig)())
244
+ .material(src_1.utils.getMaterial((0, base_1.buildTestConfig)().network.type))
245
+ .amount(commonParams.amount)
246
+ .to({ address: receiver.address })
247
+ .sender({ address: sender.address })
248
+ .memo('56594')
249
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
250
+ .referenceBlock(commonParams.referenceBlock)
251
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: commonParams.nonce })
252
+ .fee({ amount: 0, type: 'tip' });
253
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
254
+ const tx = await builder.build();
255
+ const serialized = tx.toBroadcastFormat();
256
+ const rebuilt = factory.from(serialized);
257
+ rebuilt.should.be.instanceOf(lib_1.HexTransferBuilder);
258
+ });
259
+ it('factory.from() returns TransferBuilder (not HexTransferBuilder) for an OLD-encoded signed transaction', async () => {
260
+ const builder = new lib_1.TransferBuilder((0, base_1.buildTestConfig)())
261
+ .material(src_1.utils.getMaterial((0, base_1.buildTestConfig)().network.type))
262
+ .amount(commonParams.amount)
263
+ .to({ address: receiver.address })
264
+ .sender({ address: sender.address })
265
+ .memo('56594')
266
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
267
+ .referenceBlock(commonParams.referenceBlock)
268
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: commonParams.nonce })
269
+ .fee({ amount: 0, type: 'tip' });
270
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
271
+ const tx = await builder.build();
272
+ const serialized = tx.toBroadcastFormat();
273
+ const rebuilt = factory.from(serialized);
274
+ rebuilt.should.be.instanceOf(lib_1.TransferBuilder);
275
+ rebuilt.should.not.be.instanceOf(lib_1.HexTransferBuilder);
276
+ });
277
+ it('rebuild from NEW-encoded tx preserves memo bytes (serialized hex is identical)', async () => {
278
+ const build = async (memo) => {
279
+ const b = new lib_1.HexTransferBuilder((0, base_1.buildTestConfig)())
280
+ .material(src_1.utils.getMaterial((0, base_1.buildTestConfig)().network.type))
281
+ .amount(commonParams.amount)
282
+ .to({ address: receiver.address })
283
+ .sender({ address: sender.address })
284
+ .memo(memo)
285
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
286
+ .referenceBlock(commonParams.referenceBlock)
287
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: commonParams.nonce })
288
+ .fee({ amount: 0, type: 'tip' });
289
+ b.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
290
+ return (await b.build()).toBroadcastFormat();
291
+ };
292
+ for (const memo of ['56594', 'testmemo', '0', '102329716']) {
293
+ const original = await build(memo);
294
+ // fromImplementation for signed txs doesn't restore blockNumber — must re-supply validity + referenceBlock
295
+ const rebuilt = factory
296
+ .from(original)
297
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
298
+ .referenceBlock(commonParams.referenceBlock);
299
+ const roundTripped = (await rebuilt.build()).toBroadcastFormat();
300
+ should_1.default.equal(roundTripped, original, `round-trip failed for memo "${memo}"`);
301
+ }
302
+ });
303
+ it('rebuild from NEW-encoded tx has correct _memo value', async () => {
304
+ const hexBuilder = new lib_1.HexTransferBuilder((0, base_1.buildTestConfig)())
305
+ .material(src_1.utils.getMaterial((0, base_1.buildTestConfig)().network.type))
306
+ .amount(commonParams.amount)
307
+ .to({ address: receiver.address })
308
+ .sender({ address: sender.address })
309
+ .memo('56594')
310
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
311
+ .referenceBlock(commonParams.referenceBlock)
312
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: commonParams.nonce })
313
+ .fee({ amount: 0, type: 'tip' });
314
+ hexBuilder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
315
+ const serialized = (await hexBuilder.build()).toBroadcastFormat();
316
+ const rebuilt = factory.from(serialized);
317
+ should_1.default.equal(rebuilt._memo, NEW_MEMO_HEX['56594']);
318
+ });
319
+ });
320
+ describe('utils.isNewMemoEncoding', () => {
321
+ it('detects NEW encoding (has 0x00 bytes)', () => {
322
+ should_1.default.ok(src_1.utils.isNewMemoEncoding(NEW_MEMO_HEX['56594']));
323
+ should_1.default.ok(src_1.utils.isNewMemoEncoding(NEW_MEMO_HEX['testmemo']));
324
+ should_1.default.ok(src_1.utils.isNewMemoEncoding(NEW_MEMO_HEX['abc']));
325
+ should_1.default.ok(src_1.utils.isNewMemoEncoding(NEW_MEMO_HEX['0']));
326
+ });
327
+ it('does not detect OLD encoding as NEW (no 0x00 bytes)', () => {
328
+ // OLD encoding of "0": all 0x30 bytes, no nulls
329
+ const oldMemoZero = '0x3030303030303030303030303030303030303030303030303030303030303030';
330
+ // OLD encoding of "56594": 27 × 0x30 + ASCII "56594"
331
+ const oldMemoRef = '0x3030303030303030303030303030303030303030303030303030303536353934';
332
+ should_1.default.ok(!src_1.utils.isNewMemoEncoding(oldMemoZero));
333
+ should_1.default.ok(!src_1.utils.isNewMemoEncoding(oldMemoRef));
334
+ });
335
+ it('returns false for non-0x strings', () => {
336
+ should_1.default.ok(!src_1.utils.isNewMemoEncoding('00000000000000000000000000056594'));
337
+ should_1.default.ok(!src_1.utils.isNewMemoEncoding(''));
338
+ });
339
+ it('returns false for wrong-length 0x strings', () => {
340
+ should_1.default.ok(!src_1.utils.isNewMemoEncoding('0x1234'));
341
+ });
342
+ it('detects full 32-byte NEW memo with no null padding as NEW', () => {
343
+ const fullMemo = '0x' + '61'.repeat(32);
344
+ should_1.default.ok(src_1.utils.isNewMemoEncoding(fullMemo));
345
+ });
346
+ });
347
+ describe('utils.encodeMemoNew', () => {
348
+ it('encodes "56594" correctly', () => {
349
+ should_1.default.equal(src_1.utils.encodeMemoNew('56594'), NEW_MEMO_HEX['56594']);
350
+ });
351
+ it('encodes "testmemo" correctly', () => {
352
+ should_1.default.equal(src_1.utils.encodeMemoNew('testmemo'), NEW_MEMO_HEX['testmemo']);
353
+ });
354
+ it('encodes "0" correctly', () => {
355
+ should_1.default.equal(src_1.utils.encodeMemoNew('0'), NEW_MEMO_HEX['0']);
356
+ });
357
+ it('encodes "102329716" correctly', () => {
358
+ should_1.default.equal(src_1.utils.encodeMemoNew('102329716'), NEW_MEMO_HEX['102329716']);
359
+ });
360
+ it('encodes "abc" correctly', () => {
361
+ should_1.default.equal(src_1.utils.encodeMemoNew('abc'), NEW_MEMO_HEX['abc']);
362
+ });
363
+ it('always returns a 0x-prefixed 66-character string', () => {
364
+ ['0', '1', '56594', 'testmemo', 'abc', '102329716'].forEach((memo) => {
365
+ const encoded = src_1.utils.encodeMemoNew(memo);
366
+ should_1.default.ok(encoded.startsWith('0x'), `should start with 0x: ${encoded}`);
367
+ should_1.default.equal(encoded.length, 66, `should be 66 chars (0x + 64 hex): ${encoded}`);
368
+ });
369
+ });
370
+ it('throws when memo exceeds 32 UTF-8 bytes', () => {
371
+ const tooLong = 'a'.repeat(33);
372
+ should_1.default.throws(() => src_1.utils.encodeMemoNew(tooLong), /exceeds maximum length of 32 bytes/);
373
+ });
374
+ });
375
+ describe('HexTransferBuilder — memo validation', () => {
376
+ let builder;
377
+ beforeEach(() => {
378
+ const config = (0, base_1.buildTestConfig)();
379
+ builder = new lib_1.HexTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
380
+ });
381
+ it('throws when memo exceeds 32 UTF-8 bytes', () => {
382
+ const tooLong = 'a'.repeat(33);
383
+ should_1.default.throws(() => builder.memo(tooLong), /exceeds maximum length of 32 bytes/);
384
+ });
385
+ it('throws for invalid hex memo', () => {
386
+ should_1.default.throws(() => builder.memo('0x' + 'zz'.repeat(32)), /Invalid memo hex encoding/);
387
+ });
388
+ });
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGV4VHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9oZXhUcmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLDBDQUFrRztBQUNsRyxzQ0FBcUM7QUFDckMsK0NBQTZEO0FBQzdELGlDQUE2RDtBQUU3RCxpRUFBaUU7QUFDakUsTUFBTSxZQUFZLEdBQTJCO0lBQzNDLENBQUMsRUFBRSxvRUFBb0U7SUFDdkUsQ0FBQyxFQUFFLG9FQUFvRTtJQUN2RSxDQUFDLEVBQUUsb0VBQW9FO0lBQ3ZFLEtBQUssRUFBRSxvRUFBb0U7SUFDM0UsU0FBUyxFQUFFLG9FQUFvRTtJQUMvRSxRQUFRLEVBQUUsb0VBQW9FO0lBQzlFLEdBQUcsRUFBRSxvRUFBb0U7Q0FDMUUsQ0FBQztBQUVGLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7SUFDbEQsSUFBSSxPQUEyQixDQUFDO0lBRWhDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztRQUNqQyxPQUFPLEdBQUcsSUFBSSx3QkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1FBQzVDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7WUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixnQkFBTSxDQUFDLEtBQUssQ0FBRSxPQUFlLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtZQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFCLGdCQUFNLENBQUMsS0FBSyxDQUFFLE9BQWUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekIsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRSxHQUFHLEVBQUU7WUFDbEUsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUN0RCxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztZQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEcsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFbkcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXpCLE1BQU0sT0FBTyxHQUFJLFVBQWtCLENBQUMsS0FBSyxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFJLFVBQWtCLENBQUMsS0FBSyxDQUFDO1lBRTFDLGdCQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsQyxxQ0FBcUM7WUFDckMsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxzREFBc0QsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN6Ryx1QkFBdUI7WUFDdkIsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSx1Q0FBdUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN0RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQy9ELE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztZQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEcsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFbkcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXJCLGdCQUFNLENBQUMsUUFBUSxDQUFFLFVBQWtCLENBQUMsS0FBSyxFQUFHLFVBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7UUFDeEQsTUFBTSxNQUFNLEdBQUcsb0JBQVEsQ0FBQyxRQUFRLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsb0JBQVEsQ0FBQyxRQUFRLENBQUM7UUFFbkMsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE9BQU87aUJBQ0osTUFBTSxDQUFDLFNBQVMsQ0FBQztpQkFDakIsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDakMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDYixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztpQkFDL0MsY0FBYyxDQUFDLG9FQUFvRSxDQUFDO2lCQUNwRixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN6RCxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUV0RixNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFM0IsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMzQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNuRSxPQUFPO2lCQUNKLE1BQU0sQ0FBQyxTQUFTLENBQUM7aUJBQ2pCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2pDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ25DLElBQUksQ0FBQyxVQUFVLENBQUM7aUJBQ2hCLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUMvQyxjQUFjLENBQUMsb0VBQW9FLENBQUM7aUJBQ3BGLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ3pELEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRXRGLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUUzQixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLGdCQUFNLENBQUMsU0FBUyxDQUFFLE9BQWUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEUsT0FBTztpQkFDSixNQUFNLENBQUMsU0FBUyxDQUFDO2lCQUNqQixFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNqQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNULFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUMvQyxjQUFjLENBQUMsb0VBQW9FLENBQUM7aUJBQ3BGLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ3pELEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRXRGLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLGdCQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2QsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNwRSxPQUFPO2lCQUNKLE1BQU0sQ0FBQyxTQUFTLENBQUM7aUJBQ2pCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2pDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ25DLElBQUksQ0FBQyxXQUFXLENBQUM7aUJBQ2pCLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUMvQyxjQUFjLENBQUMsb0VBQW9FLENBQUM7aUJBQ3BGLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ3pELEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRXRGLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLGdCQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2QsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN0RixNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7WUFDakMsTUFBTSxRQUFRLEdBQUcsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXhELE1BQU0sWUFBWSxHQUFHO2dCQUNuQixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3pCLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3RCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsRUFBRTtnQkFDZixjQUFjLEVBQUUsb0VBQW9FO2dCQUNwRixLQUFLLEVBQUUsQ0FBQzthQUNULENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUM7aUJBQzNDLFFBQVEsQ0FBQyxRQUFRLENBQUM7aUJBQ2xCLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2lCQUMzQixFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNyQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUNiLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3hGLGNBQWMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO2lCQUMzQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDMUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNuQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDekYsTUFBTSxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBa0IsQ0FBQyxNQUFNLENBQUM7aUJBQzlDLFFBQVEsQ0FBQyxRQUFRLENBQUM7aUJBQ2xCLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2lCQUMzQixFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNyQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUNiLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3hGLGNBQWMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO2lCQUMzQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDMUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNuQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDekYsTUFBTSxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFdkMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO0lBQzVDLElBQUksT0FBMkIsQ0FBQztJQUVoQyxNQUFNLE1BQU0sR0FBRyxvQkFBUSxDQUFDLGVBQWUsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxvQkFBUSxDQUFDLGVBQWUsQ0FBQztJQUUxQyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBQSx5QkFBa0IsR0FBRSxDQUFDO1FBQ3BDLE9BQU8sR0FBRyxJQUFJLHdCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7UUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QixnQkFBTSxDQUFDLEtBQUssQ0FBRSxPQUFlLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hFLE9BQU87YUFDSixNQUFNLENBQUMsU0FBUyxDQUFDO2FBQ2pCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDakMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ2IsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDL0MsY0FBYyxDQUFDLG9FQUFvRSxDQUFDO2FBQ3BGLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDekQsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFdEYsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRTNCLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0MsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7SUFDdEUsTUFBTSxNQUFNLEdBQUcsb0JBQVEsQ0FBQyxRQUFRLENBQUM7SUFDakMsTUFBTSxRQUFRLEdBQUcsb0JBQVEsQ0FBQyxRQUFRLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUc7UUFDbkIsTUFBTSxFQUFFLFNBQVM7UUFDakIsVUFBVSxFQUFFLElBQUk7UUFDaEIsV0FBVyxFQUFFLEVBQUU7UUFDZixjQUFjLEVBQUUsb0VBQW9FO1FBQ3BGLEtBQUssRUFBRSxDQUFDO0tBQ1QsQ0FBQztJQUNGLElBQUksT0FBa0MsQ0FBQztJQUV2QyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdGQUFnRixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlGLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQWtCLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUM7YUFDdEQsUUFBUSxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNELE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2FBQzNCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDakMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ2IsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN4RixjQUFjLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQzthQUMzQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUMxRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RixNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUUxQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyx3QkFBa0IsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVHQUF1RyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JILE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQWUsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQzthQUNuRCxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7YUFDM0IsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNqQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDYixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3hGLGNBQWMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO2FBQzNDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRTFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFlLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLHdCQUFrQixDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsZ0ZBQWdGLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDOUYsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBRSxFQUFFO1lBQ25DLE1BQU0sQ0FBQyxHQUFHLElBQUksd0JBQWtCLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUM7aUJBQ2hELFFBQVEsQ0FBQyxXQUFLLENBQUMsV0FBVyxDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDM0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7aUJBQzNCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2pDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ25DLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ1YsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDeEYsY0FBYyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7aUJBQzNDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUMxRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9DLENBQUMsQ0FBQztRQUVGLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzNELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLDJHQUEyRztZQUMzRyxNQUFNLE9BQU8sR0FBRyxPQUFPO2lCQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDO2lCQUNkLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3hGLGNBQWMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0MsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDakUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSwrQkFBK0IsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBa0IsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQzthQUN6RCxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7YUFDM0IsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNqQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDYixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3hGLGNBQWMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO2FBQzNDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRWxFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxFQUFFLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1FBQy9DLGdCQUFNLENBQUMsRUFBRSxDQUFDLFdBQUssQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELGdCQUFNLENBQUMsRUFBRSxDQUFDLFdBQUssQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELGdCQUFNLENBQUMsRUFBRSxDQUFDLFdBQUssQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELGdCQUFNLENBQUMsRUFBRSxDQUFDLFdBQUssQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEdBQUcsRUFBRTtRQUM3RCxnREFBZ0Q7UUFDaEQsTUFBTSxXQUFXLEdBQUcsb0VBQW9FLENBQUM7UUFDekYscURBQXFEO1FBQ3JELE1BQU0sVUFBVSxHQUFHLG9FQUFvRSxDQUFDO1FBQ3hGLGdCQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDakQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7UUFDMUMsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFLLENBQUMsaUJBQWlCLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLGdCQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1FBQ25ELGdCQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1FBQ25FLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLGdCQUFNLENBQUMsRUFBRSxDQUFDLFdBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQ25DLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7UUFDbkMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7UUFDdEMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7UUFDL0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDdkMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDMUQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25FLE1BQU0sT0FBTyxHQUFHLFdBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSx5QkFBeUIsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN4RSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxxQ0FBcUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztJQUMxRixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtJQUNwRCxJQUFJLE9BQTJCLENBQUM7SUFFaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsR0FBRSxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxJQUFJLHdCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7UUFDakQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLG9DQUFvQyxDQUFDLENBQUM7SUFDbkYsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0lBQ3pGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgSGV4VHJhbnNmZXJCdWlsZGVyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGFjY291bnRzLCBtb2NrVHNzU2lnbmF0dXJlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IGJ1aWxkVGVzdENvbmZpZywgYnVpbGRNYWlubmV0Q29uZmlnIH0gZnJvbSAnLi9iYXNlJztcblxuLy8gRXhwZWN0ZWQgTkVXLWVuY29kaW5nIGhleCB2YWx1ZXMgZnJvbSBwcm9ibGVtLm1kIGV4YW1wbGUgdGFibGVcbmNvbnN0IE5FV19NRU1PX0hFWDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgMDogJzB4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gIDE6ICcweDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAyOiAnMHgzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgNTY1OTQ6ICcweDM1MzYzNTM5MzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAxMDIzMjk3MTY6ICcweDMxMzAzMjMzMzIzOTM3MzEzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICB0ZXN0bWVtbzogJzB4NzQ2NTczNzQ2ZDY1NmQ2ZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gIGFiYzogJzB4NjE2MjYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG59O1xuXG5kZXNjcmliZSgnSGV4VHJhbnNmZXJCdWlsZGVyIOKAlCBtZW1vIGVuY29kaW5nJywgKCkgPT4ge1xuICBsZXQgYnVpbGRlcjogSGV4VHJhbnNmZXJCdWlsZGVyO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgIGJ1aWxkZXIgPSBuZXcgSGV4VHJhbnNmZXJCdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWVtbygpIHByb2R1Y2VzIE5FVyBlbmNvZGluZycsICgpID0+IHtcbiAgICBpdCgnZW5jb2RlcyBcIjBcIicsICgpID0+IHtcbiAgICAgIGJ1aWxkZXIubWVtbygnMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKChidWlsZGVyIGFzIGFueSkuX21lbW8sIE5FV19NRU1PX0hFWFsnMCddKTtcbiAgICB9KTtcblxuICAgIGl0KCdlbmNvZGVzIFwiMVwiJywgKCkgPT4ge1xuICAgICAgYnVpbGRlci5tZW1vKCcxJyk7XG4gICAgICBzaG91bGQuZXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fbWVtbywgTkVXX01FTU9fSEVYWycxJ10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2VuY29kZXMgXCIyXCInLCAoKSA9PiB7XG4gICAgICBidWlsZGVyLm1lbW8oJzInKTtcbiAgICAgIHNob3VsZC5lcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tZW1vLCBORVdfTUVNT19IRVhbJzInXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZW5jb2RlcyBcIjU2NTk0XCInLCAoKSA9PiB7XG4gICAgICBidWlsZGVyLm1lbW8oJzU2NTk0Jyk7XG4gICAgICBzaG91bGQuZXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fbWVtbywgTkVXX01FTU9fSEVYWyc1NjU5NCddKTtcbiAgICB9KTtcblxuICAgIGl0KCdlbmNvZGVzIFwiMTAyMzI5NzE2XCInLCAoKSA9PiB7XG4gICAgICBidWlsZGVyLm1lbW8oJzEwMjMyOTcxNicpO1xuICAgICAgc2hvdWxkLmVxdWFsKChidWlsZGVyIGFzIGFueSkuX21lbW8sIE5FV19NRU1PX0hFWFsnMTAyMzI5NzE2J10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2VuY29kZXMgXCJ0ZXN0bWVtb1wiJywgKCkgPT4ge1xuICAgICAgYnVpbGRlci5tZW1vKCd0ZXN0bWVtbycpO1xuICAgICAgc2hvdWxkLmVxdWFsKChidWlsZGVyIGFzIGFueSkuX21lbW8sIE5FV19NRU1PX0hFWFsndGVzdG1lbW8nXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZW5jb2RlcyBcImFiY1wiJywgKCkgPT4ge1xuICAgICAgYnVpbGRlci5tZW1vKCdhYmMnKTtcbiAgICAgIHNob3VsZC5lcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tZW1vLCBORVdfTUVNT19IRVhbJ2FiYyddKTtcbiAgICB9KTtcblxuICAgIGl0KCdzdG9yZXMgYW4gYWxyZWFkeS1lbmNvZGVkIDB4IGhleCBtZW1vIGFzLWlzIChyb3VuZC10cmlwKScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFscmVhZHlFbmNvZGVkID0gTkVXX01FTU9fSEVYWyc1NjU5NCddO1xuICAgICAgYnVpbGRlci5tZW1vKGFscmVhZHlFbmNvZGVkKTtcbiAgICAgIHNob3VsZC5lcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tZW1vLCBhbHJlYWR5RW5jb2RlZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdORVcgZW5jb2RpbmcgZGlmZmVycyBmcm9tIE9MRCBlbmNvZGluZycsICgpID0+IHtcbiAgICBpdCgncHJvZHVjZXMgZGlmZmVyZW50IGJ5dGVzIHRoYW4gVHJhbnNmZXJCdWlsZGVyIGZvciBcIjU2NTk0XCInLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IFRyYW5zZmVyQnVpbGRlciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL2xpYicpO1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRUZXN0Q29uZmlnKCk7XG4gICAgICBjb25zdCBvbGRCdWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKHV0aWxzLmdldE1hdGVyaWFsKGNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgICAgIGNvbnN0IG5ld0J1aWxkZXIgPSBuZXcgSGV4VHJhbnNmZXJCdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSkpO1xuXG4gICAgICBvbGRCdWlsZGVyLm1lbW8oJzU2NTk0Jyk7XG4gICAgICBuZXdCdWlsZGVyLm1lbW8oJzU2NTk0Jyk7XG5cbiAgICAgIGNvbnN0IG9sZE1lbW8gPSAob2xkQnVpbGRlciBhcyBhbnkpLl9tZW1vO1xuICAgICAgY29uc3QgbmV3TWVtbyA9IChuZXdCdWlsZGVyIGFzIGFueSkuX21lbW87XG5cbiAgICAgIHNob3VsZC5ub3RFcXVhbChvbGRNZW1vLCBuZXdNZW1vKTtcbiAgICAgIC8vIE9MRDogbGVmdC1wYWQgd2l0aCBBU0NJSSAnMCcgY2hhcnNcbiAgICAgIHNob3VsZC5vayhvbGRNZW1vLnN0YXJ0c1dpdGgoJzAwMDAwMCcpLCBgT0xEIG1lbW8gc2hvdWxkIHN0YXJ0IHdpdGggQVNDSUkgJzAnIHBhZGRpbmcsIGdvdDogJHtvbGRNZW1vfWApO1xuICAgICAgLy8gTkVXOiAweC1wcmVmaXhlZCBoZXhcbiAgICAgIHNob3VsZC5vayhuZXdNZW1vLnN0YXJ0c1dpdGgoJzB4JyksIGBORVcgbWVtbyBzaG91bGQgc3RhcnQgd2l0aCAweCwgZ290OiAke25ld01lbW99YCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3TWVtbywgTkVXX01FTU9fSEVYWyc1NjU5NCddKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9kdWNlcyBkaWZmZXJlbnQgYnl0ZXMgdGhhbiBUcmFuc2ZlckJ1aWxkZXIgZm9yIFwiMFwiJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBUcmFuc2ZlckJ1aWxkZXIgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9saWInKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgICAgY29uc3Qgb2xkQnVpbGRlciA9IG5ldyBUcmFuc2ZlckJ1aWxkZXIoY29uZmlnKS5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChjb25maWcubmV0d29yay50eXBlKSk7XG4gICAgICBjb25zdCBuZXdCdWlsZGVyID0gbmV3IEhleFRyYW5zZmVyQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKHV0aWxzLmdldE1hdGVyaWFsKGNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcblxuICAgICAgb2xkQnVpbGRlci5tZW1vKCcwJyk7XG4gICAgICBuZXdCdWlsZGVyLm1lbW8oJzAnKTtcblxuICAgICAgc2hvdWxkLm5vdEVxdWFsKChvbGRCdWlsZGVyIGFzIGFueSkuX21lbW8sIChuZXdCdWlsZGVyIGFzIGFueSkuX21lbW8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQgdHJhbnNhY3Rpb24gd2l0aCBORVcgbWVtbyBlbmNvZGluZycsICgpID0+IHtcbiAgICBjb25zdCBzZW5kZXIgPSBhY2NvdW50cy5hY2NvdW50MTtcbiAgICBjb25zdCByZWNlaXZlciA9IGFjY291bnRzLmFjY291bnQyO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggTkVXIG1lbW8gXCI1NjU5NFwiJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLm1lbW8oJzU2NTk0JylcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgJzEwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHRyYW5zYWN0aW9uIHdpdGggTkVXIG1lbW8gXCJ0ZXN0bWVtb1wiJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLm1lbW8oJ3Rlc3RtZW1vJylcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgJzEwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fbWVtbywgTkVXX01FTU9fSEVYWyd0ZXN0bWVtbyddKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB0cmFuc2FjdGlvbiB3aXRoIE5FVyBtZW1vIFwiMFwiIChkZWZhdWx0KScsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCgnMTAwMDAwMCcpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC5tZW1vKCcwJylcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLm9rKHR4KTtcbiAgICAgIHNob3VsZC5lcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tZW1vLCBORVdfTUVNT19IRVhbJzAnXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCBORVcgbWVtbyBcIjEwMjMyOTcxNlwiJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLm1lbW8oJzEwMjMyOTcxNicpXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDEgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5vayh0eCk7XG4gICAgICBzaG91bGQuZXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fbWVtbywgTkVXX01FTU9fSEVYWycxMDIzMjk3MTYnXSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmF3IHRyYW5zYWN0aW9uIGJ5dGVzIGRpZmZlciBiZXR3ZWVuIE9MRCBhbmQgTkVXIGJ1aWxkZXIgZm9yIHNhbWUgbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgVHJhbnNmZXJCdWlsZGVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9zcmMvbGliJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gdXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSk7XG5cbiAgICAgIGNvbnN0IGNvbW1vblBhcmFtcyA9IHtcbiAgICAgICAgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwMCcsXG4gICAgICAgIHNlbmRlcjogc2VuZGVyLmFkZHJlc3MsXG4gICAgICAgIGZpcnN0VmFsaWQ6IDM5MzMsXG4gICAgICAgIG1heER1cmF0aW9uOiA2NCxcbiAgICAgICAgcmVmZXJlbmNlQmxvY2s6ICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnLFxuICAgICAgICBub25jZTogMSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9sZEJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgICAgLm1hdGVyaWFsKG1hdGVyaWFsKVxuICAgICAgICAuYW1vdW50KGNvbW1vblBhcmFtcy5hbW91bnQpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IGNvbW1vblBhcmFtcy5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBjb21tb25QYXJhbXMuc2VuZGVyIH0pXG4gICAgICAgIC5tZW1vKCc1NjU5NCcpXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IGNvbW1vblBhcmFtcy5maXJzdFZhbGlkLCBtYXhEdXJhdGlvbjogY29tbW9uUGFyYW1zLm1heER1cmF0aW9uIH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jayhjb21tb25QYXJhbXMucmVmZXJlbmNlQmxvY2spXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IGNvbW1vblBhcmFtcy5ub25jZSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIG9sZEJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCBvbGRUeCA9IGF3YWl0IG9sZEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3QgbmV3QnVpbGRlciA9IG5ldyBIZXhUcmFuc2ZlckJ1aWxkZXIoY29uZmlnKVxuICAgICAgICAubWF0ZXJpYWwobWF0ZXJpYWwpXG4gICAgICAgIC5hbW91bnQoY29tbW9uUGFyYW1zLmFtb3VudClcbiAgICAgICAgLnRvKHsgYWRkcmVzczogY29tbW9uUGFyYW1zLmFkZHJlc3MgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IGNvbW1vblBhcmFtcy5zZW5kZXIgfSlcbiAgICAgICAgLm1lbW8oJzU2NTk0JylcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogY29tbW9uUGFyYW1zLmZpcnN0VmFsaWQsIG1heER1cmF0aW9uOiBjb21tb25QYXJhbXMubWF4RHVyYXRpb24gfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKGNvbW1vblBhcmFtcy5yZWZlcmVuY2VCbG9jaylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogY29tbW9uUGFyYW1zLm5vbmNlIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgbmV3QnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBzaG91bGQubm90RXF1YWwob2xkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgbmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdIZXhUcmFuc2ZlckJ1aWxkZXIg4oCUIE1haW5uZXQnLCAoKSA9PiB7XG4gIGxldCBidWlsZGVyOiBIZXhUcmFuc2ZlckJ1aWxkZXI7XG5cbiAgY29uc3Qgc2VuZGVyID0gYWNjb3VudHMuYWNjb3VudDVNYWlubmV0O1xuICBjb25zdCByZWNlaXZlciA9IGFjY291bnRzLmFjY291bnQ2TWFpbm5ldDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBidWlsZE1haW5uZXRDb25maWcoKTtcbiAgICBidWlsZGVyID0gbmV3IEhleFRyYW5zZmVyQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKHV0aWxzLmdldE1hdGVyaWFsKGNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBlbmNvZGUgbWVtbyBcIjU2NTk0XCIgY29ycmVjdGx5IG9uIG1haW5uZXQnLCAoKSA9PiB7XG4gICAgYnVpbGRlci5tZW1vKCc1NjU5NCcpO1xuICAgIHNob3VsZC5lcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tZW1vLCBORVdfTUVNT19IRVhbJzU2NTk0J10pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgbWFpbm5ldCB0cmFuc2FjdGlvbiB3aXRoIE5FVyBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgIGJ1aWxkZXJcbiAgICAgIC5hbW91bnQoJzEwMDAwMDAnKVxuICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAubWVtbygnNTY1OTQnKVxuICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICcxMDAwMDAwJyk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG8sIHJlY2VpdmVyLmFkZHJlc3MpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnSGV4VHJhbnNmZXJCdWlsZGVyIOKAlCBmYWN0b3J5LmZyb20oKSByZWJ1aWxkIHJvdW5kLXRyaXAnLCAoKSA9PiB7XG4gIGNvbnN0IHNlbmRlciA9IGFjY291bnRzLmFjY291bnQxO1xuICBjb25zdCByZWNlaXZlciA9IGFjY291bnRzLmFjY291bnQyO1xuICBjb25zdCBjb21tb25QYXJhbXMgPSB7XG4gICAgYW1vdW50OiAnMTAwMDAwMCcsXG4gICAgZmlyc3RWYWxpZDogMzkzMyxcbiAgICBtYXhEdXJhdGlvbjogNjQsXG4gICAgcmVmZXJlbmNlQmxvY2s6ICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnLFxuICAgIG5vbmNlOiAxLFxuICB9O1xuICBsZXQgZmFjdG9yeTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSk7XG4gIH0pO1xuXG4gIGl0KCdmYWN0b3J5LmZyb20oKSByZXR1cm5zIEhleFRyYW5zZmVyQnVpbGRlciBmb3IgYSBORVctZW5jb2RlZCBzaWduZWQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBIZXhUcmFuc2ZlckJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoYnVpbGRUZXN0Q29uZmlnKCkubmV0d29yay50eXBlKSlcbiAgICAgIC5hbW91bnQoY29tbW9uUGFyYW1zLmFtb3VudClcbiAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgLm1lbW8oJzU2NTk0JylcbiAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IGNvbW1vblBhcmFtcy5maXJzdFZhbGlkLCBtYXhEdXJhdGlvbjogY29tbW9uUGFyYW1zLm1heER1cmF0aW9uIH0pXG4gICAgICAucmVmZXJlbmNlQmxvY2soY29tbW9uUGFyYW1zLnJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogY29tbW9uUGFyYW1zLm5vbmNlIH0pXG4gICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgY29uc3QgcmVidWlsdCA9IGZhY3RvcnkuZnJvbShzZXJpYWxpemVkKTtcbiAgICByZWJ1aWx0LnNob3VsZC5iZS5pbnN0YW5jZU9mKEhleFRyYW5zZmVyQnVpbGRlcik7XG4gIH0pO1xuXG4gIGl0KCdmYWN0b3J5LmZyb20oKSByZXR1cm5zIFRyYW5zZmVyQnVpbGRlciAobm90IEhleFRyYW5zZmVyQnVpbGRlcikgZm9yIGFuIE9MRC1lbmNvZGVkIHNpZ25lZCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSlcbiAgICAgIC5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChidWlsZFRlc3RDb25maWcoKS5uZXR3b3JrLnR5cGUpKVxuICAgICAgLmFtb3VudChjb21tb25QYXJhbXMuYW1vdW50KVxuICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAubWVtbygnNTY1OTQnKVxuICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogY29tbW9uUGFyYW1zLmZpcnN0VmFsaWQsIG1heER1cmF0aW9uOiBjb21tb25QYXJhbXMubWF4RHVyYXRpb24gfSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhjb21tb25QYXJhbXMucmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiBjb21tb25QYXJhbXMubm9uY2UgfSlcbiAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICBjb25zdCByZWJ1aWx0ID0gZmFjdG9yeS5mcm9tKHNlcmlhbGl6ZWQpO1xuICAgIHJlYnVpbHQuc2hvdWxkLmJlLmluc3RhbmNlT2YoVHJhbnNmZXJCdWlsZGVyKTtcbiAgICByZWJ1aWx0LnNob3VsZC5ub3QuYmUuaW5zdGFuY2VPZihIZXhUcmFuc2ZlckJ1aWxkZXIpO1xuICB9KTtcblxuICBpdCgncmVidWlsZCBmcm9tIE5FVy1lbmNvZGVkIHR4IHByZXNlcnZlcyBtZW1vIGJ5dGVzIChzZXJpYWxpemVkIGhleCBpcyBpZGVudGljYWwpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkID0gYXN5bmMgKG1lbW86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgYiA9IG5ldyBIZXhUcmFuc2ZlckJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAgIC5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChidWlsZFRlc3RDb25maWcoKS5uZXR3b3JrLnR5cGUpKVxuICAgICAgICAuYW1vdW50KGNvbW1vblBhcmFtcy5hbW91bnQpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC5tZW1vKG1lbW8pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IGNvbW1vblBhcmFtcy5maXJzdFZhbGlkLCBtYXhEdXJhdGlvbjogY29tbW9uUGFyYW1zLm1heER1cmF0aW9uIH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jayhjb21tb25QYXJhbXMucmVmZXJlbmNlQmxvY2spXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IGNvbW1vblBhcmFtcy5ub25jZSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICByZXR1cm4gKGF3YWl0IGIuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBtZW1vIG9mIFsnNTY1OTQnLCAndGVzdG1lbW8nLCAnMCcsICcxMDIzMjk3MTYnXSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSBhd2FpdCBidWlsZChtZW1vKTtcbiAgICAgIC8vIGZyb21JbXBsZW1lbnRhdGlvbiBmb3Igc2lnbmVkIHR4cyBkb2Vzbid0IHJlc3RvcmUgYmxvY2tOdW1iZXIg4oCUIG11c3QgcmUtc3VwcGx5IHZhbGlkaXR5ICsgcmVmZXJlbmNlQmxvY2tcbiAgICAgIGNvbnN0IHJlYnVpbHQgPSBmYWN0b3J5XG4gICAgICAgIC5mcm9tKG9yaWdpbmFsKVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiBjb21tb25QYXJhbXMuZmlyc3RWYWxpZCwgbWF4RHVyYXRpb246IGNvbW1vblBhcmFtcy5tYXhEdXJhdGlvbiB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soY29tbW9uUGFyYW1zLnJlZmVyZW5jZUJsb2NrKTtcbiAgICAgIGNvbnN0IHJvdW5kVHJpcHBlZCA9IChhd2FpdCByZWJ1aWx0LmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXF1YWwocm91bmRUcmlwcGVkLCBvcmlnaW5hbCwgYHJvdW5kLXRyaXAgZmFpbGVkIGZvciBtZW1vIFwiJHttZW1vfVwiYCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgncmVidWlsZCBmcm9tIE5FVy1lbmNvZGVkIHR4IGhhcyBjb3JyZWN0IF9tZW1vIHZhbHVlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGhleEJ1aWxkZXIgPSBuZXcgSGV4VHJhbnNmZXJCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKVxuICAgICAgLm1hdGVyaWFsKHV0aWxzLmdldE1hdGVyaWFsKGJ1aWxkVGVzdENvbmZpZygpLm5ldHdvcmsudHlwZSkpXG4gICAgICAuYW1vdW50KGNvbW1vblBhcmFtcy5hbW91bnQpXG4gICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgIC5tZW1vKCc1NjU5NCcpXG4gICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiBjb21tb25QYXJhbXMuZmlyc3RWYWxpZCwgbWF4RHVyYXRpb246IGNvbW1vblBhcmFtcy5tYXhEdXJhdGlvbiB9KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKGNvbW1vblBhcmFtcy5yZWZlcmVuY2VCbG9jaylcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IGNvbW1vblBhcmFtcy5ub25jZSB9KVxuICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgaGV4QnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gKGF3YWl0IGhleEJ1aWxkZXIuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgIGNvbnN0IHJlYnVpbHQgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZCk7XG4gICAgc2hvdWxkLmVxdWFsKChyZWJ1aWx0IGFzIGFueSkuX21lbW8sIE5FV19NRU1PX0hFWFsnNTY1OTQnXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd1dGlscy5pc05ld01lbW9FbmNvZGluZycsICgpID0+IHtcbiAgaXQoJ2RldGVjdHMgTkVXIGVuY29kaW5nIChoYXMgMHgwMCBieXRlcyknLCAoKSA9PiB7XG4gICAgc2hvdWxkLm9rKHV0aWxzLmlzTmV3TWVtb0VuY29kaW5nKE5FV19NRU1PX0hFWFsnNTY1OTQnXSkpO1xuICAgIHNob3VsZC5vayh1dGlscy5pc05ld01lbW9FbmNvZGluZyhORVdfTUVNT19IRVhbJ3Rlc3RtZW1vJ10pKTtcbiAgICBzaG91bGQub2sodXRpbHMuaXNOZXdNZW1vRW5jb2RpbmcoTkVXX01FTU9fSEVYWydhYmMnXSkpO1xuICAgIHNob3VsZC5vayh1dGlscy5pc05ld01lbW9FbmNvZGluZyhORVdfTUVNT19IRVhbJzAnXSkpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgZGV0ZWN0IE9MRCBlbmNvZGluZyBhcyBORVcgKG5vIDB4MDAgYnl0ZXMpJywgKCkgPT4ge1xuICAgIC8vIE9MRCBlbmNvZGluZyBvZiBcIjBcIjogYWxsIDB4MzAgYnl0ZXMsIG5vIG51bGxzXG4gICAgY29uc3Qgb2xkTWVtb1plcm8gPSAnMHgzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwJztcbiAgICAvLyBPTEQgZW5jb2Rpbmcgb2YgXCI1NjU5NFwiOiAyNyDDlyAweDMwICsgQVNDSUkgXCI1NjU5NFwiXG4gICAgY29uc3Qgb2xkTWVtb1JlZiA9ICcweDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDM1MzYzNTM5MzQnO1xuICAgIHNob3VsZC5vayghdXRpbHMuaXNOZXdNZW1vRW5jb2Rpbmcob2xkTWVtb1plcm8pKTtcbiAgICBzaG91bGQub2soIXV0aWxzLmlzTmV3TWVtb0VuY29kaW5nKG9sZE1lbW9SZWYpKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgZmFsc2UgZm9yIG5vbi0weCBzdHJpbmdzJywgKCkgPT4ge1xuICAgIHNob3VsZC5vayghdXRpbHMuaXNOZXdNZW1vRW5jb2RpbmcoJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2NTk0JykpO1xuICAgIHNob3VsZC5vayghdXRpbHMuaXNOZXdNZW1vRW5jb2RpbmcoJycpKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgZmFsc2UgZm9yIHdyb25nLWxlbmd0aCAweCBzdHJpbmdzJywgKCkgPT4ge1xuICAgIHNob3VsZC5vayghdXRpbHMuaXNOZXdNZW1vRW5jb2RpbmcoJzB4MTIzNCcpKTtcbiAgfSk7XG5cbiAgaXQoJ2RldGVjdHMgZnVsbCAzMi1ieXRlIE5FVyBtZW1vIHdpdGggbm8gbnVsbCBwYWRkaW5nIGFzIE5FVycsICgpID0+IHtcbiAgICBjb25zdCBmdWxsTWVtbyA9ICcweCcgKyAnNjEnLnJlcGVhdCgzMik7XG4gICAgc2hvdWxkLm9rKHV0aWxzLmlzTmV3TWVtb0VuY29kaW5nKGZ1bGxNZW1vKSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd1dGlscy5lbmNvZGVNZW1vTmV3JywgKCkgPT4ge1xuICBpdCgnZW5jb2RlcyBcIjU2NTk0XCIgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5lbmNvZGVNZW1vTmV3KCc1NjU5NCcpLCBORVdfTUVNT19IRVhbJzU2NTk0J10pO1xuICB9KTtcblxuICBpdCgnZW5jb2RlcyBcInRlc3RtZW1vXCIgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5lbmNvZGVNZW1vTmV3KCd0ZXN0bWVtbycpLCBORVdfTUVNT19IRVhbJ3Rlc3RtZW1vJ10pO1xuICB9KTtcblxuICBpdCgnZW5jb2RlcyBcIjBcIiBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKHV0aWxzLmVuY29kZU1lbW9OZXcoJzAnKSwgTkVXX01FTU9fSEVYWycwJ10pO1xuICB9KTtcblxuICBpdCgnZW5jb2RlcyBcIjEwMjMyOTcxNlwiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwodXRpbHMuZW5jb2RlTWVtb05ldygnMTAyMzI5NzE2JyksIE5FV19NRU1PX0hFWFsnMTAyMzI5NzE2J10pO1xuICB9KTtcblxuICBpdCgnZW5jb2RlcyBcImFiY1wiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwodXRpbHMuZW5jb2RlTWVtb05ldygnYWJjJyksIE5FV19NRU1PX0hFWFsnYWJjJ10pO1xuICB9KTtcblxuICBpdCgnYWx3YXlzIHJldHVybnMgYSAweC1wcmVmaXhlZCA2Ni1jaGFyYWN0ZXIgc3RyaW5nJywgKCkgPT4ge1xuICAgIFsnMCcsICcxJywgJzU2NTk0JywgJ3Rlc3RtZW1vJywgJ2FiYycsICcxMDIzMjk3MTYnXS5mb3JFYWNoKChtZW1vKSA9PiB7XG4gICAgICBjb25zdCBlbmNvZGVkID0gdXRpbHMuZW5jb2RlTWVtb05ldyhtZW1vKTtcbiAgICAgIHNob3VsZC5vayhlbmNvZGVkLnN0YXJ0c1dpdGgoJzB4JyksIGBzaG91bGQgc3RhcnQgd2l0aCAweDogJHtlbmNvZGVkfWApO1xuICAgICAgc2hvdWxkLmVxdWFsKGVuY29kZWQubGVuZ3RoLCA2NiwgYHNob3VsZCBiZSA2NiBjaGFycyAoMHggKyA2NCBoZXgpOiAke2VuY29kZWR9YCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3Mgd2hlbiBtZW1vIGV4Y2VlZHMgMzIgVVRGLTggYnl0ZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgdG9vTG9uZyA9ICdhJy5yZXBlYXQoMzMpO1xuICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdXRpbHMuZW5jb2RlTWVtb05ldyh0b29Mb25nKSwgL2V4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgMzIgYnl0ZXMvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0hleFRyYW5zZmVyQnVpbGRlciDigJQgbWVtbyB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICBsZXQgYnVpbGRlcjogSGV4VHJhbnNmZXJCdWlsZGVyO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgIGJ1aWxkZXIgPSBuZXcgSGV4VHJhbnNmZXJCdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSkpO1xuICB9KTtcblxuICBpdCgndGhyb3dzIHdoZW4gbWVtbyBleGNlZWRzIDMyIFVURi04IGJ5dGVzJywgKCkgPT4ge1xuICAgIGNvbnN0IHRvb0xvbmcgPSAnYScucmVwZWF0KDMzKTtcbiAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIubWVtbyh0b29Mb25nKSwgL2V4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgMzIgYnl0ZXMvKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyBmb3IgaW52YWxpZCBoZXggbWVtbycsICgpID0+IHtcbiAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIubWVtbygnMHgnICsgJ3p6Jy5yZXBlYXQoMzIpKSwgL0ludmFsaWQgbWVtbyBoZXggZW5jb2RpbmcvKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=nominateBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nominateBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/nominateBuilder.ts"],"names":[],"mappings":""}