@paraswap/dex-lib 3.8.18 → 3.8.20-lite-psm.2

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 (178) hide show
  1. package/build/abi/inception/inception-ineth-pool.json +1062 -0
  2. package/build/abi/inception/inception-ineth.json +609 -0
  3. package/build/abi/inception/inception-ratio-feed.json +93 -0
  4. package/build/abi/inception/inception-vault.json +991 -0
  5. package/build/abi/infusion/InfusionFactory.json +147 -0
  6. package/build/abi/infusion/InfusionPair.json +658 -0
  7. package/build/abi/infusion/InfusionRouter.json +442 -0
  8. package/build/abi/lite-psm/dai.json +333 -0
  9. package/build/abi/lite-psm/psm.json +468 -0
  10. package/build/abi/lite-psm/usdc.json +814 -0
  11. package/build/abi/oswap/oswap.abi.json +452 -0
  12. package/build/dex/aave-v1/aave-v1.js +0 -1
  13. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  14. package/build/dex/idle-dao/idle-dao-pool.d.ts +56 -0
  15. package/build/dex/idle-dao/idle-dao-pool.js +176 -0
  16. package/build/dex/idle-dao/idle-dao-pool.js.map +1 -0
  17. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +16 -0
  18. package/build/dex/idle-dao/idle-dao-pooling-pool.js +57 -0
  19. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +1 -0
  20. package/build/dex/idle-dao/scripts.d.ts +9 -0
  21. package/build/dex/idle-dao/scripts.js +552 -0
  22. package/build/dex/idle-dao/scripts.js.map +1 -0
  23. package/build/dex/inception/config.d.ts +5 -0
  24. package/build/dex/inception/config.js +112 -0
  25. package/build/dex/inception/config.js.map +1 -0
  26. package/build/dex/inception/inception-event-pool.d.ts +23 -0
  27. package/build/dex/inception/inception-event-pool.js +34 -0
  28. package/build/dex/inception/inception-event-pool.js.map +1 -0
  29. package/build/dex/inception/inception-native.d.ts +43 -0
  30. package/build/dex/inception/inception-native.js +131 -0
  31. package/build/dex/inception/inception-native.js.map +1 -0
  32. package/build/dex/inception/inception-pool.d.ts +18 -0
  33. package/build/dex/inception/inception-pool.js +32 -0
  34. package/build/dex/inception/inception-pool.js.map +1 -0
  35. package/build/dex/inception/inception-price-feed.d.ts +19 -0
  36. package/build/dex/inception/inception-price-feed.js +51 -0
  37. package/build/dex/inception/inception-price-feed.js.map +1 -0
  38. package/build/dex/inception/inception.d.ts +44 -0
  39. package/build/dex/inception/inception.js +162 -0
  40. package/build/dex/inception/inception.js.map +1 -0
  41. package/build/dex/inception/tokens.d.ts +9 -0
  42. package/build/dex/inception/tokens.js +28 -0
  43. package/build/dex/inception/tokens.js.map +1 -0
  44. package/build/dex/inception/types.d.ts +22 -0
  45. package/build/dex/inception/types.js +3 -0
  46. package/build/dex/inception/types.js.map +1 -0
  47. package/build/dex/inception/utils.d.ts +7 -0
  48. package/build/dex/inception/utils.js +58 -0
  49. package/build/dex/inception/utils.js.map +1 -0
  50. package/build/dex/index.js +4 -0
  51. package/build/dex/index.js.map +1 -1
  52. package/build/dex/infusion/config.d.ts +4 -0
  53. package/build/dex/infusion/config.js +25 -0
  54. package/build/dex/infusion/config.js.map +1 -0
  55. package/build/dex/infusion/infusion-stable-pool.d.ts +4 -0
  56. package/build/dex/infusion/infusion-stable-pool.js +74 -0
  57. package/build/dex/infusion/infusion-stable-pool.js.map +1 -0
  58. package/build/dex/infusion/infusion.d.ts +54 -0
  59. package/build/dex/infusion/infusion.js +510 -0
  60. package/build/dex/infusion/infusion.js.map +1 -0
  61. package/build/dex/infusion/types.d.ts +47 -0
  62. package/build/dex/infusion/types.js +3 -0
  63. package/build/dex/infusion/types.js.map +1 -0
  64. package/build/dex/infusion/utils/isStablePair.d.ts +2 -0
  65. package/build/dex/infusion/utils/isStablePair.js +18 -0
  66. package/build/dex/infusion/utils/isStablePair.js.map +1 -0
  67. package/build/dex/lite-psm/config.d.ts +3 -0
  68. package/build/dex/lite-psm/config.js +29 -0
  69. package/build/dex/lite-psm/config.js.map +1 -0
  70. package/build/dex/lite-psm/lite-psm-event-pool.d.ts +29 -0
  71. package/build/dex/lite-psm/lite-psm-event-pool.js +164 -0
  72. package/build/dex/lite-psm/lite-psm-event-pool.js.map +1 -0
  73. package/build/dex/lite-psm/lite-psm.d.ts +53 -0
  74. package/build/dex/lite-psm/lite-psm.js +366 -0
  75. package/build/dex/lite-psm/lite-psm.js.map +1 -0
  76. package/build/dex/lite-psm/types.d.ts +40 -0
  77. package/build/dex/lite-psm/types.js +3 -0
  78. package/build/dex/lite-psm/types.js.map +1 -0
  79. package/build/dex/maker-psm/maker-psm.js +3 -2
  80. package/build/dex/maker-psm/maker-psm.js.map +1 -1
  81. package/build/dex/oswap/config.d.ts +5 -0
  82. package/build/dex/oswap/config.js +31 -0
  83. package/build/dex/oswap/config.js.map +1 -0
  84. package/build/dex/oswap/oswap-pool.d.ts +51 -0
  85. package/build/dex/oswap/oswap-pool.js +150 -0
  86. package/build/dex/oswap/oswap-pool.js.map +1 -0
  87. package/build/dex/oswap/oswap.d.ts +46 -0
  88. package/build/dex/oswap/oswap.js +273 -0
  89. package/build/dex/oswap/oswap.js.map +1 -0
  90. package/build/dex/oswap/types.d.ts +20 -0
  91. package/build/dex/oswap/types.js +3 -0
  92. package/build/dex/oswap/types.js.map +1 -0
  93. package/build/dex/platypus/platypus.js +3 -17
  94. package/build/dex/platypus/platypus.js.map +1 -1
  95. package/build/dex/swaap-v1/swaap-v1.js +0 -4
  96. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  97. package/build/dex/trader-joe-v2.1/config.d.ts +3 -0
  98. package/build/dex/trader-joe-v2.1/config.js +5 -1
  99. package/build/dex/trader-joe-v2.1/config.js.map +1 -1
  100. package/build/dex/trader-joe-v2.1/trader-joe-v2.1.d.ts +2 -14
  101. package/build/dex/trader-joe-v2.1/trader-joe-v2.1.js +3 -85
  102. package/build/dex/trader-joe-v2.1/trader-joe-v2.1.js.map +1 -1
  103. package/build/dex-helper/dummy-dex-helper.js +1 -1
  104. package/build/dex-helper/dummy-dex-helper.js.map +1 -1
  105. package/package.json +1 -1
  106. package/src/abi/lite-psm/dai.json +333 -0
  107. package/src/abi/lite-psm/psm.json +468 -0
  108. package/src/abi/lite-psm/usdc.json +814 -0
  109. package/src/dex/index.ts +4 -0
  110. package/src/dex/lite-psm/config.ts +29 -0
  111. package/src/dex/lite-psm/lite-psm-e2e.test.ts +79 -0
  112. package/src/dex/lite-psm/lite-psm-event-pool.ts +216 -0
  113. package/src/dex/lite-psm/lite-psm-events.test.ts +61 -0
  114. package/src/dex/lite-psm/lite-psm-integration.test.ts +96 -0
  115. package/src/dex/lite-psm/lite-psm.ts +576 -0
  116. package/src/dex/lite-psm/types.ts +46 -0
  117. package/src/dex/maker-psm/maker-psm.ts +3 -2
  118. package/src/dex/trader-joe-v2.1/base.ts +178 -0
  119. package/src/dex/trader-joe-v2.1/config.ts +5 -0
  120. package/src/dex/trader-joe-v2.1/trader-joe-v2.1.ts +8 -165
  121. package/src/dex/trader-joe-v2.1/trader-joe-v2.2.ts +23 -0
  122. package/src/dex-helper/dummy-dex-helper.ts +1 -1
  123. package/.vscode/launch.json +0 -53
  124. package/.vscode/settings.json +0 -2
  125. package/.vscode/tasks.json +0 -15
  126. package/build/abi/maverick-v2/MaverickV2Router.json +0 -778
  127. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +0 -52
  128. package/build/abi/wombat/pool.json +0 -1289
  129. package/build/dex/aave-v2/tokens-avalanche.json +0 -44
  130. package/build/dex/aave-v2/tokens-mainnet.json +0 -188
  131. package/build/dex/aave-v2/tokens-polygon.json +0 -44
  132. package/build/dex/bProtocol.d.ts +0 -18
  133. package/build/dex/bProtocol.js +0 -39
  134. package/build/dex/bProtocol.js.map +0 -1
  135. package/build/dex/bancor.d.ts +0 -26
  136. package/build/dex/bancor.js +0 -58
  137. package/build/dex/bancor.js.map +0 -1
  138. package/build/dex/compound.d.ts +0 -18
  139. package/build/dex/compound.js +0 -46
  140. package/build/dex/compound.js.map +0 -1
  141. package/build/dex/curve-v2.d.ts +0 -58
  142. package/build/dex/curve-v2.js +0 -180
  143. package/build/dex/curve-v2.js.map +0 -1
  144. package/build/dex/dodo-v1.d.ts +0 -33
  145. package/build/dex/dodo-v1.js +0 -63
  146. package/build/dex/dodo-v1.js.map +0 -1
  147. package/build/dex/lido.d.ts +0 -19
  148. package/build/dex/lido.js +0 -42
  149. package/build/dex/lido.js.map +0 -1
  150. package/build/dex/maker-psm/scripts/gem.abi.json +0 -136
  151. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  152. package/build/dex/maker-psm/scripts/validate-state.js +0 -185
  153. package/build/dex/maker-psm/scripts/validate-state.js.map +0 -1
  154. package/build/dex/maker-psm/scripts/vat.abi.json +0 -243
  155. package/build/dex/onebit.d.ts +0 -25
  156. package/build/dex/onebit.js +0 -42
  157. package/build/dex/onebit.js.map +0 -1
  158. package/build/dex/smoothy.d.ts +0 -26
  159. package/build/dex/smoothy.js +0 -48
  160. package/build/dex/smoothy.js.map +0 -1
  161. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +0 -1
  162. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +0 -53
  163. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +0 -1
  164. package/build/dex/stable-pool.d.ts +0 -28
  165. package/build/dex/stable-pool.js +0 -55
  166. package/build/dex/stable-pool.js.map +0 -1
  167. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +0 -7
  168. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +0 -20
  169. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +0 -1
  170. package/build/dex/trader-joe-v2.1.d.ts +0 -43
  171. package/build/dex/trader-joe-v2.1.js +0 -79
  172. package/build/dex/trader-joe-v2.1.js.map +0 -1
  173. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +0 -17
  174. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +0 -64
  175. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +0 -1
  176. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +0 -17
  177. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +0 -79
  178. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/lite-psm/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAE1C,0CAA0C;AAC7B,QAAA,aAAa,GAA4B;IACpD,OAAO,EAAE;QACP,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,GAAG,EAAE;gBACH,OAAO,EAAE,4CAA4C;gBACrD,QAAQ,EAAE,EAAE;aACb;YACD,UAAU,EAAE,4CAA4C;YACxD,KAAK,EAAE;gBACL;oBACE,GAAG,EAAE;wBACH,OAAO,EAAE,4CAA4C;wBACrD,QAAQ,EAAE,CAAC;qBACZ;oBACD,cAAc,EAAE,4CAA4C;oBAC5D,aAAa,EAAE,4CAA4C;oBAC3D,UAAU,EAAE,4CAA4C;oBACxD,UAAU,EACR,oEAAoE,EAAE,6BAA6B;iBACtG;aACF;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { DeepReadonly } from 'ts-essentials';
2
+ import { Contract } from 'web3-eth-contract';
3
+ import { Address, Log, Logger } from '../../types';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
5
+ import { IDexHelper } from '../../dex-helper/idex-helper';
6
+ import { PoolState, PoolConfig } from './types';
7
+ export declare function getOnChainState(multiContract: Contract, poolConfigs: PoolConfig[], vatAddress: Address, blockNumber: number | 'latest', daiAddress: Address): Promise<PoolState[]>;
8
+ export declare class LitePsmEventPool extends StatefulEventSubscriber<PoolState> {
9
+ protected network: number;
10
+ protected dexHelper: IDexHelper;
11
+ poolConfig: PoolConfig;
12
+ protected vatAddress: Address;
13
+ handlers: {
14
+ [event: string]: (event: any, pool: PoolState, log: Log) => PoolState;
15
+ };
16
+ logDecoder: (log: Log) => any;
17
+ to18ConversionFactor: bigint;
18
+ bytes32Tout: string;
19
+ bytes32Tin: string;
20
+ daiAddress: Address;
21
+ constructor(parentName: string, network: number, dexHelper: IDexHelper, logger: Logger, poolConfig: PoolConfig, vatAddress: Address);
22
+ handleFile(event: any, pool: PoolState, log: Log): PoolState;
23
+ handleTransfer(event: any, pool: PoolState, log: Log): PoolState;
24
+ handleTransferDAI(event: any, pool: PoolState, log: Log): PoolState;
25
+ handleTransferGEM(event: any, pool: PoolState, log: Log): PoolState;
26
+ getIdentifier(): string;
27
+ protected processLog(state: DeepReadonly<PoolState>, log: Readonly<Log>): DeepReadonly<PoolState> | null;
28
+ generateState(blockNumber: number | 'latest'): Promise<Readonly<PoolState>>;
29
+ }
@@ -0,0 +1,164 @@
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.LitePsmEventPool = exports.getOnChainState = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
9
+ const utils_1 = require("../../utils");
10
+ const config_1 = require("./config");
11
+ const psm_json_1 = __importDefault(require("../../abi/maker-psm/psm.json"));
12
+ const vat_json_1 = __importDefault(require("../../abi/maker-psm/vat.json"));
13
+ const utils_2 = require("../../lib/tokens/utils");
14
+ const dai_json_1 = __importDefault(require("../../abi/lite-psm/dai.json"));
15
+ const usdc_json_1 = __importDefault(require("../../abi/lite-psm/usdc.json"));
16
+ const vatInterface = new abi_1.Interface(vat_json_1.default);
17
+ const psmInterface = new abi_1.Interface(psm_json_1.default);
18
+ const daiInterface = new abi_1.Interface(dai_json_1.default);
19
+ const usdcInterface = new abi_1.Interface(usdc_json_1.default);
20
+ const bigIntify = (b) => BigInt(b.toString());
21
+ async function getOnChainState(multiContract, poolConfigs, vatAddress, blockNumber, daiAddress) {
22
+ const callData = poolConfigs
23
+ .map(c => [
24
+ {
25
+ target: c.psmAddress,
26
+ callData: psmInterface.encodeFunctionData('tin', []),
27
+ },
28
+ {
29
+ target: c.psmAddress,
30
+ callData: psmInterface.encodeFunctionData('tout', []),
31
+ },
32
+ {
33
+ target: vatAddress,
34
+ callData: vatInterface.encodeFunctionData('ilks', [c.identifier]),
35
+ },
36
+ // dai liquidity
37
+ // ceiling for `sellGem`
38
+ {
39
+ target: daiAddress,
40
+ callData: utils_2.erc20Iface.encodeFunctionData('balanceOf', [c.psmAddress]),
41
+ },
42
+ // gem liquidity
43
+ // ceiling for `buyGem`
44
+ {
45
+ target: c.gem.address,
46
+ callData: utils_2.erc20Iface.encodeFunctionData('balanceOf', [c.pocketAddress]),
47
+ },
48
+ ])
49
+ .flat();
50
+ const res = await multiContract.methods
51
+ .aggregate(callData)
52
+ .call({}, blockNumber);
53
+ let i = 0;
54
+ const result = poolConfigs.map(c => {
55
+ const tin = bigIntify(psmInterface.decodeFunctionResult('tin', res.returnData[i++])[0]);
56
+ const tout = bigIntify(psmInterface.decodeFunctionResult('tout', res.returnData[i++])[0]);
57
+ const ilks = vatInterface.decodeFunctionResult('ilks', res.returnData[i++]);
58
+ const rate = bigIntify(ilks.rate);
59
+ const daiBalance = bigIntify(utils_2.erc20Iface.decodeFunctionResult('balanceOf', res.returnData[i++])[0]);
60
+ const gemBalance = bigIntify(utils_2.erc20Iface.decodeFunctionResult('balanceOf', res.returnData[i++])[0]);
61
+ const response = {
62
+ tin,
63
+ tout,
64
+ daiBalance,
65
+ gemBalance,
66
+ rate,
67
+ };
68
+ return response;
69
+ });
70
+ return result;
71
+ }
72
+ exports.getOnChainState = getOnChainState;
73
+ class LitePsmEventPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
74
+ constructor(parentName, network, dexHelper, logger, poolConfig, vatAddress) {
75
+ super(parentName, poolConfig.identifier, dexHelper, logger);
76
+ this.network = network;
77
+ this.dexHelper = dexHelper;
78
+ this.poolConfig = poolConfig;
79
+ this.vatAddress = vatAddress;
80
+ this.handlers = {};
81
+ this.bytes32Tout = '0x746f757400000000000000000000000000000000000000000000000000000000'; // bytes32('tout')
82
+ this.bytes32Tin = '0x74696e0000000000000000000000000000000000000000000000000000000000'; // bytes32('tin')
83
+ this.daiAddress =
84
+ config_1.LitePsmConfig[this.parentName][this.network].dai.address.toLowerCase();
85
+ this.logDecoder = (log) => {
86
+ const logAddress = log.address.toLowerCase();
87
+ if (logAddress === this.daiAddress) {
88
+ return daiInterface.parseLog(log);
89
+ }
90
+ else if (logAddress === this.poolConfig.gem.address) {
91
+ return usdcInterface.parseLog(log);
92
+ }
93
+ else {
94
+ return psmInterface.parseLog(log);
95
+ }
96
+ };
97
+ this.addressesSubscribed = [
98
+ poolConfig.psmAddress,
99
+ this.daiAddress,
100
+ this.poolConfig.gem.address,
101
+ ];
102
+ this.to18ConversionFactor = (0, utils_1.getBigIntPow)(18 - poolConfig.gem.decimals);
103
+ // Add handlers
104
+ this.handlers['File'] = this.handleFile.bind(this);
105
+ this.handlers['Transfer'] = this.handleTransfer.bind(this);
106
+ }
107
+ handleFile(event, pool, log) {
108
+ if (event.args.what === this.bytes32Tin) {
109
+ pool.tin = bigIntify(event.args.data);
110
+ }
111
+ else if (event.args.what === this.bytes32Tout) {
112
+ pool.tout = bigIntify(event.args.data);
113
+ }
114
+ return pool;
115
+ }
116
+ handleTransfer(event, pool, log) {
117
+ if (log.address.toLowerCase() === this.daiAddress) {
118
+ return this.handleTransferDAI(event, pool, log);
119
+ }
120
+ else if (log.address.toLowerCase() === this.poolConfig.gem.address) {
121
+ return this.handleTransferGEM(event, pool, log);
122
+ }
123
+ return pool;
124
+ }
125
+ handleTransferDAI(event, pool, log) {
126
+ if (event.args?.src?.toLowerCase() === this.poolConfig.psmAddress) {
127
+ pool.daiBalance -= bigIntify(event.args.wad);
128
+ }
129
+ else if (event.args?.dst?.toLowerCase() === this.poolConfig.psmAddress) {
130
+ pool.daiBalance += bigIntify(event.args.wad);
131
+ }
132
+ return pool;
133
+ }
134
+ handleTransferGEM(event, pool, log) {
135
+ if (event.args?.from?.toLowerCase() === this.poolConfig.pocketAddress) {
136
+ pool.gemBalance -= bigIntify(event.args.value);
137
+ }
138
+ else if (event.args?.to?.toLowerCase() === this.poolConfig.pocketAddress) {
139
+ pool.gemBalance += bigIntify(event.args.value);
140
+ }
141
+ return pool;
142
+ }
143
+ getIdentifier() {
144
+ return `${this.parentName}_${this.poolConfig.psmAddress}`.toLowerCase();
145
+ }
146
+ processLog(state, log) {
147
+ try {
148
+ const event = this.logDecoder(log);
149
+ if (event.name in this.handlers) {
150
+ return this.handlers[event.name](event, state, log);
151
+ }
152
+ return state;
153
+ }
154
+ catch (e) {
155
+ this.logger.error(`Error_${this.parentName}_processLog could not parse the log with topic ${log.topics}:`, e);
156
+ return null;
157
+ }
158
+ }
159
+ async generateState(blockNumber) {
160
+ return (await getOnChainState(this.dexHelper.multiContract, [this.poolConfig], this.vatAddress, blockNumber, this.daiAddress))[0];
161
+ }
162
+ }
163
+ exports.LitePsmEventPool = LitePsmEventPool;
164
+ //# sourceMappingURL=lite-psm-event-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lite-psm-event-pool.js","sourceRoot":"","sources":["../../../src/dex/lite-psm/lite-psm-event-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger, NumberAsString, DexExchangeParam, ExchangeTxInfo, PreprocessTransactionOptions } from '../../types';
2
+ import { SwapSide, Network } from '../../constants';
3
+ import { IDex } from '../../dex/idex';
4
+ import { IDexHelper } from '../../dex-helper/idex-helper';
5
+ import { LitePsmData, PoolState, PoolConfig, LitePsmDirectPayload } from './types';
6
+ import { SimpleExchange } from '../simple-exchange';
7
+ import { OptimalSwapExchange } from '@paraswap/core';
8
+ import { LitePsmEventPool } from './lite-psm-event-pool';
9
+ export declare class LitePsm extends SimpleExchange implements IDex<LitePsmData, LitePsmDirectPayload> {
10
+ protected network: Network;
11
+ protected dexHelper: IDexHelper;
12
+ protected dai: Token;
13
+ protected vatAddress: Address;
14
+ protected poolConfigs: PoolConfig[];
15
+ protected eventPools: {
16
+ [gemAddress: string]: LitePsmEventPool;
17
+ };
18
+ readonly hasConstantPriceLargeAmounts = true;
19
+ readonly isFeeOnTransferSupported = false;
20
+ static dexKeysWithNetwork: {
21
+ key: string;
22
+ networks: Network[];
23
+ }[];
24
+ logger: Logger;
25
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, dai?: Token, vatAddress?: Address, poolConfigs?: PoolConfig[]);
26
+ static getDirectFunctionNameV6(): string[];
27
+ initializePricing(blockNumber: number): Promise<void>;
28
+ getAdapters(side: SwapSide): {
29
+ name: string;
30
+ index: number;
31
+ }[] | null;
32
+ getEventPool(srcToken: Token, destToken: Token): LitePsmEventPool | null;
33
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
34
+ getPoolState(pool: LitePsmEventPool, blockNumber: number): Promise<PoolState>;
35
+ computePrices(isSrcDai: boolean, to18ConversionFactor: bigint, side: SwapSide, amounts: bigint[], poolState: PoolState): bigint[];
36
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<LitePsmData>>;
37
+ getCalldataGasCost(poolPrices: PoolPrices<LitePsmData>): number | number[];
38
+ getPsmParams(srcToken: string, srcAmount: string, destAmount: string, data: LitePsmData, side: SwapSide): {
39
+ isGemSell: boolean;
40
+ gemAmount: string;
41
+ };
42
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: LitePsmData, side: SwapSide): AdapterExchangeParam;
43
+ getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: LitePsmData, side: SwapSide): Promise<SimpleExchangeParam>;
44
+ getTokenFromAddress(address: Address): Token;
45
+ preProcessTransaction?(optimalSwapExchange: OptimalSwapExchange<LitePsmData>, srcToken: Token, destToken: Token, side: SwapSide, options: PreprocessTransactionOptions): Promise<[OptimalSwapExchange<LitePsmData>, ExchangeTxInfo]>;
46
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: LitePsmData, side: SwapSide): DexExchangeParam;
47
+ getDirectParamV6(srcToken: Address, destToken: Address, fromAmount: NumberAsString, toAmount: NumberAsString, quotedAmount: NumberAsString, data: LitePsmData, side: SwapSide, permit: string, uuid: string, partnerAndFee: string, beneficiary: string, blockNumber: number, contractMethod: string): {
48
+ params: LitePsmDirectPayload;
49
+ encoder: (...params: (string | LitePsmDirectPayload)[]) => string;
50
+ networkFee: string;
51
+ };
52
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
53
+ }
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.LitePsm = void 0;
30
+ const abi_1 = require("@ethersproject/abi");
31
+ const constants_1 = require("../../constants");
32
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
33
+ const utils_1 = require("../../utils");
34
+ const simple_exchange_1 = require("../simple-exchange");
35
+ const config_1 = require("./config");
36
+ const psm_json_1 = __importDefault(require("../../abi/lite-psm/psm.json"));
37
+ const bigint_constants_1 = require("../../bigint-constants");
38
+ const types_1 = require("../../executor/types");
39
+ const bytes_1 = require("@ethersproject/bytes");
40
+ const core_1 = require("@paraswap/core");
41
+ const ethers_1 = require("ethers");
42
+ const lite_psm_event_pool_1 = require("./lite-psm-event-pool");
43
+ const utils_2 = require("../../executor/utils");
44
+ const psmInterface = new abi_1.Interface(psm_json_1.default);
45
+ const WAD = bigint_constants_1.BI_POWS[18];
46
+ const ceilDiv = (a, b) => (a + b - 1n) / b;
47
+ class LitePsm extends simple_exchange_1.SimpleExchange {
48
+ constructor(network, dexKey, dexHelper, dai = config_1.LitePsmConfig[dexKey][network].dai, vatAddress = config_1.LitePsmConfig[dexKey][network].vatAddress, poolConfigs = config_1.LitePsmConfig[dexKey][network].pools) {
49
+ super(dexHelper, dexKey);
50
+ this.network = network;
51
+ this.dexHelper = dexHelper;
52
+ this.dai = dai;
53
+ this.vatAddress = vatAddress;
54
+ this.poolConfigs = poolConfigs;
55
+ // warning: There is limit on swap
56
+ this.hasConstantPriceLargeAmounts = true;
57
+ this.isFeeOnTransferSupported = false;
58
+ this.logger = dexHelper.getLogger(dexKey);
59
+ this.eventPools = {};
60
+ poolConfigs.forEach(p => (this.eventPools[p.gem.address.toLowerCase()] = new lite_psm_event_pool_1.LitePsmEventPool(dexKey, network, dexHelper, this.logger, p, this.vatAddress)));
61
+ }
62
+ static getDirectFunctionNameV6() {
63
+ return [core_1.ContractMethodV6.swapExactAmountInOutOnMakerPSM];
64
+ }
65
+ async initializePricing(blockNumber) {
66
+ const poolStates = await (0, lite_psm_event_pool_1.getOnChainState)(this.dexHelper.multiContract, this.poolConfigs, this.vatAddress, blockNumber, config_1.LitePsmConfig[this.dexKey][this.network].dai.address);
67
+ await Promise.all(this.poolConfigs.map(async (p, i) => {
68
+ const eventPool = this.eventPools[p.gem.address.toLowerCase()];
69
+ await eventPool.initialize(blockNumber, {
70
+ state: poolStates[i],
71
+ });
72
+ }));
73
+ }
74
+ // Returns the list of contract adapters (name and index)
75
+ // for a buy/sell. Return null if there are no adapters.
76
+ getAdapters(side) {
77
+ return null;
78
+ }
79
+ getEventPool(srcToken, destToken) {
80
+ const srcAddress = srcToken.address.toLowerCase();
81
+ const destAddress = destToken.address.toLowerCase();
82
+ return ((srcAddress === this.dai.address && this.eventPools[destAddress]) ||
83
+ (destAddress === this.dai.address && this.eventPools[srcAddress]) ||
84
+ null);
85
+ }
86
+ // Returns list of pool identifiers that can be used
87
+ // for a given swap. poolIdentifiers must be unique
88
+ // across DEXes.
89
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
90
+ const eventPool = this.getEventPool(srcToken, destToken);
91
+ if (!eventPool)
92
+ return [];
93
+ return [eventPool.getIdentifier()];
94
+ }
95
+ async getPoolState(pool, blockNumber) {
96
+ const eventState = pool.getState(blockNumber);
97
+ if (eventState)
98
+ return eventState;
99
+ const onChainState = await pool.generateState(blockNumber);
100
+ pool.setState(onChainState, blockNumber);
101
+ return onChainState;
102
+ }
103
+ computePrices(isSrcDai, to18ConversionFactor, side, amounts, poolState) {
104
+ const sellGemCheck = (dart) => {
105
+ return dart <= poolState.daiBalance;
106
+ };
107
+ const buyGemCheck = (dart) => {
108
+ return dart <= poolState.gemBalance * to18ConversionFactor;
109
+ };
110
+ return amounts.map(a => {
111
+ if (side === constants_1.SwapSide.SELL) {
112
+ if (isSrcDai) {
113
+ const gemAmt18 = (a * WAD) / (WAD + poolState.tout);
114
+ if (buyGemCheck(gemAmt18))
115
+ return gemAmt18 / to18ConversionFactor;
116
+ }
117
+ else {
118
+ const gemAmt18 = to18ConversionFactor * a;
119
+ if (sellGemCheck(gemAmt18))
120
+ return gemAmt18 - (gemAmt18 * poolState.tin) / WAD;
121
+ }
122
+ }
123
+ else {
124
+ if (isSrcDai) {
125
+ const gemAmt18 = to18ConversionFactor * a;
126
+ if (buyGemCheck(gemAmt18))
127
+ return gemAmt18 + (gemAmt18 * poolState.tout) / WAD;
128
+ }
129
+ else {
130
+ const gemAmt18 = (a * WAD) / (WAD - poolState.tin);
131
+ if (sellGemCheck(gemAmt18))
132
+ return gemAmt18 / to18ConversionFactor;
133
+ }
134
+ }
135
+ return 0n;
136
+ });
137
+ }
138
+ // Returns pool prices for amounts.
139
+ // If limitPools is defined only pools in limitPools
140
+ // should be used. If limitPools is undefined then
141
+ // any pools can be used.
142
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
143
+ const eventPool = this.getEventPool(srcToken, destToken);
144
+ if (!eventPool)
145
+ return null;
146
+ const poolIdentifier = eventPool.getIdentifier();
147
+ if (limitPools && !limitPools.includes(poolIdentifier))
148
+ return null;
149
+ const poolState = await this.getPoolState(eventPool, blockNumber);
150
+ const unitVolume = (0, utils_1.getBigIntPow)((side === constants_1.SwapSide.SELL ? srcToken : destToken).decimals);
151
+ const isSrcDai = srcToken.address.toLowerCase() === this.dai.address;
152
+ const gem = isSrcDai ? destToken : srcToken;
153
+ const toll = (side === constants_1.SwapSide.SELL && isSrcDai) ||
154
+ (side === constants_1.SwapSide.BUY && !isSrcDai)
155
+ ? poolState.tout
156
+ : poolState.tin;
157
+ const [unit, ...prices] = this.computePrices(isSrcDai, eventPool.to18ConversionFactor, side, [unitVolume, ...amounts], poolState);
158
+ return [
159
+ {
160
+ prices,
161
+ unit,
162
+ data: {
163
+ toll: toll.toString(),
164
+ psmAddress: eventPool.poolConfig.psmAddress,
165
+ gemJoinAddress: eventPool.poolConfig.gemJoinAddress,
166
+ gemDecimals: gem.decimals,
167
+ },
168
+ poolAddresses: [eventPool.poolConfig.psmAddress],
169
+ exchange: this.dexKey,
170
+ gasCost: isSrcDai ? 80000 : 100000,
171
+ poolIdentifier,
172
+ },
173
+ ];
174
+ }
175
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
176
+ getCalldataGasCost(poolPrices) {
177
+ return (CALLDATA_GAS_COST.DEX_OVERHEAD +
178
+ CALLDATA_GAS_COST.LENGTH_SMALL +
179
+ CALLDATA_GAS_COST.ADDRESS +
180
+ // TODO: pools have toll as zero currently but may change
181
+ CALLDATA_GAS_COST.ZERO +
182
+ // Either 1 (18 decimals) or 1e12 = 0xe8d4a51000 (6 decimals)
183
+ CALLDATA_GAS_COST.wordNonZeroBytes(poolPrices.data.gemDecimals === 6 ? 4 : 1));
184
+ }
185
+ getPsmParams(srcToken, srcAmount, destAmount, data, side) {
186
+ const isSrcDai = srcToken.toLowerCase() === this.dai.address;
187
+ const to18ConversionFactor = (0, utils_1.getBigIntPow)(18 - data.gemDecimals);
188
+ if (side === constants_1.SwapSide.SELL) {
189
+ if (isSrcDai) {
190
+ const gemAmt18 = (BigInt(srcAmount) * WAD) / (WAD + BigInt(data.toll));
191
+ return {
192
+ isGemSell: false,
193
+ gemAmount: (gemAmt18 / to18ConversionFactor).toString(),
194
+ };
195
+ }
196
+ else {
197
+ return { isGemSell: true, gemAmount: srcAmount };
198
+ }
199
+ }
200
+ else {
201
+ if (isSrcDai) {
202
+ return { isGemSell: false, gemAmount: destAmount };
203
+ }
204
+ else {
205
+ const gemAmt = ceilDiv(BigInt(destAmount) * WAD, (WAD - BigInt(data.toll)) * to18ConversionFactor);
206
+ return {
207
+ isGemSell: true,
208
+ gemAmount: gemAmt.toString(),
209
+ };
210
+ }
211
+ }
212
+ }
213
+ // Encode params required by the exchange adapter
214
+ // Used for multiSwap, buy & megaSwap
215
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
216
+ const to18ConversionFactor = (0, utils_1.getBigIntPow)(18 - data.gemDecimals);
217
+ const payload = this.abiCoder.encodeParameter({
218
+ ParentStruct: {
219
+ gemJoinAddress: 'address',
220
+ toll: 'uint256',
221
+ to18ConversionFactor: 'uint256',
222
+ },
223
+ }, {
224
+ gemJoinAddress: data.gemJoinAddress,
225
+ toll: data.toll,
226
+ to18ConversionFactor,
227
+ });
228
+ return {
229
+ targetExchange: data.psmAddress,
230
+ networkFee: '0',
231
+ payload,
232
+ };
233
+ }
234
+ // Encode call data used by simpleSwap like routers
235
+ // Used for simpleSwap & simpleBuy
236
+ async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
237
+ const { isGemSell, gemAmount } = this.getPsmParams(srcToken, srcAmount, destAmount, data, side);
238
+ const swapData = psmInterface.encodeFunctionData(isGemSell ? 'sellGem' : 'buyGem', [this.augustusAddress, gemAmount]);
239
+ return this.buildSimpleParamWithoutWETHConversion(srcToken, srcAmount, destToken, destAmount, swapData, data.psmAddress, isGemSell ? data.gemJoinAddress : data.psmAddress);
240
+ }
241
+ getTokenFromAddress(address) {
242
+ return { address, decimals: 0 };
243
+ }
244
+ async preProcessTransaction(optimalSwapExchange, srcToken, destToken, side, options) {
245
+ if (!optimalSwapExchange.data) {
246
+ throw new Error(`Error_${this.dexKey}_preProcessTransaction payload is not received`);
247
+ }
248
+ let isApproved = false;
249
+ // isApproved is only used in direct method and available only for v6, then no need to check approve for v5
250
+ // because it's either done in getSimpleParam or approve call in the adapter smart contract
251
+ if (options.version === core_1.ParaSwapVersion.V6 && options.isDirectMethod) {
252
+ isApproved = await this.dexHelper.augustusApprovals.hasApproval(options.executionContractAddress, srcToken.address, srcToken.address.toLowerCase() === this.dai.address.toLowerCase()
253
+ ? optimalSwapExchange.data.psmAddress
254
+ : optimalSwapExchange.data.gemJoinAddress);
255
+ }
256
+ return [
257
+ {
258
+ ...optimalSwapExchange,
259
+ data: { ...optimalSwapExchange.data, isApproved },
260
+ },
261
+ {},
262
+ ];
263
+ }
264
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
265
+ const { isGemSell, gemAmount } = this.getPsmParams(srcToken, srcAmount, destAmount, data, side);
266
+ let exchangeData = psmInterface.encodeFunctionData(isGemSell ? 'sellGem' : 'buyGem', [recipient, gemAmount]);
267
+ // append toll and to18ConversionFactor & set specialDexFlag = SWAP_ON_MAKER_PSM to
268
+ // - `buyGem` on Ex1 & Ex2
269
+ // - `sellGem` on Ex3
270
+ let specialDexFlag = types_1.SpecialDex.DEFAULT;
271
+ if ((side === constants_1.SwapSide.SELL && !isGemSell) ||
272
+ (side === constants_1.SwapSide.BUY && isGemSell)) {
273
+ exchangeData = (0, bytes_1.hexConcat)([
274
+ exchangeData,
275
+ (0, bytes_1.hexZeroPad)((0, bytes_1.hexlify)(BigInt(data.toll)), 32),
276
+ (0, bytes_1.hexZeroPad)((0, bytes_1.hexlify)((0, utils_1.getBigIntPow)(18 - data.gemDecimals)), 32),
277
+ ]);
278
+ specialDexFlag = types_1.SpecialDex.SWAP_ON_MAKER_PSM;
279
+ }
280
+ return {
281
+ needWrapNative: this.needWrapNative,
282
+ dexFuncHasRecipient: true,
283
+ exchangeData,
284
+ targetExchange: data.psmAddress,
285
+ specialDexFlag,
286
+ spender: isGemSell ? data.gemJoinAddress : data.psmAddress,
287
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(psmInterface, isGemSell ? 'sellGem' : 'buyGem', isGemSell ? 'daiOutWad' : 'daiInWad'),
288
+ };
289
+ }
290
+ getDirectParamV6(srcToken, destToken, fromAmount, toAmount, quotedAmount, data, side, permit, uuid, partnerAndFee, beneficiary, blockNumber, contractMethod) {
291
+ if (!contractMethod)
292
+ throw new Error(`contractMethod need to be passed`);
293
+ if (!LitePsm.getDirectFunctionNameV6().includes(contractMethod)) {
294
+ throw new Error(`Invalid contract method ${contractMethod}`);
295
+ }
296
+ const beneficiaryParam = ethers_1.BigNumber.from(beneficiary);
297
+ const approveParam = !data.isApproved
298
+ ? ethers_1.BigNumber.from(1).shl(255)
299
+ : ethers_1.BigNumber.from(0);
300
+ const directionParam = side === constants_1.SwapSide.SELL ? ethers_1.BigNumber.from(0) : ethers_1.BigNumber.from(1).shl(254);
301
+ const beneficiaryDirectionApproveFlag = beneficiaryParam
302
+ .or(directionParam)
303
+ .or(approveParam);
304
+ const to18ConversionFactor = (0, utils_1.getBigIntPow)(18 - data.gemDecimals);
305
+ const metadata = (0, bytes_1.hexConcat)([
306
+ (0, bytes_1.hexZeroPad)((0, utils_1.uuidToBytes16)(uuid), 16),
307
+ (0, bytes_1.hexZeroPad)((0, bytes_1.hexlify)(blockNumber), 16),
308
+ ]);
309
+ const params = [
310
+ srcToken,
311
+ // not used on the contract, but used for analytics
312
+ destToken,
313
+ fromAmount,
314
+ toAmount,
315
+ data.toll,
316
+ to18ConversionFactor.toString(),
317
+ data.psmAddress,
318
+ data.gemJoinAddress,
319
+ metadata,
320
+ beneficiaryDirectionApproveFlag.toString(),
321
+ ];
322
+ const payload = [params, permit];
323
+ const encoder = (...params) => {
324
+ return this.augustusV6Interface.encodeFunctionData(core_1.ContractMethodV6.swapExactAmountInOutOnMakerPSM, [...params]);
325
+ };
326
+ return { params: payload, encoder, networkFee: '0' };
327
+ }
328
+ // Returns list of top pools based on liquidity. Max
329
+ // limit number pools should be returned.
330
+ async getTopPoolsForToken(tokenAddress, limit) {
331
+ const _tokenAddress = tokenAddress.toLowerCase();
332
+ // Liquidity depends on the swapping side hence we simply use the min
333
+ // Its always in terms of stable coin hence liquidityUSD = liquidity
334
+ const minLiq = (poolState, decimals) => {
335
+ const buyLimit = poolState.gemBalance * (0, utils_1.getBigIntPow)(18 - decimals);
336
+ const sellLimit = poolState.daiBalance;
337
+ return (2 *
338
+ parseInt(((buyLimit > sellLimit ? sellLimit : buyLimit) / bigint_constants_1.BI_POWS[18]).toString()));
339
+ };
340
+ const isDai = _tokenAddress === this.dai.address;
341
+ const validPoolConfigs = isDai
342
+ ? this.poolConfigs
343
+ : this.eventPools[_tokenAddress]
344
+ ? [this.eventPools[_tokenAddress].poolConfig]
345
+ : [];
346
+ if (!validPoolConfigs.length)
347
+ return [];
348
+ // const poolStates = await getOnChainState(
349
+ // this.dexHelper.multiContract,
350
+ // validPoolConfigs,
351
+ // this.vatAddress,
352
+ // 'latest',
353
+ // );
354
+ const blockNumber = this.dexHelper.blockManager.getLatestBlockNumber();
355
+ const poolStates = await Promise.all(Object.values(this.eventPools).map(e => this.getPoolState(e, blockNumber)));
356
+ return validPoolConfigs.map((p, i) => ({
357
+ exchange: this.dexKey,
358
+ address: p.psmAddress,
359
+ liquidityUSD: minLiq(poolStates[i], p.gem.decimals),
360
+ connectorTokens: [isDai ? p.gem : this.dai],
361
+ }));
362
+ }
363
+ }
364
+ exports.LitePsm = LitePsm;
365
+ LitePsm.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.LitePsmConfig);
366
+ //# sourceMappingURL=lite-psm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lite-psm.js","sourceRoot":"","sources":["../../../src/dex/lite-psm/lite-psm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA+C;AAgB/C,+CAAkE;AAClE,2EAA6D;AAC7D,uCAIqB;AAUrB,wDAAoD;AACpD,qCAAyC;AACzC,2EAAiD;AACjD,6DAAiD;AACjD,gDAAkD;AAClD,gDAAsE;AACtE,yCAIwB;AACxB,mCAAmC;AACnC,+DAA0E;AAC1E,gDAAmE;AAEnE,MAAM,YAAY,GAAG,IAAI,eAAS,CAAC,kBAAM,CAAC,CAAC;AAC3C,MAAM,GAAG,GAAG,0BAAO,CAAC,EAAE,CAAC,CAAC;AAExB,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAE3D,MAAa,OACX,SAAQ,gCAAc;IActB,YACY,OAAgB,EAC1B,MAAc,EACJ,SAAqB,EACrB,MAAa,sBAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAC/C,aAAsB,sBAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAC/D,cAA4B,sBAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK;QAE1E,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAPf,YAAO,GAAP,OAAO,CAAS;QAEhB,cAAS,GAAT,SAAS,CAAY;QACrB,QAAG,GAAH,GAAG,CAA4C;QAC/C,eAAU,GAAV,UAAU,CAAqD;QAC/D,gBAAW,GAAX,WAAW,CAAqD;QAf5E,kCAAkC;QACzB,iCAA4B,GAAG,IAAI,CAAC;QACpC,6BAAwB,GAAG,KAAK,CAAC;QAgBxC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,WAAW,CAAC,OAAO,CACjB,CAAC,CAAC,EAAE,CACF,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,sCAAgB,CAClE,MAAM,EACN,OAAO,EACP,SAAS,EACT,IAAI,CAAC,MAAM,EACX,CAAC,EACD,IAAI,CAAC,UAAU,CAChB,CAAC,CACL,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,uBAAuB;QAC5B,OAAO,CAAC,uBAAgB,CAAC,8BAA8B,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,UAAU,GAAG,MAAM,IAAA,qCAAe,EACtC,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,WAAW,EACX,sBAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CACrD,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/D,MAAM,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE;gBACtC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,wDAAwD;IACxD,WAAW,CAAC,IAAc;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,QAAe,EAAE,SAAgB;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACpD,OAAO,CACL,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACjE,CAAC,WAAW,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,CACL,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,mDAAmD;IACnD,gBAAgB;IAChB,KAAK,CAAC,kBAAkB,CACtB,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,WAAmB;QAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,IAAsB,EACtB,WAAmB;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAClC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACzC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,aAAa,CACX,QAAiB,EACjB,oBAA4B,EAC5B,IAAc,EACd,OAAiB,EACjB,SAAoB;QAEpB,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;YACpC,OAAO,IAAI,IAAI,SAAS,CAAC,UAAU,CAAC;QACtC,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE;YACnC,OAAO,IAAI,IAAI,SAAS,CAAC,UAAU,GAAG,oBAAoB,CAAC;QAC7D,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACrB,IAAI,IAAI,KAAK,oBAAQ,CAAC,IAAI,EAAE;gBAC1B,IAAI,QAAQ,EAAE;oBACZ,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;oBACpD,IAAI,WAAW,CAAC,QAAQ,CAAC;wBAAE,OAAO,QAAQ,GAAG,oBAAoB,CAAC;iBACnE;qBAAM;oBACL,MAAM,QAAQ,GAAG,oBAAoB,GAAG,CAAC,CAAC;oBAC1C,IAAI,YAAY,CAAC,QAAQ,CAAC;wBACxB,OAAO,QAAQ,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;iBACtD;aACF;iBAAM;gBACL,IAAI,QAAQ,EAAE;oBACZ,MAAM,QAAQ,GAAG,oBAAoB,GAAG,CAAC,CAAC;oBAC1C,IAAI,WAAW,CAAC,QAAQ,CAAC;wBACvB,OAAO,QAAQ,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;iBACvD;qBAAM;oBACL,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnD,IAAI,YAAY,CAAC,QAAQ,CAAC;wBAAE,OAAO,QAAQ,GAAG,oBAAoB,CAAC;iBACpE;aACF;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,oDAAoD;IACpD,kDAAkD;IAClD,yBAAyB;IACzB,KAAK,CAAC,eAAe,CACnB,QAAe,EACf,SAAgB,EAChB,OAAiB,EACjB,IAAc,EACd,WAAmB,EACnB,UAAqB;QAErB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,cAAc,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;QACjD,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,IAAI,CAAC;QAEpE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAElE,MAAM,UAAU,GAAG,IAAA,oBAAY,EAC7B,CAAC,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CACzD,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QACrE,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5C,MAAM,IAAI,GACR,CAAC,IAAI,KAAK,oBAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;YACpC,CAAC,IAAI,KAAK,oBAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClC,CAAC,CAAC,SAAS,CAAC,IAAI;YAChB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;QAEpB,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAC1C,QAAQ,EACR,SAAS,CAAC,oBAAoB,EAC9B,IAAI,EACJ,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,EACxB,SAAS,CACV,CAAC;QAEF,OAAO;YACL;gBACE,MAAM;gBACN,IAAI;gBACJ,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;oBACrB,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU;oBAC3C,cAAc,EAAE,SAAS,CAAC,UAAU,CAAC,cAAc;oBACnD,WAAW,EAAE,GAAG,CAAC,QAAQ;iBAC1B;gBACD,aAAa,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;gBAChD,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC,MAAO;gBACpC,cAAc;aACf;SACF,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,kBAAkB,CAAC,UAAmC;QACpD,OAAO,CACL,iBAAiB,CAAC,YAAY;YAC9B,iBAAiB,CAAC,YAAY;YAC9B,iBAAiB,CAAC,OAAO;YACzB,yDAAyD;YACzD,iBAAiB,CAAC,IAAI;YACtB,6DAA6D;YAC7D,iBAAiB,CAAC,gBAAgB,CAChC,UAAU,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1C,CACF,CAAC;IACJ,CAAC;IAED,YAAY,CACV,QAAgB,EAChB,SAAiB,EACjB,UAAkB,EAClB,IAAiB,EACjB,IAAc;QAEd,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7D,MAAM,oBAAoB,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,IAAI,KAAK,oBAAQ,CAAC,IAAI,EAAE;YAC1B,IAAI,QAAQ,EAAE;gBACZ,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvE,OAAO;oBACL,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,CAAC,QAAQ,GAAG,oBAAoB,CAAC,CAAC,QAAQ,EAAE;iBACxD,CAAC;aACH;iBAAM;gBACL,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;aAClD;SACF;aAAM;YACL,IAAI,QAAQ,EAAE;gBACZ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;aACpD;iBAAM;gBACL,MAAM,MAAM,GAAG,OAAO,CACpB,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,EACxB,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,oBAAoB,CACjD,CAAC;gBACF,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE;iBAC7B,CAAC;aACH;SACF;IACH,CAAC;IAED,iDAAiD;IACjD,qCAAqC;IACrC,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAiB,EACjB,IAAc;QAEd,MAAM,oBAAoB,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAC3C;YACE,YAAY,EAAE;gBACZ,cAAc,EAAE,SAAS;gBACzB,IAAI,EAAE,SAAS;gBACf,oBAAoB,EAAE,SAAS;aAChC;SACF,EACD;YACE,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,oBAAoB;SACrB,CACF,CAAC;QAEF,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,UAAU;YAC/B,UAAU,EAAE,GAAG;YACf,OAAO;SACR,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,kCAAkC;IAClC,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAiB,EACjB,IAAc;QAEd,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,YAAY,CAChD,QAAQ,EACR,SAAS,EACT,UAAU,EACV,IAAI,EACJ,IAAI,CACL,CAAC;QAEF,MAAM,QAAQ,GAAG,YAAY,CAAC,kBAAkB,CAC9C,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAChC,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAClC,CAAC;QAEF,OAAO,IAAI,CAAC,qCAAqC,CAC/C,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,IAAI,CAAC,UAAU,EACf,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAClD,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAgB;QAClC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,mBAAqD,EACrD,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,OAAqC;QAErC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;YAC7B,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,CAAC,MAAM,gDAAgD,CACrE,CAAC;SACH;QAED,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,2GAA2G;QAC3G,2FAA2F;QAC3F,IAAI,OAAO,CAAC,OAAO,KAAK,sBAAe,CAAC,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE;YACpE,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,WAAW,CAC7D,OAAO,CAAC,wBAAwB,EAChC,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE;gBAC/D,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU;gBACrC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAC5C,CAAC;SACH;QAED,OAAO;YACL;gBACE,GAAG,mBAAmB;gBACtB,IAAI,EAAE,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE;aAClD;YACD,EAAE;SACH,CAAC;IACJ,CAAC;IAED,WAAW,CACT,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAiB,EACjB,IAAc;QAEd,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,YAAY,CAChD,QAAQ,EACR,SAAS,EACT,UAAU,EACV,IAAI,EACJ,IAAI,CACL,CAAC;QAEF,IAAI,YAAY,GAAG,YAAY,CAAC,kBAAkB,CAChD,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAChC,CAAC,SAAS,EAAE,SAAS,CAAC,CACvB,CAAC;QAEF,mFAAmF;QACnF,0BAA0B;QAC1B,qBAAqB;QACrB,IAAI,cAAc,GAAG,kBAAU,CAAC,OAAO,CAAC;QACxC,IACE,CAAC,IAAI,KAAK,oBAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;YACtC,CAAC,IAAI,KAAK,oBAAQ,CAAC,GAAG,IAAI,SAAS,CAAC,EACpC;YACA,YAAY,GAAG,IAAA,iBAAS,EAAC;gBACvB,YAAY;gBACZ,IAAA,kBAAU,EAAC,IAAA,eAAO,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1C,IAAA,kBAAU,EAAC,IAAA,eAAO,EAAC,IAAA,oBAAY,EAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC;aAC7D,CAAC,CAAC;YACH,cAAc,GAAG,kBAAU,CAAC,iBAAiB,CAAC;SAC/C;QAED,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB,EAAE,IAAI;YACzB,YAAY;YACZ,cAAc,EAAE,IAAI,CAAC,UAAU;YAC/B,cAAc;YACd,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU;YAC1D,eAAe,EAAE,IAAA,mCAA2B,EAC1C,YAAY,EACZ,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAChC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CACrC;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB,CACd,QAAiB,EACjB,SAAkB,EAClB,UAA0B,EAC1B,QAAwB,EACxB,YAA4B,EAC5B,IAAiB,EACjB,IAAc,EACd,MAAc,EACd,IAAY,EACZ,aAAqB,EACrB,WAAmB,EACnB,WAAmB,EACnB,cAAsB;QAEtB,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,QAAQ,CAAC,cAAe,CAAC,EAAE;YAChE,MAAM,IAAI,KAAK,CAAC,2BAA2B,cAAc,EAAE,CAAC,CAAC;SAC9D;QAED,MAAM,gBAAgB,GAAG,kBAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAErD,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,UAAU;YACnC,CAAC,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YAC5B,CAAC,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,cAAc,GAClB,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE1E,MAAM,+BAA+B,GAAG,gBAAgB;aACrD,EAAE,CAAC,cAAc,CAAC;aAClB,EAAE,CAAC,YAAY,CAAC,CAAC;QAEpB,MAAM,oBAAoB,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjE,MAAM,QAAQ,GAAG,IAAA,iBAAS,EAAC;YACzB,IAAA,kBAAU,EAAC,IAAA,qBAAa,EAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACnC,IAAA,kBAAU,EAAC,IAAA,eAAO,EAAC,WAAW,CAAC,EAAE,EAAE,CAAC;SACrC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAkB;YAC5B,QAAQ;YACR,mDAAmD;YACnD,SAAS;YACT,UAAU;YACV,QAAQ;YACR,IAAI,CAAC,IAAI;YACT,oBAAoB,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,cAAc;YACnB,QAAQ;YACR,+BAA+B,CAAC,QAAQ,EAAE;SAC3C,CAAC;QAEF,MAAM,OAAO,GAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,CAAC,GAAG,MAAyC,EAAE,EAAE;YAC/D,OAAO,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAChD,uBAAgB,CAAC,8BAA8B,EAC/C,CAAC,GAAG,MAAM,CAAC,CACZ,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACvD,CAAC;IAED,oDAAoD;IACpD,yCAAyC;IACzC,KAAK,CAAC,mBAAmB,CACvB,YAAqB,EACrB,KAAa;QAEb,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QACjD,qEAAqE;QACrE,oEAAoE;QACpE,MAAM,MAAM,GAAG,CAAC,SAAoB,EAAE,QAAgB,EAAE,EAAE;YACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC;YACvC,OAAO,CACL,CAAC;gBACD,QAAQ,CACN,CACE,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,0BAAO,CAAC,EAAE,CAAC,CAC5D,CAAC,QAAQ,EAAE,CACb,CACF,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,aAAa,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAEjD,MAAM,gBAAgB,GAAG,KAAK;YAC5B,CAAC,CAAC,IAAI,CAAC,WAAW;YAClB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;gBAChC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC;gBAC7C,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,gBAAgB,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAExC,4CAA4C;QAC5C,kCAAkC;QAClC,sBAAsB;QACtB,qBAAqB;QACrB,cAAc;QACd,KAAK;QACL,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;QACvE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACrC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC,CAClC,CACF,CAAC;QACF,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,OAAO,EAAE,CAAC,CAAC,UAAU;YACrB,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnD,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SAC5C,CAAC,CAAC,CAAC;IACN,CAAC;;AA1gBH,0BA2gBC;AAjgBe,0BAAkB,GAC9B,IAAA,6BAAqB,EAAC,sBAAa,CAAC,CAAC"}