@ritbit/v4-client-js 2.1.0 → 2.1.1

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 (96) hide show
  1. package/__tests__/lib/helpers.test.ts +2 -0
  2. package/build/cjs/__tests__/clients/composite-client.test.js +130 -0
  3. package/build/cjs/__tests__/helpers/baseClients.js +29 -0
  4. package/build/cjs/__tests__/helpers/constants.js +110 -0
  5. package/build/cjs/__tests__/lib/helpers.test.js +46 -0
  6. package/build/cjs/__tests__/lib/util.test.js +67 -0
  7. package/build/cjs/__tests__/lib/validation.test.js +254 -0
  8. package/build/cjs/__tests__/modules/client/AccountEndpoints.test.js +171 -0
  9. package/build/cjs/__tests__/modules/client/FaucetEndpoint.test.js +15 -0
  10. package/build/cjs/__tests__/modules/client/MarketsEndpoints.test.js +69 -0
  11. package/build/cjs/__tests__/modules/client/Transfers.test.js +44 -0
  12. package/build/cjs/__tests__/modules/client/UtilityEndpoints.test.js +28 -0
  13. package/build/cjs/__tests__/modules/client/ValidatorGetEndpoints.test.js +46 -0
  14. package/build/cjs/__tests__/modules/client/ValidatorPostEndpoints.test.js +53 -0
  15. package/build/cjs/__tests__/modules/client/constants.js +7 -0
  16. package/build/cjs/__tests__/modules/onboarding.test.js +50 -0
  17. package/build/cjs/examples/account_endpoints.js +129 -0
  18. package/build/cjs/examples/batch_cancel_orders_example.js +93 -0
  19. package/build/cjs/examples/composite_example.js +50 -0
  20. package/build/cjs/examples/constants.js +35 -0
  21. package/build/cjs/examples/faucet_endpoint.js +23 -0
  22. package/build/cjs/examples/gov_add_new_market.js +77 -0
  23. package/build/cjs/examples/human_readable_orders.json +86 -0
  24. package/build/cjs/examples/human_readable_short_term_orders.json +42 -0
  25. package/build/cjs/examples/json-encoding.js +32 -0
  26. package/build/cjs/examples/long_term_order_cancel_example.js +63 -0
  27. package/build/cjs/examples/markets_endpoints.js +134 -0
  28. package/build/cjs/examples/native_examples.js +112 -0
  29. package/build/cjs/examples/noble_example.js +88 -0
  30. package/build/cjs/examples/optimal_node.js +70 -0
  31. package/build/cjs/examples/permissioned_keys_example.js +104 -0
  32. package/build/cjs/examples/raw_orders.json +130 -0
  33. package/build/cjs/examples/short_term_order_cancel_example.js +54 -0
  34. package/build/cjs/examples/short_term_order_composite_example.js +68 -0
  35. package/build/cjs/examples/test.js +50 -0
  36. package/build/cjs/examples/transfer_example_deposit.js +29 -0
  37. package/build/cjs/examples/transfer_example_send.js +42 -0
  38. package/build/cjs/examples/transfer_example_subaccount_transfer.js +29 -0
  39. package/build/cjs/examples/transfer_example_withdraw.js +30 -0
  40. package/build/cjs/examples/transfer_example_withdraw_other.js +42 -0
  41. package/build/cjs/examples/utility_endpoints.js +42 -0
  42. package/build/cjs/examples/validator_get_example.js +158 -0
  43. package/build/cjs/examples/validator_post_example.js +76 -0
  44. package/build/cjs/examples/wallet_address.js +22 -0
  45. package/build/cjs/examples/websocket_example.js +36 -0
  46. package/build/cjs/examples/websocket_orderbook_example.js +196 -0
  47. package/build/cjs/{clients → src/clients}/composite-client.js +1 -1
  48. package/build/cjs/{clients → src/clients}/constants.js +1 -1
  49. package/build/cjs/{clients → src/clients}/faucet-client.js +1 -1
  50. package/build/cjs/{clients → src/clients}/helpers/chain-helpers.js +1 -1
  51. package/build/cjs/src/clients/helpers/request-helpers.js +65 -0
  52. package/build/cjs/{clients → src/clients}/indexer-client.js +1 -1
  53. package/build/cjs/{clients → src/clients}/lib/axios/axiosRequest.js +1 -1
  54. package/build/cjs/{clients → src/clients}/lib/axios/errors.js +1 -1
  55. package/build/cjs/{clients → src/clients}/lib/axios/index.js +1 -1
  56. package/build/cjs/{clients → src/clients}/lib/axios/types.js +1 -1
  57. package/build/cjs/{clients → src/clients}/lib/cctpProto.js +1 -1
  58. package/build/cjs/{clients → src/clients}/lib/errors.js +1 -1
  59. package/build/cjs/{clients → src/clients}/lib/registry.js +1 -1
  60. package/build/cjs/{clients → src/clients}/modules/account.js +1 -1
  61. package/build/cjs/{clients → src/clients}/modules/composer.js +1 -1
  62. package/build/cjs/{clients → src/clients}/modules/get.js +1 -1
  63. package/build/cjs/{clients → src/clients}/modules/local-wallet.js +1 -1
  64. package/build/cjs/{clients → src/clients}/modules/markets.js +1 -1
  65. package/build/cjs/{clients → src/clients}/modules/post.js +1 -1
  66. package/build/cjs/{clients → src/clients}/modules/proto-includes.js +1 -1
  67. package/build/cjs/{clients → src/clients}/modules/rest.js +1 -1
  68. package/build/cjs/{clients → src/clients}/modules/signer.js +1 -1
  69. package/build/cjs/{clients → src/clients}/modules/tendermintClient.js +1 -1
  70. package/build/cjs/{clients → src/clients}/modules/utility.js +1 -1
  71. package/build/cjs/{clients → src/clients}/modules/vault.js +1 -1
  72. package/build/cjs/src/clients/native.js +1330 -0
  73. package/build/cjs/{clients → src/clients}/noble-client.js +1 -1
  74. package/build/cjs/{clients → src/clients}/socket-client.js +1 -1
  75. package/build/cjs/{clients → src/clients}/subaccount.js +1 -1
  76. package/build/cjs/{clients → src/clients}/types.js +1 -1
  77. package/build/cjs/{clients → src/clients}/validator-client.js +1 -1
  78. package/build/cjs/{index.js → src/index.js} +1 -1
  79. package/build/cjs/{lib → src/lib}/constants.js +1 -1
  80. package/build/cjs/{lib → src/lib}/errors.js +1 -1
  81. package/build/cjs/{lib → src/lib}/helpers.js +1 -1
  82. package/build/cjs/{lib → src/lib}/onboarding.js +1 -1
  83. package/build/cjs/{lib → src/lib}/trading-key-utils.js +1 -1
  84. package/build/cjs/{lib → src/lib}/utils.js +1 -1
  85. package/build/cjs/{lib → src/lib}/validation.js +1 -1
  86. package/build/cjs/src/network_optimizer.js +96 -0
  87. package/build/cjs/{types.js → src/types.js} +1 -1
  88. package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  89. package/build/esm/__tests__/lib/helpers.test.js +2 -1
  90. package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
  91. package/package.json +10 -10
  92. package/tsconfig.cjs.json +3 -13
  93. package/tsconfig.eslint.json +1 -4
  94. package/tsconfig.esm.json +1 -2
  95. package/build/cjs/clients/helpers/request-helpers.js +0 -65
  96. package/build/cjs/network_optimizer.js +0 -96
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ritbit/v4-client-js",
3
- "version": "2.1.0",
4
- "description": "General client library for the new dYdX system (v4 decentralized)",
3
+ "version": "2.1.1",
4
+ "description": "General client library for the new RITBIT Chain",
5
5
  "main": "build/cjs/src/index.js",
6
6
  "module": "build/esm/src/index.js",
7
7
  "types": "build/esm/src/index.d.ts",
@@ -48,14 +48,14 @@
48
48
  },
49
49
  "homepage": "https://github.com/ritbit/v4-clients#readme",
50
50
  "dependencies": {
51
- "@cosmjs/amino": "^0.37.0",
52
- "@cosmjs/crypto": "^0.37.0",
53
- "@cosmjs/encoding": "^0.37.0",
54
- "@cosmjs/math": "^0.37.0",
55
- "@cosmjs/proto-signing": "^0.37.0",
56
- "@cosmjs/stargate": "^0.37.0",
57
- "@cosmjs/tendermint-rpc": "^0.37.0",
58
- "@cosmjs/utils": "^0.37.0",
51
+ "@cosmjs/amino": "^0.32.3",
52
+ "@cosmjs/crypto": "^0.32.4",
53
+ "@cosmjs/encoding": "^0.32.4",
54
+ "@cosmjs/math": "^0.32.4",
55
+ "@cosmjs/proto-signing": "^0.32.4",
56
+ "@cosmjs/stargate": "^0.32.4",
57
+ "@cosmjs/tendermint-rpc": "^0.32.4",
58
+ "@cosmjs/utils": "^0.32.4",
59
59
  "@osmonauts/lcd": "^0.6.0",
60
60
  "@ritbit/v4-proto": "^1.1.5",
61
61
  "@scure/bip32": "^1.1.5",
package/tsconfig.cjs.json CHANGED
@@ -1,20 +1,10 @@
1
1
  {
2
2
  "extends": "./tsconfig.base.json",
3
- "include": ["src/**/*"],
4
- "exclude": [
5
- "src/codegen/**/*.ts",
6
- "__native__/*.js",
7
- "__native__/__ios__/*.js",
8
- "node_modules/@ritbit/v4-proto/**/bundle.ts",
9
- "src/clients/native.ts",
10
- "examples/native_examples.ts",
11
- "__tests__/**/*",
12
- "examples/**/*"
13
- ],
3
+ "include": ["src/**/*", "__tests__/**/*", "examples/**/*"],
14
4
  "compilerOptions": {
15
5
  "outDir": "build/cjs",
16
- "module": "NodeNext",
17
- "moduleResolution": "NodeNext",
6
+ "module": "CommonJS",
7
+ "moduleResolution": "node",
18
8
  "declaration": false
19
9
  }
20
10
  }
@@ -10,8 +10,5 @@
10
10
  // Include e.g. configuration files.
11
11
  "./.*.js",
12
12
  "./*.js"
13
- ],
14
- "compilerOptions": {
15
- "types": ["jest"]
16
- }
13
+ ]
17
14
  }
package/tsconfig.esm.json CHANGED
@@ -6,7 +6,6 @@
6
6
  "module": "ESNext",
7
7
  "moduleResolution": "bundler",
8
8
  "declaration": true,
9
- "declarationMap": true,
10
- "types": ["jest"]
9
+ "declarationMap": true
11
10
  }
12
11
  }
@@ -1,65 +0,0 @@
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
- exports.generateQueryPath = generateQueryPath;
7
- exports.parseToPrimitives = parseToPrimitives;
8
- const long_1 = __importDefault(require("long"));
9
- /* eslint-disable @typescript-eslint/no-explicit-any */
10
- function generateQueryPath(url, params) {
11
- const definedEntries = Object.entries(params).filter(([_key, value]) => value !== undefined);
12
- if (!definedEntries.length) {
13
- return url;
14
- }
15
- const paramsString = definedEntries
16
- .map(([key, value]) => `${key}=${value}`)
17
- .join('&');
18
- return `${url}?${paramsString}`;
19
- }
20
- function parseToPrimitives(x) {
21
- if (typeof x === 'number' || typeof x === 'string' || typeof x === 'boolean' || x === null) {
22
- return x;
23
- }
24
- if (Array.isArray(x)) {
25
- return x.map((item) => parseToPrimitives(item));
26
- }
27
- if (long_1.default.isLong(x)) {
28
- return x.toString();
29
- }
30
- if (x instanceof Uint8Array) {
31
- return bytesToBigInt(x).toString();
32
- }
33
- if (x instanceof Date) {
34
- return x.toString();
35
- }
36
- if (typeof x === 'object') {
37
- const parsedObj = {};
38
- // eslint-disable-next-line no-restricted-syntax
39
- for (const key in x) {
40
- if (Object.prototype.hasOwnProperty.call(x, key)) {
41
- parsedObj[key] = parseToPrimitives(x[key]);
42
- }
43
- }
44
- return parsedObj;
45
- }
46
- if (typeof x === 'bigint') {
47
- return x.toString();
48
- }
49
- throw new Error(`Unsupported data type: ${typeof x}`);
50
- }
51
- /**
52
- * Converts a byte array (representing an arbitrary-size signed integer) into a bigint.
53
- * @param u Array of bytes represented as a Uint8Array.
54
- */
55
- function bytesToBigInt(u) {
56
- if (u.length <= 1) {
57
- return BigInt(0);
58
- }
59
- // eslint-disable-next-line no-bitwise
60
- const negated = (u[0] & 1) === 1;
61
- const hex = Buffer.from(u.slice(1)).toString('hex');
62
- const abs = BigInt(`0x${hex}`);
63
- return negated ? -abs : abs;
64
- }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudHMvaGVscGVycy9yZXF1ZXN0LWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSw4Q0FhQztBQUVELDhDQXFDQztBQXZERCxnREFBd0I7QUFFeEIsdURBQXVEO0FBQ3ZELFNBQWdCLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxNQUFVO0lBQ3ZELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUNsRCxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBb0IsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FDMUQsQ0FBQztJQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsY0FBYztTQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQW9CLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1NBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNiLE9BQU8sR0FBRyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUFJLENBQUk7SUFDdkMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDM0YsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBTSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLGNBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxDQUFDLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDNUIsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFPLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sU0FBUyxHQUEyQixFQUFFLENBQUM7UUFDN0MsZ0RBQWdEO1FBQ2hELEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBRSxDQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sU0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLENBQWE7SUFDbEMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFDRCxzQ0FBc0M7SUFDdEMsTUFBTSxPQUFPLEdBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sR0FBRyxHQUFXLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxNQUFNLEdBQUcsR0FBVyxNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzlCLENBQUMifQ==
@@ -1,96 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NetworkOptimizer = exports.isTruthy = void 0;
4
- const indexer_client_1 = require("./clients/indexer-client");
5
- const validator_client_1 = require("./clients/validator-client");
6
- const helpers_1 = require("./lib/helpers");
7
- const types_1 = require("./types");
8
- class PingResponse {
9
- constructor(height) {
10
- this.height = height;
11
- this.responseTime = new Date();
12
- }
13
- }
14
- const isTruthy = (n) => Boolean(n);
15
- exports.isTruthy = isTruthy;
16
- class NetworkOptimizer {
17
- async validatorClients(endpointUrls, chainId) {
18
- return (await Promise.all(endpointUrls.map((endpointUrl) => validator_client_1.ValidatorClient.connect(new types_1.ValidatorConfig(endpointUrl, chainId, {
19
- CHAINTOKEN_DENOM: 'placeholder',
20
- CHAINTOKEN_DECIMALS: 18,
21
- USDC_DENOM: 'uusdc',
22
- USDC_DECIMALS: 6,
23
- })).catch((_) => undefined)))).filter(exports.isTruthy);
24
- }
25
- indexerClients(endpointUrls) {
26
- return endpointUrls
27
- .map((endpointUrl) => new indexer_client_1.IndexerClient(
28
- // socket is not used for finding optimal indexer, but required as a parameter to the config
29
- new types_1.IndexerConfig(endpointUrl, endpointUrl.replace('https://', 'wss://').replace('http://', 'ws://'))))
30
- .filter(exports.isTruthy);
31
- }
32
- async findOptimalNode(endpointUrls, chainId) {
33
- if (endpointUrls.length === 0) {
34
- const errorResponse = {
35
- error: {
36
- message: 'No nodes provided',
37
- },
38
- };
39
- return (0, helpers_1.encodeJson)(errorResponse);
40
- }
41
- const clients = await this.validatorClients(endpointUrls, chainId);
42
- const responses = (await Promise.all(clients
43
- .map(async (client) => {
44
- const block = await client.get.latestBlock();
45
- const response = new PingResponse(block.header.height);
46
- return {
47
- endpoint: client.config.restEndpoint,
48
- height: response.height,
49
- time: response.responseTime.getTime(),
50
- };
51
- })
52
- .map((promise) => promise.catch((_) => undefined)))).filter(exports.isTruthy);
53
- if (responses.length === 0) {
54
- throw new Error('Could not connect to endpoints');
55
- }
56
- const maxHeight = Math.max(...responses.map(({ height }) => height));
57
- return (responses
58
- // Only consider nodes at `maxHeight` or `maxHeight - 1`
59
- .filter(({ height }) => height === maxHeight || height === maxHeight - 1)
60
- // Return the endpoint with the fastest response time
61
- .sort((a, b) => a.time - b.time)[0].endpoint);
62
- }
63
- async findOptimalIndexer(endpointUrls) {
64
- if (endpointUrls.length === 0) {
65
- const errorResponse = {
66
- error: {
67
- message: 'No URL provided',
68
- },
69
- };
70
- return (0, helpers_1.encodeJson)(errorResponse);
71
- }
72
- const clients = this.indexerClients(endpointUrls);
73
- const responses = (await Promise.all(clients
74
- .map(async (client) => {
75
- const block = await client.utility.getHeight();
76
- const response = new PingResponse(+block.height);
77
- return {
78
- endpoint: client.config.restEndpoint,
79
- height: response.height,
80
- time: response.responseTime.getTime(),
81
- };
82
- })
83
- .map((promise) => promise.catch((_) => undefined)))).filter(exports.isTruthy);
84
- if (responses.length === 0) {
85
- throw new Error('Could not connect to endpoints');
86
- }
87
- const maxHeight = Math.max(...responses.map(({ height }) => height));
88
- return (responses
89
- // Only consider nodes at `maxHeight` or `maxHeight - 1`
90
- .filter(({ height }) => height === maxHeight || height === maxHeight - 1)
91
- // Return the endpoint with the fastest response time
92
- .sort((a, b) => a.time - b.time)[0].endpoint);
93
- }
94
- }
95
- exports.NetworkOptimizer = NetworkOptimizer;
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya19vcHRpbWl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29ya19vcHRpbWl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQXlEO0FBQ3pELGlFQUE2RDtBQUM3RCwyQ0FBMkM7QUFDM0MsbUNBQXlEO0FBRXpELE1BQU0sWUFBWTtJQUtoQixZQUFZLE1BQWM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQUVNLE1BQU0sUUFBUSxHQUFHLENBQUksQ0FBb0MsRUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQTNFLFFBQUEsUUFBUSxZQUFtRTtBQUV4RixNQUFhLGdCQUFnQjtJQUNuQixLQUFLLENBQUMsZ0JBQWdCLENBQzVCLFlBQXNCLEVBQ3RCLE9BQWU7UUFFZixPQUFPLENBQ0wsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUMvQixrQ0FBZSxDQUFDLE9BQU8sQ0FDckIsSUFBSSx1QkFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7WUFDeEMsZ0JBQWdCLEVBQUUsYUFBYTtZQUMvQixtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLFVBQVUsRUFBRSxPQUFPO1lBQ25CLGFBQWEsRUFBRSxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQ0YsQ0FDRixDQUFDLE1BQU0sQ0FBQyxnQkFBUSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxZQUFzQjtRQUMzQyxPQUFPLFlBQVk7YUFDaEIsR0FBRyxDQUNGLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FD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