@black-market/sdk 0.14.1 → 0.15.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 (103) hide show
  1. package/README.md +9 -7
  2. package/dist/lifecycle/authors.js +2 -2
  3. package/dist/lifecycle/authors.js.map +1 -1
  4. package/dist/lifecycle/auto-compound.d.ts +21 -0
  5. package/dist/lifecycle/auto-compound.d.ts.map +1 -0
  6. package/dist/lifecycle/auto-compound.js +34 -0
  7. package/dist/lifecycle/auto-compound.js.map +1 -0
  8. package/dist/lifecycle/calibration.d.ts +2 -4
  9. package/dist/lifecycle/calibration.d.ts.map +1 -1
  10. package/dist/lifecycle/calibration.js +1 -26
  11. package/dist/lifecycle/calibration.js.map +1 -1
  12. package/dist/lifecycle/deployments/auto-compound-dynamic-pool-v1-20261028.d.ts +73 -0
  13. package/dist/lifecycle/deployments/auto-compound-dynamic-pool-v1-20261028.d.ts.map +1 -0
  14. package/dist/lifecycle/deployments/auto-compound-dynamic-pool-v1-20261028.js +75 -0
  15. package/dist/lifecycle/deployments/auto-compound-dynamic-pool-v1-20261028.js.map +1 -0
  16. package/dist/lifecycle/deployments/auto-compound-static-pool-v1-20261028.d.ts +73 -0
  17. package/dist/lifecycle/deployments/auto-compound-static-pool-v1-20261028.d.ts.map +1 -0
  18. package/dist/lifecycle/deployments/auto-compound-static-pool-v1-20261028.js +75 -0
  19. package/dist/lifecycle/deployments/auto-compound-static-pool-v1-20261028.js.map +1 -0
  20. package/dist/lifecycle/gas-profile.d.ts +39 -0
  21. package/dist/lifecycle/gas-profile.d.ts.map +1 -0
  22. package/dist/lifecycle/gas-profile.js +193 -0
  23. package/dist/lifecycle/gas-profile.js.map +1 -0
  24. package/dist/lifecycle/index.d.ts +6 -4
  25. package/dist/lifecycle/index.d.ts.map +1 -1
  26. package/dist/lifecycle/index.js +6 -4
  27. package/dist/lifecycle/index.js.map +1 -1
  28. package/dist/lifecycle/markets.d.ts +2 -0
  29. package/dist/lifecycle/markets.d.ts.map +1 -1
  30. package/dist/lifecycle/markets.js +30 -3
  31. package/dist/lifecycle/markets.js.map +1 -1
  32. package/dist/lifecycle/opening-buys.d.ts +13 -0
  33. package/dist/lifecycle/opening-buys.d.ts.map +1 -0
  34. package/dist/lifecycle/opening-buys.js +171 -0
  35. package/dist/lifecycle/opening-buys.js.map +1 -0
  36. package/dist/lifecycle/planner.d.ts +6 -9
  37. package/dist/lifecycle/planner.d.ts.map +1 -1
  38. package/dist/lifecycle/planner.js +175 -265
  39. package/dist/lifecycle/planner.js.map +1 -1
  40. package/dist/lifecycle/presets.d.ts +10 -3
  41. package/dist/lifecycle/presets.d.ts.map +1 -1
  42. package/dist/lifecycle/presets.js +13 -1
  43. package/dist/lifecycle/presets.js.map +1 -1
  44. package/dist/lifecycle/progress.d.ts +1 -1
  45. package/dist/lifecycle/progress.d.ts.map +1 -1
  46. package/dist/lifecycle/progress.js +21 -20
  47. package/dist/lifecycle/progress.js.map +1 -1
  48. package/dist/lifecycle/rpc.d.ts +25 -30
  49. package/dist/lifecycle/rpc.d.ts.map +1 -1
  50. package/dist/lifecycle/rpc.js +63 -81
  51. package/dist/lifecycle/rpc.js.map +1 -1
  52. package/dist/lifecycle/snapshot.d.ts.map +1 -1
  53. package/dist/lifecycle/snapshot.js +2 -4
  54. package/dist/lifecycle/snapshot.js.map +1 -1
  55. package/dist/lifecycle/transactions.d.ts +29 -6
  56. package/dist/lifecycle/transactions.d.ts.map +1 -1
  57. package/dist/lifecycle/transactions.js +62 -27
  58. package/dist/lifecycle/transactions.js.map +1 -1
  59. package/dist/lifecycle/types.d.ts +55 -122
  60. package/dist/lifecycle/types.d.ts.map +1 -1
  61. package/dist/lifecycle/types.js +3 -3
  62. package/dist/lifecycle/types.js.map +1 -1
  63. package/dist/lifecycle/ufg.d.ts +1 -1
  64. package/dist/lifecycle/ufg.d.ts.map +1 -1
  65. package/dist/lifecycle/ufg.js +4 -8
  66. package/dist/lifecycle/ufg.js.map +1 -1
  67. package/docs/launch-lifecycle.md +110 -78
  68. package/docs/lifecycle-gas-profiles.md +90 -0
  69. package/docs/reference.md +99 -47
  70. package/examples/.env.example +0 -3
  71. package/examples/README.md +14 -11
  72. package/examples/launch-example-support.ts +4 -9
  73. package/examples/launch-example.ts +30 -36
  74. package/examples/launch-lifecycle-smoke.ts +11 -21
  75. package/examples/launch.ts +8 -11
  76. package/package.json +1 -1
  77. package/src/lifecycle/authors.ts +2 -2
  78. package/src/lifecycle/auto-compound.ts +38 -0
  79. package/src/lifecycle/calibration.ts +3 -23
  80. package/src/lifecycle/deployments/auto-compound-dynamic-pool-v1-20261028.ts +77 -0
  81. package/src/lifecycle/deployments/auto-compound-static-pool-v1-20261028.ts +77 -0
  82. package/src/lifecycle/gas-profile.ts +186 -0
  83. package/src/lifecycle/index.ts +6 -4
  84. package/src/lifecycle/markets.ts +25 -3
  85. package/src/lifecycle/opening-buys.ts +157 -0
  86. package/src/lifecycle/planner.ts +168 -247
  87. package/src/lifecycle/presets.ts +15 -1
  88. package/src/lifecycle/progress.ts +19 -20
  89. package/src/lifecycle/rpc.ts +58 -68
  90. package/src/lifecycle/snapshot.ts +2 -4
  91. package/src/lifecycle/transactions.ts +69 -27
  92. package/src/lifecycle/types.ts +60 -99
  93. package/src/lifecycle/ufg.ts +4 -8
  94. package/dist/lifecycle/fork.d.ts +0 -15
  95. package/dist/lifecycle/fork.d.ts.map +0 -1
  96. package/dist/lifecycle/fork.js +0 -36
  97. package/dist/lifecycle/fork.js.map +0 -1
  98. package/dist/lifecycle/simulation.d.ts +0 -18
  99. package/dist/lifecycle/simulation.d.ts.map +0 -1
  100. package/dist/lifecycle/simulation.js +0 -754
  101. package/dist/lifecycle/simulation.js.map +0 -1
  102. package/src/lifecycle/fork.ts +0 -36
  103. package/src/lifecycle/simulation.ts +0 -689
@@ -0,0 +1,73 @@
1
+ import type { Hex } from "viem";
2
+ export declare const autoCompoundStaticEnvelope: Readonly<{
3
+ artifactDigest: "0x2c7bd199217fedf96a5b83d3ae3d630589eee86756c3a33bcc9a8d5e35efdc52";
4
+ reviewManifestDigest: "0x1474f959f6068b1cfcb90aa8106612d62476a271eb04c25df8debd442d03a07b";
5
+ configBoundsDigest: "0x72e0b2d542556d472a47f9c38b2c91079c72793af847dee77933f0eca203129d";
6
+ termsDigest: "0x4188f7e1087ad7963ffc94062345b27a7f3e497cb67c3e163d0b36973db993da";
7
+ topology: 2;
8
+ configVersion: 6;
9
+ economicVersion: 3;
10
+ capabilities: 123n;
11
+ flags: 0n;
12
+ callbackFlags: 6908;
13
+ callbackMask: 16383;
14
+ protocolTreasury: "0x961981916AB6575C3af3eeCecbf6A3b7Fad7C9e1";
15
+ protocolFeeDenominator: 6;
16
+ beneficiary: "0x7cb44b8693b3C350A2BcD4b681aF85365aa27783";
17
+ maximumDeveloperFeeBps: 0;
18
+ bounds: Readonly<{
19
+ minimumTickSpacing: 1;
20
+ maximumTickSpacing: 32767;
21
+ maximumPositions: 32;
22
+ maximumOracleCardinality: 4096;
23
+ feeModeFlags: 3;
24
+ }>;
25
+ graph: Readonly<{
26
+ manager: "0x8366a39CC670B4001A1121B8F6A443A643e40951";
27
+ hookRoot: "0x0000000000000000000000000000000000000000";
28
+ oracleFactory: "0xe7feF2BC860B25bbdEB6F6AB96d88bAAa77ddad7";
29
+ locker: "0x0EB419d291ABc5f643ACb5B6035236DF231e479D";
30
+ collectorFactory: "0x1D93705968DD03A27d86cb1590889882153ac0aF";
31
+ collectorDeployer: "0x1B256029541eE5beF2dB363211A7a05f9C36C18C";
32
+ hookDeployer: "0x78811B0b1Bb0F0f896e65C539c5bc62C4d33FbE2";
33
+ coreCodeHash: "0x9fb8f46c3b980b9db25dfdb487a69a308a86be145860269b4036a4e74480787b";
34
+ managerCodeHash: "0xbd3881180b547f5fe817545743cfb4343e96b1bc6640dcd70c106b0066e95626";
35
+ hookRuntimeCodeHash: "0x0000000000000000000000000000000000000000000000000000000000000000";
36
+ oracleFactoryCodeHash: "0x974fb5c72d91ccb99f1eb4679a5d4432c82bbaa0906b1c2917ec4da3499b7b98";
37
+ lockerCodeHash: "0x5b11a5a42678c8da4c075ed9eb336113ac6d70e9adf43346bd586d6754dd0a63";
38
+ collectorFactoryCodeHash: "0xc1164680edec0a76d45b78d5d4e6ac11ccf1bb4e3e52999080beda989c987023";
39
+ collectorDeployerCodeHash: "0x5260583f372e6e60c6f2c9bab628f499c5d17551c714f85fc4555ba12cf11f5d";
40
+ hookDeployerCodeHash: "0xdd59bd8dae0acd396e0e276e50681278c5cb4f766d2e342fefaf001c75d4bbc5";
41
+ hookCreationCodeHash: "0x2c7bd199217fedf96a5b83d3ae3d630589eee86756c3a33bcc9a8d5e35efdc52";
42
+ codeChunk0: "0x0Ba427F55DcC0F2af6605c7095b8C2E6FE7C99bd";
43
+ codeChunk0Hash: "0x03b5f35b8e44b4f3fedd729a277e935de3b69edd4d23ad39726a0bab7aa1b39d";
44
+ codeChunk1: "0x86431579Fb52d1BE1f96Fb721daF853dB49cdAC2";
45
+ codeChunk1Hash: "0x2d752704dc0fdc33b6b820d4d8466615e8f1076363b700dc0b78f729bd2bc7b0";
46
+ sharedHookSalt: "0x0000000000000000000000000000000000000000000000000000000000000000";
47
+ }>;
48
+ }>;
49
+ export declare const autoCompoundStaticAdapter: Readonly<{
50
+ implementation: "0xAE70e5acB118eade1ddF97A86a8eF681d5b71686";
51
+ codeHash: "0xd67ee6b00dea01568d1da2dd805af85da34c92c0ba5bd1b2b2c2913fa8015f3b";
52
+ capabilities: 123n;
53
+ configVersion: 6;
54
+ enabled: true;
55
+ }>;
56
+ export declare const autoCompoundStaticRegistration: Readonly<{
57
+ adapterId: "0x47f9efabc7c0427db5166ecf11702e0e0d2ca307a475d015d400a1584e572bc5";
58
+ configSchema: "0x51c5ca14c40012f78425cd1afb1ea77980da3fed0490a00911a8a4ed34792045";
59
+ dependencyDigest: "0x0fe998eb31c2efc79c7e2f3d48ca1ff141a7b6fde408eb21b16639c359cf7d04";
60
+ venue: "0x8366a39CC670B4001A1121B8F6A443A643e40951";
61
+ factory: "0x0000000000000000000000000000000000000000";
62
+ hook: "0x0000000000000000000000000000000000000000";
63
+ capabilities: 123n;
64
+ enabled: true;
65
+ }>;
66
+ export declare const autoCompoundStaticTopology: Readonly<{
67
+ hookTopology: 2;
68
+ configVersion: 6;
69
+ hookDeployer: "0x78811B0b1Bb0F0f896e65C539c5bc62C4d33FbE2";
70
+ hookCreationCodeHash: "0x2c7bd199217fedf96a5b83d3ae3d630589eee86756c3a33bcc9a8d5e35efdc52";
71
+ }>;
72
+ export declare const autoCompoundStaticCreationCode: Hex;
73
+ //# sourceMappingURL=auto-compound-static-pool-v1-20261028.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-compound-static-pool-v1-20261028.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/deployments/auto-compound-static-pool-v1-20261028.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAKhC,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CV,CAAC;AAC9B,eAAO,MAAM,yBAAyB;;;;;;EAMJ,CAAC;AACnC,eAAO,MAAM,8BAA8B;;;;;;;;;EAST,CAAC;AACnC,eAAO,MAAM,0BAA0B;;;;;EAKT,CAAC;AAE/B,eAAO,MAAM,8BAA8B,EAAE,GAA4yvD,CAAC"}
@@ -0,0 +1,75 @@
1
+ // Generated by scripts/generate-auto-compound-presets.mjs from admission and registry readback.
2
+ // Robinhood block 100486085, 0xa41849e3e83fb977ed2fbfc7ff71c639bdf1fc34489dc46878128c021fdb6c44; admission 0x4f5c6614a186c05645d94e1a660390e9536b3c1a5624fa1f0a97762e2e451601.
3
+ export const autoCompoundStaticEnvelope = Object.freeze({
4
+ artifactDigest: "0x2c7bd199217fedf96a5b83d3ae3d630589eee86756c3a33bcc9a8d5e35efdc52",
5
+ reviewManifestDigest: "0x1474f959f6068b1cfcb90aa8106612d62476a271eb04c25df8debd442d03a07b",
6
+ configBoundsDigest: "0x72e0b2d542556d472a47f9c38b2c91079c72793af847dee77933f0eca203129d",
7
+ termsDigest: "0x4188f7e1087ad7963ffc94062345b27a7f3e497cb67c3e163d0b36973db993da",
8
+ topology: 2,
9
+ configVersion: 6,
10
+ economicVersion: 3,
11
+ capabilities: 123n,
12
+ flags: 0n,
13
+ callbackFlags: 6908,
14
+ callbackMask: 16383,
15
+ protocolTreasury: "0x961981916AB6575C3af3eeCecbf6A3b7Fad7C9e1",
16
+ protocolFeeDenominator: 6,
17
+ beneficiary: "0x7cb44b8693b3C350A2BcD4b681aF85365aa27783",
18
+ maximumDeveloperFeeBps: 0,
19
+ bounds: Object.freeze({
20
+ minimumTickSpacing: 1,
21
+ maximumTickSpacing: 32767,
22
+ maximumPositions: 32,
23
+ maximumOracleCardinality: 4096,
24
+ feeModeFlags: 3,
25
+ }),
26
+ graph: Object.freeze({
27
+ manager: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
28
+ hookRoot: "0x0000000000000000000000000000000000000000",
29
+ oracleFactory: "0xe7feF2BC860B25bbdEB6F6AB96d88bAAa77ddad7",
30
+ locker: "0x0EB419d291ABc5f643ACb5B6035236DF231e479D",
31
+ collectorFactory: "0x1D93705968DD03A27d86cb1590889882153ac0aF",
32
+ collectorDeployer: "0x1B256029541eE5beF2dB363211A7a05f9C36C18C",
33
+ hookDeployer: "0x78811B0b1Bb0F0f896e65C539c5bc62C4d33FbE2",
34
+ coreCodeHash: "0x9fb8f46c3b980b9db25dfdb487a69a308a86be145860269b4036a4e74480787b",
35
+ managerCodeHash: "0xbd3881180b547f5fe817545743cfb4343e96b1bc6640dcd70c106b0066e95626",
36
+ hookRuntimeCodeHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
37
+ oracleFactoryCodeHash: "0x974fb5c72d91ccb99f1eb4679a5d4432c82bbaa0906b1c2917ec4da3499b7b98",
38
+ lockerCodeHash: "0x5b11a5a42678c8da4c075ed9eb336113ac6d70e9adf43346bd586d6754dd0a63",
39
+ collectorFactoryCodeHash: "0xc1164680edec0a76d45b78d5d4e6ac11ccf1bb4e3e52999080beda989c987023",
40
+ collectorDeployerCodeHash: "0x5260583f372e6e60c6f2c9bab628f499c5d17551c714f85fc4555ba12cf11f5d",
41
+ hookDeployerCodeHash: "0xdd59bd8dae0acd396e0e276e50681278c5cb4f766d2e342fefaf001c75d4bbc5",
42
+ hookCreationCodeHash: "0x2c7bd199217fedf96a5b83d3ae3d630589eee86756c3a33bcc9a8d5e35efdc52",
43
+ codeChunk0: "0x0Ba427F55DcC0F2af6605c7095b8C2E6FE7C99bd",
44
+ codeChunk0Hash: "0x03b5f35b8e44b4f3fedd729a277e935de3b69edd4d23ad39726a0bab7aa1b39d",
45
+ codeChunk1: "0x86431579Fb52d1BE1f96Fb721daF853dB49cdAC2",
46
+ codeChunk1Hash: "0x2d752704dc0fdc33b6b820d4d8466615e8f1076363b700dc0b78f729bd2bc7b0",
47
+ sharedHookSalt: "0x0000000000000000000000000000000000000000000000000000000000000000",
48
+ }),
49
+ });
50
+ export const autoCompoundStaticAdapter = Object.freeze({
51
+ implementation: "0xAE70e5acB118eade1ddF97A86a8eF681d5b71686",
52
+ codeHash: "0xd67ee6b00dea01568d1da2dd805af85da34c92c0ba5bd1b2b2c2913fa8015f3b",
53
+ capabilities: 123n,
54
+ configVersion: 6,
55
+ enabled: true,
56
+ });
57
+ export const autoCompoundStaticRegistration = Object.freeze({
58
+ adapterId: "0x47f9efabc7c0427db5166ecf11702e0e0d2ca307a475d015d400a1584e572bc5",
59
+ configSchema: "0x51c5ca14c40012f78425cd1afb1ea77980da3fed0490a00911a8a4ed34792045",
60
+ dependencyDigest: "0x0fe998eb31c2efc79c7e2f3d48ca1ff141a7b6fde408eb21b16639c359cf7d04",
61
+ venue: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
62
+ factory: "0x0000000000000000000000000000000000000000",
63
+ hook: "0x0000000000000000000000000000000000000000",
64
+ capabilities: 123n,
65
+ enabled: true,
66
+ });
67
+ export const autoCompoundStaticTopology = Object.freeze({
68
+ hookTopology: 2,
69
+ configVersion: 6,
70
+ hookDeployer: "0x78811B0b1Bb0F0f896e65C539c5bc62C4d33FbE2",
71
+ hookCreationCodeHash: "0x2c7bd199217fedf96a5b83d3ae3d630589eee86756c3a33bcc9a8d5e35efdc52",
72
+ });
73
+ // 28561 bytes; keccak256 0x2c7bd199217fedf96a5b83d3ae3d630589eee86756c3a33bcc9a8d5e35efdc52.
74
+ export const autoCompoundStaticCreationCode = "0x610240604052348015610010575f5ffd5b50604051616f91380380616f9183398101604081905261002f91610ddb565b80610039816105ad565b611afc613fff30161461005f57604051632a96f9e160e21b815260040160405180910390fd5b80516001600160a01b039081166080908152602080840151831660a0908152604080860151851660c0526060860151851660e0529285015184166101005284015190921661012052516100b491839101610f60565b60408051808303601f1901815291905280516020909101206101609081526102408201516101809081526101208301516001600160a01b039081166101a05261026084015163ffffffff166101c052908301519183015160189290921b66ffffffff0000001662ffffff909216919091176101e05260a082015160c08301519082169116105f81610149578260a0015161014f565b8260c001515b90505f82610161578360c00151610167565b8360a001515b6001600160a01b038084166102008190529082166102208190526040805160a081018252928352602083019190915260e087015162ffffff169082015261010086015160020b60608201523060808201529091505f6101c78260a0902090565b61014081905286517f3976becbb8e6ca85459092153a2186a0e92a4b441f5cb1fb7c8a782ec56ad97f8054600160281b600160c81b031916650100000000006001600160a01b039384160217905560a08801517f3976becbb8e6ca85459092153a2186a0e92a4b441f5cb1fb7c8a782ec56ad98080546001600160a01b031990811692841692909217905560c0890180517f3976becbb8e6ca85459092153a2186a0e92a4b441f5cb1fb7c8a782ec56ad981805484169185169190911790557f3976becbb8e6ca85459092153a2186a0e92a4b441f5cb1fb7c8a782ec56ad98284905585517f3976becbb8e6ca85459092153a2186a0e92a4b441f5cb1fb7c8a782ec56ad983805484169185169190911790556020808701517f3976becbb8e6ca85459092153a2186a0e92a4b441f5cb1fb7c8a782ec56ad98480546040808b01516060808d0151958a166001600160b81b031990941693909317600160a01b62ffffff928316021762ffffff60b81b1916600160b81b9190951602939093179091556080808a01517f3976becbb8e6ca85459092153a2186a0e92a4b441f5cb1fb7c8a782ec56ad9858054909716908816179095558151610120810183525f8152948d01518616928501929092529151909316908201526101a08901519293507f3976becbb8e6ca85459092153a2186a0e92a4b441f5cb1fb7c8a782ec56ad97b92909182019060ff1660018111156103e3576103e3611105565b60018111156103f4576103f4611105565b815261014089015162ffffff166020808301919091526101c08a015160ff166040808401919091526101e08b01516001600160a01b039081166060808601919091526102008d0151151560808601526102208d015160a09095019490945284515f80549183166001600160a01b031992831617815593860151600180549184169183169190911781559286015160028054919093169181168217835594860151939491926001600160a81b03199092161790600160a01b9084908111156104bd576104bd611105565b0217905550608082015160028201805460a085015160ff16600160c01b0260ff60c01b1962ffffff909416600160a81b029390931663ffffffff60a81b199091161791909117905560c082015160038201805460e08501511515600160a01b026001600160a81b03199091166001600160a01b0390931692909217919091179055610100909101516004909101556102208701515f90819061055e90610c5a565b601e909401805461ffff909516600160e01b0261ffff60e01b1962ffffff909316600160c81b029290921664ffffffffff60c81b19909516949094171790925550611176975050505050505050565b80516001600160a01b03163b15806105d1575060208101516001600160a01b03163b155b806105e8575060408101516001600160a01b03163b155b806105ff575060608101516001600160a01b03163b155b80610616575060808101516001600160a01b03163b155b8061062d575060c08101516001600160a01b03163b155b80610643575060a08101516001600160a01b0316155b8061066757508060c001516001600160a01b03168160a001516001600160a01b0316145b8061067e575060a08101516001600160a01b031630145b806106a2575080606001516001600160a01b031681602001516001600160a01b0316145b806106c55750805f01516001600160a01b031681602001516001600160a01b0316145b806106dc575060208101516001600160a01b031630145b806106f3575060608101516001600160a01b031630145b8061070a575060808101516001600160a01b031630145b8061072d5750805f01516001600160a01b031681608001516001600160a01b0316145b80610740575060e081015162ffffff1615155b806107565750600160020b81610100015160020b125b8061076d5750610100810151617fff60029190910b135b8061079357506401000276a36001600160a01b03168161012001516001600160a01b0316105b806107c9575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168161012001516001600160a01b031610155b806107e55750620f424062ffffff1681610140015162ffffff16115b80610803575080610140015162ffffff1681610160015162ffffff16115b806108195750600160ff16816101a0015160ff16115b8061085057506101c081015160ff161580159061085057506004816101c0015160ff1610806108505750600a816101c0015160ff16115b8061087957506101c081015160ff161580159061087957506101e08101516001600160a01b0316155b8061089157506101e08101516001600160a01b031630145b806108b55750805f01516001600160a01b0316816101e001516001600160a01b0316145b806108da575080608001516001600160a01b0316816101e001516001600160a01b0316145b806108e85750610240810151155b806108fc575061026081015163ffffffff16155b806109125750602081610260015163ffffffff16115b156109305760405163c52a9bd360e01b815260040160405180910390fd5b5f816020015190505f8260800151905082606001516001600160a01b0316826001600160a01b031663f2f4eb266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561098a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ae9190611119565b6001600160a01b0316141580610a385750825f01516001600160a01b0316826001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2c9190611119565b6001600160a01b031614155b80610ab8575082604001516001600160a01b0316826001600160a01b031663c7f7fb906040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aac9190611119565b6001600160a01b031614155b80610b38575082608001516001600160a01b0316826001600160a01b031663d7b96d4e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2c9190611119565b6001600160a01b031614155b80610bb8575082602001516001600160a01b0316816001600160a01b03166316eebd1e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bac9190611119565b6001600160a01b031614155b80610c375750825f01516001600160a01b0316816001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2b9190611119565b6001600160a01b031614155b15610c555760405163c52a9bd360e01b815260040160405180910390fd5b505050565b5f5f60c0516001600160a01b031663deee4135846040518263ffffffff1660e01b8152600401610c8c91815260200190565b6040805180830381865afa158015610ca6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cca919061113b565b909250905062ffffff82161580610ce85750620d89e862ffffff8316115b80610cf7575060028161ffff16105b80610d07575061100061ffff8216115b15610d255760405163c52a9bd360e01b815260040160405180910390fd5b915091565b60405161028081016001600160401b0381118282101715610d5957634e487b7160e01b5f52604160045260245ffd5b60405290565b6001600160a01b0381168114610d73575f5ffd5b50565b8051610d8181610d5f565b919050565b805162ffffff81168114610d81575f5ffd5b8051600281900b8114610d81575f5ffd5b805163ffffffff81168114610d81575f5ffd5b805160ff81168114610d81575f5ffd5b80518015158114610d81575f5ffd5b5f610280828403128015610ded575f5ffd5b50610df6610d2a565b610dff83610d76565b8152610e0d60208401610d76565b6020820152610e1e60408401610d76565b6040820152610e2f60608401610d76565b6060820152610e4060808401610d76565b6080820152610e5160a08401610d76565b60a0820152610e6260c08401610d76565b60c0820152610e7360e08401610d86565b60e0820152610e856101008401610d98565b610100820152610e986101208401610d76565b610120820152610eab6101408401610d86565b610140820152610ebe6101608401610d86565b610160820152610ed16101808401610da9565b610180820152610ee46101a08401610dbc565b6101a0820152610ef76101c08401610dbc565b6101c0820152610f0a6101e08401610d76565b6101e0820152610f1d6102008401610dcc565b61020082015261022083810151908201526102408084015190820152610f466102608401610da9565b6102608201529392505050565b6001600160a01b03169052565b5f61028082019050610f73828451610f53565b6020830151610f856020840182610f53565b506040830151610f986040840182610f53565b506060830151610fab6060840182610f53565b506080830151610fbe6080840182610f53565b5060a0830151610fd160a0840182610f53565b5060c0830151610fe460c0840182610f53565b5060e0830151610ffb60e084018262ffffff169052565b5061010083015161101261010084018260020b9052565b50610120830151611027610120840182610f53565b5061014083015161104061014084018262ffffff169052565b5061016083015161105961016084018262ffffff169052565b5061018083015161107361018084018263ffffffff169052565b506101a083015161108a6101a084018260ff169052565b506101c08301516110a16101c084018260ff169052565b506101e08301516110b66101e0840182610f53565b506102008301516110cc61020084018215159052565b506102208301516102208301526102408301516102408301526102608301516110fe61026084018263ffffffff169052565b5092915050565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215611129575f5ffd5b815161113481610d5f565b9392505050565b5f5f6040838503121561114c575f5ffd5b61115583610d86565b9150602083015161ffff8116811461116b575f5ffd5b809150509250929050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051615ba16113f05f395f8181612c7901528181612d5e01526132b201525f8181612c3701528181612d23015261327601525f81816105a2015281816106b9015261436601525f61067701525f81816105ee01526117be01525f61083701525f6104c801525f818161042d01528181610b2c01528181610fbd0152818161148f0152818161182e01528181611ba101528181611f08015281816127510152818161294501528181612b3a01528181612cf80152818161369e0152818161381f01528181613bf80152818161423a01526142c301525f81816109fa01526121ee01525f818161064801528181610f850152818161131f015281816114dc015281816129d801528181612a4301528181612aad01528181612da401528181612f46015281816131c2015281816136c40152818161376801526137fc01525f81816109a5015261323a01525f81816107aa015261156601525f818161039c01528181610aba01528181610ec30152818161178101526131fe01525f818161087a01528181610ce101528181610daf015281816111810152818161146e0152818161169a015281816118b801528181611adf01528181611dc6015281816123720152818161268e01528181612b5f01528181612bd401528181612cd701528181612fad0152818161318601528181613a2001528181613aaf01528181613b2c01528181614261015281816142fb01528181614635015281816146a801528181614737015281816147b401528181614ade01528181614b3101528181614b7c0152614be90152615ba15ff3fe608060405234801561000f575f5ffd5b50600436106102b2575f3560e01c80630268e293146102b65780630286c109146102cb5780630581555f146102eb5780630885f732146102f15780630cc97b021461031157806321d0ee7014610334578063251b25e614610354578063259982e5146103845780632b20e39714610397578063359b4f30146103cb5780633b5b6540146103ec5780633e451d6a1461040257806342ea83e01461041557806347f8496c1461042857806350fb3a3a1461044f5780635524d54814610462578063575e24b4146104855780635955d09a146104c35780635da3eaff146104ea57806360f89f2e14610515578063654f631c146105285780636bdbeb36146105595780636fe7e6eb1461057a578063747a68cd1461058d5780637dbeb94e146105a0578063847211a6146105d65780638bc801c1146105e957806391dd734614610610578063921b0bed146106305780639759164a146106435780639b19293e1461066a5780639e5fe06214610672578063a3f4bac7146106ae578063a8691114146106b7578063aae49d70146106e0578063ac4e4054146106ea578063ac5555aa146106f3578063b439824414610706578063b47b2fb114610726578063b6a8b0fa1461075c578063c5c51dca1461076f578063c5fbb29814610784578063c67046af14610797578063c7f7fb90146107a5578063ca266dfe146107cc578063ce1b8e4f14610832578063d186230c14610859578063d2be66251461086c578063dc4c90d314610875578063dd71cea81461089c578063e1b4af69146108e9578063e2e65ec1146108fc578063e4967b0b1461090f578063f11457c714610936578063f2f4eb26146109a0578063f399150c146109c7578063f69e2046146109da578063f9bc70e7146109e2578063fc0c546a146109f5578063fd5b6d5b14610a1c575b5f5ffd5b6102c96102c4366004614d36565b610a2f565b005b6102d3610b80565b60405161ffff90911681526020015b60405180910390f35b5f6102d3565b6103046102ff366004614d50565b610b96565b6040516102e29190614db1565b610319610cad565b604080519384526020840192909252908201526060016102e2565b610347610342366004614eb3565b610cd5565b6040516102e29190614f33565b61035c610d6a565b604080519586526020860194909452928401919091526060830152608082015260a0016102e2565b610347610392366004614eb3565b610da3565b6103be7f000000000000000000000000000000000000000000000000000000000000000081565b6040516102e29190614f48565b6103de6103d9366004614f5c565b610e40565b6040519081526020016102e2565b6103f4610e5d565b6040516102e2929190614f8a565b6103de610410366004614f98565b610e7d565b6102c9610423366004614fb3565b610e8e565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b6102c961045d366004615001565b611018565b610475610470366004614d50565b61115e565b60405190151581526020016102e2565b610498610493366004615034565b611173565b604080516001600160e01b03199094168452602084019290925262ffffff16908201526060016102e2565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b6104f2611404565b60408051600294850b81529290930b6020830152918101919091526060016102e2565b6102c961052336600461508d565b61145f565b61053b610536366004614d50565b611544565b6040805162ffffff909316835261ffff9091166020830152016102e2565b61056c6105673660046150d4565b61162e565b6040516102e292919061514c565b6103476105883660046151e9565b61168e565b6103de61059b366004614f98565b611885565b7f00000000000000000000000000000000000000000000000000000000000000005b60405162ffffff90911681526020016102e2565b6103de6105e4366004614d50565b611899565b6103be7f000000000000000000000000000000000000000000000000000000000000000081565b61062361061e366004615240565b6118ab565b6040516102e2919061527e565b61056c61063e3660046150d4565b6119d0565b6103be7f000000000000000000000000000000000000000000000000000000000000000081565b6103be611a85565b6106997f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016102e2565b6103be613fff81565b7f000000000000000000000000000000000000000000000000000000000000000060181c610699565b6105c2620f424081565b6103be611afc81565b610475610701366004614d50565b611a9d565b61070e611ab7565b6040516001600160801b0390911681526020016102e2565b6107396107343660046152b3565b611ad2565b604080516001600160e01b03199093168352600f9190910b6020830152016102e2565b61034761076a366004615333565b611dba565b610777611e9e565b6040516102e2919061538c565b6103de610792366004614d50565b611f49565b5f6040516102e291906153ce565b6103be7f000000000000000000000000000000000000000000000000000000000000000081565b6107df6107da366004614d50565b611f75565b6040516102e2919081516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015160020b90830152608092830151169181019190915260a00190565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b6102c96108673660046153e1565b61200e565b6102d361100081565b6103be7f000000000000000000000000000000000000000000000000000000000000000081565b6108af6108aa3660046153fc565b6122ff565b6040805163ffffffff909516855260069390930b60208501526001600160a01b0390911691830191909152151560608201526080016102e2565b6103476108f7366004615333565b612366565b6103de61090a366004614f5c565b612452565b610917612470565b604080518251815260209283015161ffff1692810192909252016102e2565b610949610944366004614d50565b6124b0565b6040805161ffff998a168152978916602089015295881695870195909552600293840b60608701526001600160401b039283166080870152911660a0850152900b60c083015290911660e0820152610100016102e2565b6103be7f000000000000000000000000000000000000000000000000000000000000000081565b6103f46109d5366004614d36565b612531565b6102c96127bb565b6105c26109f036600461541c565b612855565b6103be7f000000000000000000000000000000000000000000000000000000000000000081565b6103de610a2a366004614f5c565b6128c2565b3068929eee149b4bd212685403610a4d5763ab143c065f526004601cfd5b3068929eee149b4bd2126855600a5460ff1680610a9157506002610a6f6128e0565b60040154600160201b900460ff166003811115610a8e57610a8e614d74565b10155b15610aaf5760405163558a1e0360e11b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610af7576040516282b42960e81b815260040160405180910390fd5b610b0081612904565b60085415610b21576040516304c7cf6760e51b815260040160405180910390fd5b4260088190556040517f0000000000000000000000000000000000000000000000000000000000000000907ff1bac50d2c6f6c83cb8ff6fac488b03adc5fb0cc9fae30db2077588d5d9e5fbd905f90a33868929eee149b4bd212685550565b5f610b896128e0565b6004015461ffff16919050565b60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152610be782612943565b60408051610120810182525f80546001600160a01b039081168352600180548216602085015260025491821694840194909452919290916060840191600160a01b90910460ff1690811115610c3e57610c3e614d74565b6001811115610c4f57610c4f614d74565b8152600282015462ffffff600160a81b820416602083015260ff600160c01b9091048116604083015260038301546001600160a01b0381166060840152600160a01b9004161515608082015260049091015460a09091015292915050565b5f5f5f5f610cb96128e0565b6013810154601482015460159092015490969195509350915050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d1e576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610d3c5763ab143c065f526004601cfd5b610d4585612904565b610d4f8685612982565b610d5884612b00565b5063021d0ee760e41b95945050505050565b5f5f5f5f5f5f610d786128e0565b6019810154601a820154601b830154601c840154601d90940154929a91995097509195509350915050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dec576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610e0a5763ab143c065f526004601cfd5b610e1385612904565b610e1d8685612982565b610e25612bfe565b610e2e84612b00565b5063259982e560e01b95945050505050565b5f610e4a83612943565b610e5382612c29565b5490505b92915050565b5f5f5f610e686128e0565b90508060160154816017015492509250509091565b5f610e8782612c29565b5492915050565b3068929eee149b4bd212685403610eac5763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f00576040516282b42960e81b815260040160405180910390fd5b610f21610f1c610f153685900385018561548a565b60a0902090565b612943565b60075460ff1615610f4557604051630ea075bf60e21b815260040160405180910390fd5b610f4e81612cd1565b610f5b6020820182614f98565b5f80546001600160a01b0319166001600160a01b039283161790556007805460ff191660011790557f000000000000000000000000000000000000000000000000000000000000000016610fb26020830183614f98565b6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007ffafdbdd88ac30f0aa936e576be61816ea751908540523fa81b80c4a406ad7bec60405160405180910390a43868929eee149b4bd21268555050565b3068929eee149b4bd2126854036110365763ab143c065f526004601cfd5b600a5460ff168061106e5750600261104c6128e0565b60040154600160201b900460ff16600381111561106b5761106b614d74565b10155b1561108c5760405163558a1e0360e11b815260040160405180910390fd5b61109582612943565b5f61109e6128e0565b601e81015490915061ffff600160e01b909104811690831611156110cf57601e810154600160e01b900461ffff1691505b601e810154600160201b900461ffff165f6110ee601f8401838661346d565b601e8401805461ffff808416600160201b810261ffff60201b199093169290921790925591925083161461115757847f04f592d3848fffa22f73de92a2fd8da837e6d597f468af77c6fc619b478362ae838360405161114e92919061551f565b60405180910390a25b5050505050565b5f61116882612943565b505060075460ff1690565b5f8080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111be576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036111dc5763ab143c065f526004601cfd5b600a5460ff1680611214575060026111f26128e0565b60040154600160201b900460ff16600381111561121157611211614d74565b10155b156112325760405163558a1e0360e11b815260040160405180910390fd5b61123b87612904565b611243612bfe565b5f61124c6128e0565b90505f6004820154600160201b900460ff16600381111561126f5761126f614d74565b14611290576040516001620787ab60e51b0319815260040160405180910390fd5b60048101805464ffffff000019811661ffff909116620100000217600160201b1790555f6112be8a89613500565b90505f6112cb8a8a61355a565b90505f62ffffff8316158015906112e857506112e8828c8c613598565b15611306576113036112fd8b60200135613617565b84613652565b90505b6040516364b3357d60e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c9666afa90611358908f908f908790600401615600565b602060405180830381865afa158015611373573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611397919061562b565b90506113d38c6113aa60208e018e615642565b6113b4575f6113b6565b825b6113c360208f018f615642565b6113cd5783613690565b5f613690565b81156113e3576113e3838361387d565b506315d7892d60e21b965060801b94505f9350505050955095509592505050565b5f5f5f5f6114106128e0565b60090154600160b81b900460020b905061142981613cb4565b61143282613cd5565b7fc7f8e8a3674727689aaf995179f25e33d31f0a09bac35877b0e81b130abd088a93509350935050909192565b61146883612904565b5f6114b37f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613ced565b50505f54919250506001600160a01b0384811691161415806115075750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b8061151957506001600160a01b038116155b156115365760405162820f3560e61b815260040160405180910390fd5b61153e613d9f565b50505050565b60405163deee413560e01b8152600481018290525f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063deee4135906024016040805180830381865afa1580156115aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ce919061565b565b909250905062ffffff821615806115ec5750620d89e862ffffff8316115b806115fb575060028161ffff16105b8061160b575061100061ffff8216115b156116295760405163c52a9bd360e01b815260040160405180910390fd5b915091565b606080333014611650576040516282b42960e81b815260040160405180910390fd5b5f611659613e5e565b604051633f03b12360e21b80825291925060031936016004808301375f5f3683865af43d5f833e80611689573d82fd5b503d81f35b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116d7576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036116f55763ab143c065f526004601cfd5b600a5460ff168061172d5750600261170b6128e0565b60040154600160201b900460ff16600381111561172a5761172a614d74565b10155b1561174b5760405163558a1e0360e11b815260040160405180910390fd5b611760610f1c610f153687900387018761548a565b60075460ff1615806117795750600754610100900460ff165b806117b657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b806117f357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156118105760405162820f3560e61b815260040160405180910390fd5b61181a825f613eb4565b6007805461ff0019166101001790556040517f0000000000000000000000000000000000000000000000000000000000000000907febcc9ffea17e08841d7588f2ecd87720e1cfb444bb3b5e662c4a5005c3c94ab2905f90a250636fe7e6eb60e01b5b949350505050565b5f61188f82612c29565b6003015492915050565b5f6118a382612943565b505060085490565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118f5576040516282b42960e81b815260040160405180910390fd5b600954158061191d57506009548383604051611912929190615688565b604051809103902014155b1561193b5760405163f7a632f560e01b815260040160405180910390fd5b5f600981905561194d8385018561548a565b905061195d610f1c8260a0902090565b600754610100900460ff166119845760405162820f3560e61b815260040160405180910390fd5b5f611991825f0151613efb565b90505f6119a18360200151613efb565b905081816040516020016119b6929190614f8a565b604051602081830303815290604052935050505092915050565b6060806119dc85612943565b6119e46128e0565b601e015462010000900461ffff165f03611a11576040516329d9e10560e01b815260040160405180910390fd5b6040516335edf59b60e11b81523090636bdbeb3690611a3890889088908890600401615697565b5f60405180830381865afa158015611a52573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a799190810190615781565b91509150935093915050565b5f611a8e6128e0565b546001600160a01b0316919050565b5f611aa782612943565b5050600754610100900460ff1690565b5f611ac06128e0565b601801546001600160801b0316919050565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b1c576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403611b3a5763ab143c065f526004601cfd5b600a5460ff1680611b7257506002611b506128e0565b60040154600160201b900460ff166003811115611b6f57611b6f614d74565b10155b15611b905760405163558a1e0360e11b815260040160405180910390fd5b611b9987612904565b5f611bc760057f00000000000000000000000000000000000000000000000000000000000000008b8a613f93565b9050611bd4885f5f613690565b5f611bdf898961355a565b90505f611bef60208b018b614f98565b6001600160a01b0316826001600160a01b031614611c1957611c1460208b018b614f98565b611c29565b611c2960408b0160208c01614f98565b905062ffffff831615801590611c455750611c45828b8b613598565b15611cde575f611c61611c5b8b60200135613617565b85613652565b90508015611cdc575f611c7760208d018d614f98565b6001600160a01b0316846001600160a01b031614611c9e57611c998a600f0b90565b611ca8565b611ca88a60801d90565b9050611cb88260208d013561585f565b81600f0b14611cda5760405163161b48a960e21b815260040160405180910390fd5b505b505b5f62ffffff841615801590611cf95750611cf9828c8c613598565b15611d68575f611d0c60208d018d614f98565b6001600160a01b0316836001600160a01b031614611d3357611d2e8a600f0b90565b611d3d565b611d3d8a60801d90565b9050611d54611d4e82600f0b613617565b86613652565b91508115611d6657611d66838361387d565b505b611d70614001565b5f611d796128e0565b600401805460ff60201b1916600160201b836003811115611d9c57611d9c614d74565b021790555063b47b2fb160e01b9c909b509950505050505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e03576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403611e215763ab143c065f526004601cfd5b600a5460ff1680611e5957506002611e376128e0565b60040154600160201b900460ff166003811115611e5657611e56614d74565b10155b15611e775760405163558a1e0360e11b815260040160405180910390fd5b611e8086612904565b611e8b868686613690565b50635b54587d60e11b9695505050505050565b60075460609060ff16611eb1575f611eb4565b60015b60ff166001600160401b03811115611ece57611ece615436565b604051908082528060200260200182016040528015611ef7578160200160208202803683370190505b5060075490915060ff1615611f46577f0000000000000000000000000000000000000000000000000000000000000000815f81518110611f3957611f39615886565b6020026020010181815250505b90565b5f611f5382612943565b611f5b6128e0565b601e0154600160881b90046001600160401b031692915050565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152611fa882612943565b611fb06128e0565b6040805160a08101825260088301546001600160a01b0390811682526009840154808216602084015262ffffff600160a01b82041693830193909352600160b81b90920460020b6060820152600a9092015416608082015292915050565b3068929eee149b4bd21268540361202c5763ab143c065f526004601cfd5b3068929eee149b4bd2126855600a5460ff16806120705750600261204e6128e0565b60040154600160201b900460ff16600381111561206d5761206d614d74565b10155b1561208e5760405163558a1e0360e11b815260040160405180910390fd5b5f6120976128e0565b60075490915060ff1615806120cb57505f6004820154600160201b900460ff1660038111156120c8576120c8614d74565b14155b156120e95760405163558a1e0360e11b815260040160405180910390fd5b6127108261ffff1611156121105760405163c52a9bd360e01b815260040160405180910390fd5b5f805460408051630d96a1bf60e21b815290516001600160a01b039092169163365a86fc916004808201926020929091908290030181865afa158015612158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217c919061589a565b9050806001600160a01b031663122a43a16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121de919061589a565b6001600160a01b0316639c44d63b7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016122299190614f48565b602060405180830381865afa158015612244573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612268919061589a565b6001600160a01b0316336001600160a01b031614612298576040516282b42960e81b815260040160405180910390fd5b60048201805461ffff85811661ffff1983161790925560405191169033907fb684611c9f6689ae8240c74c5af96bf6c09896aaecc561466be02df4a330a530906122e5908490889061551f565b60405180910390a25050503868929eee149b4bd212685550565b5f5f5f5f61230c86612943565b5f6123156128e0565b601f018661ffff811061232a5761232a615886565b015463ffffffff811698600160201b820460060b9850600160581b82046001600160a01b03169750600160f81b90910460ff1695509350505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146123af576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036123cd5763ab143c065f526004601cfd5b600a5460ff1680612405575060026123e36128e0565b60040154600160201b900460ff16600381111561240257612402614d74565b10155b156124235760405163558a1e0360e11b815260040160405180910390fd5b61242c86612904565b612437865f5f613690565b61243f6141b5565b5063e1b4af6960e01b9695505050505050565b5f61245c83612943565b61246582612c29565b600101549392505050565b604080518082019091525f808252602082015261248b6128e0565b604080518082019091526002820154815260039091015461ffff166020820152919050565b5f5f5f5f5f5f5f5f6124c189612943565b5f6124ca6128e0565b601e015461ffff8082169c62010000830482169c50600160201b830482169b50600160301b8304600290810b9b506001600160401b03600160481b850481169b50600160881b8504169950600160c81b8404900b9750600160e01b90920416945092505050565b5f5f3068929eee149b4bd2126854036125515763ab143c065f526004601cfd5b3068929eee149b4bd2126855600a5460ff1680612595575060026125736128e0565b60040154600160201b900460ff16600381111561259257612592614d74565b10155b156125b35760405163558a1e0360e11b815260040160405180910390fd5b6125bc83612904565b5f546001600160a01b031633146125e5576040516282b42960e81b815260040160405180910390fd5b5f6125ee6128e0565b90505f6004820154600160201b900460ff16600381111561261157612611614d74565b1461262f5760405163558a1e0360e11b815260040160405180910390fd5b600b8101541515806126445750600f81015415155b15612745575f8460405160200161265b91906158b5565b60408051601f1981840301815290829052805160208201206009556348c8949160e01b825291505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906348c89491906126c390859060040161527e565b5f604051808303815f875af11580156126de573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261270591908101906158c3565b600954909150156127295760405163f7a632f560e01b815260040160405180910390fd5b8080602001905181019061273d9190615955565b909550935050505b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f4a93be8d0a356d70b54fdf016f78a2ed8b8a3c420952848eb4f4b2c4546405b685856040516127a1929190614f8a565b60405180910390a3503868929eee149b4bd2126855915091565b5f6127c46128e0565b905033301415806127f5575060026004820154600160201b900460ff1660038111156127f2576127f2614d74565b14155b15612812576040516282b42960e81b815260040160405180910390fd5b60048101805460ff60201b1916600360201b1790555f612830613e5e565b604051631851865560e21b8082529192505f80600483865af461153e573d5f823e3d81fd5b5f3068929eee149b4bd2126854036128745763ab143c065f526004601cfd5b600754610100900460ff1661289b5760405162820f3560e61b815260040160405180910390fd5b6128a3613d9f565b5f6128ad836141eb565b5090506128b9816143ca565b9150505b919050565b5f6128cc83612943565b6128d582612c29565b600201549392505050565b7f3976becbb8e6ca85459092153a2186a0e92a4b441f5cb1fb7c8a782ec56ad97b90565b612919610f1c610f153684900384018461548a565b600754610100900460ff166129405760405162820f3560e61b815260040160405180910390fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081146129405760405162820f3560e61b815260040160405180910390fd5b600261298c6128e0565b60040154600160201b900460ff1660038111156129ab576129ab614d74565b106129c95760405163558a1e0360e11b815260040160405180910390fd5b600a5460ff168015612a1a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580612a1a5750604081013515155b15612a385760405163558a1e0360e11b815260040160405180910390fd5b6008545f03612a97577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614612a9357604051637cd5a0ad60e01b815260040160405180910390fd5b5050565b600354600160a01b900460ff168015612ae257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15612a9357604051630af9fb3360e21b815260040160405180910390fd5b5f612b096128e0565b905060408201351580612b2f5750601e810154600160481b90046001600160401b031643145b15612b38575050565b7f00000000000000000000000000000000000000000000000000000000000000005f612b847f000000000000000000000000000000000000000000000000000000000000000083613ced565b50909250612b989150506020850185615977565b60020b8160020b1280612bc05750612bb66040850160208601615977565b60020b8160020b12155b15612bcb5750505050565b61153e81612bf97f000000000000000000000000000000000000000000000000000000000000000085614432565b613eb4565b600a54610100900460ff1615612c1057565b612c18613d9f565b600a805461ff001916610100179055565b5f5f612c336128e0565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603612c7757600b0192915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603612cb957600f0192915050565b60405162820f3560e61b815260040160405180910390fd5b5f612d1c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613ced565b50505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b5f1480612d8157506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b155b80612d9457506001600160a01b03811615155b80612de057506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612dd46040840160208501614f98565b6001600160a01b031614155b80612e0e57506002546001600160a01b0316612e026060840160408501614f98565b6001600160a01b031614155b80612e565750600254600160a01b900460ff166001811115612e3257612e32614d74565b612e426080840160608501615990565b6001811115612e5357612e53614d74565b14155b80612e835750600254600160a81b900462ffffff16612e7b60a08401608085016159ae565b62ffffff1614155b80612eac5750600254600160c01b900460ff16612ea660c0840160a085016159c9565b60ff1614155b80612eda57506003546001600160a01b0316612ece60e0840160c08501614f98565b6001600160a01b031614155b80612f055750600354600160a01b900460ff161515612f00610100840160e08501615642565b151514155b80612f17575060045461010083013514155b80612f365750612f2a6020830183614f98565b6001600160a01b03163b155b80612f7e57506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612f736020840184614f98565b6001600160a01b0316145b80612f9d575030612f926020840184614f98565b6001600160a01b0316145b80612fe557506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612fda6020840184614f98565b6001600160a01b0316145b156130035760405163c52a9bd360e01b815260040160405180910390fd5b5f61300c6128e0565b90505f5f61301e856101000135611544565b601e8501549193509150600283810b600160c81b909204900b1415806130565750601e83015461ffff828116600160e01b9092041614155b156130745760405163c52a9bd360e01b815260040160405180910390fd5b5f6130826020870187614f98565b90505f816001600160a01b0316639b19293e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e5919061589a565b90505f826001600160a01b031663192134426040518163ffffffff1660e01b8152600401602060405180830381865afa158015613124573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613148919061562b565b90506001600160a01b0382163b158061316b575080826001600160a01b03163f14155b8061317e57506001600160a01b03821630145b806131ba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b806131f657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b8061323257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b8061326e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b806132aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b806132e657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b8061330e57506132f96020890189614f98565b6001600160a01b0316826001600160a01b0316145b1561332c5760405163c52a9bd360e01b815260040160405180910390fd5b5f836001600160a01b031663e4967b0b6040518163ffffffff1660e01b81526004016040805180830381865afa158015613368573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061338c91906159e9565b9050613397816144be565b6001600160a01b038316632714f4d8306133b460208d018d614f98565b6040518363ffffffff1660e01b81526004016133d1929190615a3e565b602060405180830381865afa1580156133ec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613410919061589a565b5086546001600160a01b0319166001600160a01b03939093169290921786556001860155805160028601556020015160038501805461ffff1990811661ffff90931692831790915560049095018054909516179093555050505050565b5f8261ffff165f03613492576040516329d9e10560e01b815260040160405180910390fd5b8261ffff168261ffff16116134a85750816134f9565b825b8261ffff168161ffff1610156134f4576001858261ffff1661ffff81106134d3576134d3615886565b01805463ffffffff191663ffffffff929092169190911790556001016134aa565b508190505b9392505050565b5f5f5f61350c846141eb565b604082015191935091506135236005848888614515565b935061352d6128e0565b601e0154600160481b90046001600160401b03164314613551576135518282613eb4565b50505092915050565b5f6135686020830183615642565b15155f6020840135121461358b576135866040840160208501614f98565b6134f9565b6134f96020840184614f98565b5f806001600254600160a01b900460ff1660018111156135ba576135ba614d74565b146135f2576135cc6020840184615642565b6135e5576135e06040850160208601614f98565b6135ff565b6135e06020850185614f98565b6002546001600160a01b03165b6001600160a01b038681169116149150509392505050565b5f600160ff1b820361363c57604051637e2df70960e11b815260040160405180910390fd5b5f82126136495781610e57565b610e5782615a58565b5f613666838362ffffff16620f4240614593565b905060016001607f1b03811115610e5757604051637e2df70960e11b815260040160405180910390fd5b60405162e568cf60e71b81527f000000000000000000000000000000000000000000000000000000000000000060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906372b4678090602401602060405180830381865afa158015613711573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613735919061562b565b5f0361374057505050565b600a805460ff191660011790556040516381f8a9d160e01b81525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906381f8a9d1906137a190889088908890600401615a72565b60408051808303815f875af11580156137bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137e09190615955565b600a805460ff1916905560405191935091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907f0000000000000000000000000000000000000000000000000000000000000000907fa30ca6140dfb2cac1c1021c5303d8dc7de0cd4db47221fb3ad068fac7ef8185e9061386e9086908690614f8a565b60405180910390a35050505050565b3068929eee149b4bd21268540361389b5763ab143c065f526004601cfd5b3068929eee149b4bd2126855815f6138b16128e0565b90505f6138bd83612c29565b600254909150600160c01b900460ff165f81156138fd5760646138e360ff841688615aa5565b6138ee90607d615ac4565b6138f89190615aa5565b6138ff565b5f5b90505f61392661390f8389615adb565b600487015462010000900461ffff16612710614593565b90505f6139338289615adb565b90505f8560020154865f01546139499190615adb565b905061395c8160016001607f1b03615adb565b82111561396e5761396e8a8783614621565b81865f015f8282546139809190615aee565b9250508190555083866001015f82825461399a9190615aee565b9250508190555081866003015f8282546139b49190615aee565b909155505060068701546001600160a01b03908116908916036139ef5782876013015f8282546139e49190615aee565b90915550613a089050565b82876014015f828254613a029190615aee565b90915550505b604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90613a569030908d90600401615a3e565b602060405180830381865afa158015613a71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a95919061562b565b604051630ab714fb60e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063156e29f690613ae89030908d908f90600401615b01565b5f604051808303815f87803b158015613aff575f5ffd5b505af1158015613b11573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e90613b639030908e90600401615a3e565b602060405180830381865afa158015613b7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ba2919061562b565b905081811080613bbb57508a613bb88383615adb565b14155b80613bce5750613bcb898b6148a6565b81105b15613bec5760405163104eed1d60e31b815260040160405180910390fd5b896001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f2616e25de5abcc9e6a698b140fb6c92f55ace21b7a57f76172f195dbbf693af68d89604051613c48929190614f8a565b60405180910390a38415613c9a57896001600160a01b03167fe04ea7e7ad1b5991b027bff5aecce3a2120139e6b38c482f5a1b97cfdad3a90586604051613c9191815260200190565b60405180910390a25b505050505050505050503868929eee149b4bd21268555050565b5f81600281900b620d89e71981613ccd57613ccd615a91565b050292915050565b5f81600281900b620d89e881613ccd57613ccd615a91565b5f5f5f5f5f613cfb86614996565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015613d43573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d67919061562b565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b600a54610100900460ff1615613db157565b5f613dba6128e0565b80549091506001600160a01b03161580613de35750600181015481546001600160a01b03163f14155b15613e015760405163c52a9bd360e01b815260040160405180910390fd5b80545f546040516344dd3d9960e01b81526001600160a01b03928316926344dd3d9992613e3692309290911690600401615a3e565b5f6040518083038186803b158015613e4c575f5ffd5b505afa158015611157573d5f5f3e3d5ffd5b5f5f613e686128e0565b80546001600160a01b031692509050811580613e9257508060010154826001600160a01b03163f14155b15613eb05760405163c52a9bd360e01b815260040160405180910390fd5b5090565b5f613ebd613e5e565b60405163059f233d60e41b808252600286900b60048301526001600160801b03851660248301529192505f80604483865af4611157573d5f823e3d81fd5b5f8181613f0782612c29565b80549091505f819003613f1e57505f949350505050565b613f388583846002015484613f339190615adb565b614621565b6001820180545f808555918290556002840191909155613f588183615adb565b600354909550613f739085906001600160a01b0316836149d2565b5f54613f8a9085906001600160a01b0316876149d2565b50505050919050565b60018401545f9063ffffffff16801580613fb85750613fb3858585614a79565b865414155b15613fd9576040516001620787ab60e51b0319815260040160405180910390fd5b613fe4600182615b25565b5f87556001909601805463ffffffff191690555093949350505050565b5f61400a6128e0565b905080601301545f14801561402157506014810154155b801561402f57506015810154155b156140375750565b6008545f03614068575f516020615b815f395f51905f525f5b60405160ff909116815260200160405180910390a150565b60ff5f5c1615614087575f516020615b815f395f51905f526005614050565b614094619c406002615ac4565b5a10156140b45760405163460c751360e11b815260040160405180910390fd5b60048101805460ff60201b1916600160211b179055637b4f102360e11b5f619c405a6140e09190615adb565b90505f5f6040518481525f5f6004835f3089f1925060033d118315161561410b5760045f823e805191505b5060048501805460ff60201b1916600160201b1790558161115757614131600884615aa5565b61413d90619c40615aee565b5a101561417757622dc6c08310156141685760405163460c751360e11b815260040160405180910390fd5b60015f805c60ff19168217905d505b7f8367b40cbd89b8d6964eed84ae26ab78afff41d04572e37d5e6aaf7ad3a055eb816040516141a69190614f33565b60405180910390a15050505050565b5f6141be613e5e565b6040516001623fd76560e11b03198082529192505f80600483865af46141e6573d5f823e3d81fd5b505050565b61423760408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290529061010082015290565b5f7f00000000000000000000000000000000000000000000000000000000000000008180806142867f000000000000000000000000000000000000000000000000000000000000000085613ced565b509250925092508062ffffff165f146142b25760405163c52a9bd360e01b815260040160405180910390fd5b8194506040518061012001604052807f00000000000000000000000000000000000000000000000000000000000000008152602001846001600160a01b031681526020016143207f000000000000000000000000000000000000000000000000000000000000000087614432565b6001600160801b0316815260200188602001358152602001885f01602081019061434a9190615642565b15158152600254600160a81b810462ffffff90811660208401527f0000000000000000000000000000000000000000000000000000000000000000908116604084015260181c63ffffffff166060830152608090910190600160a01b900460ff1660018111156143bc576143bc614d74565b815250955050505050915091565b5f600160ff1b8260600151036143f357604051637e2df70960e11b815260040160405180910390fd5b5060a081015160c082015181908062ffffff168362ffffff16101561442b576040516302cce67760e31b815260040160405180910390fd5b5050919050565b5f5f61443d83614996565b90505f61444b600383615aee565b604051631e2eaeaf60e01b8152600481018290529091506001600160a01b03861690631e2eaeaf90602401602060405180830381865afa158015614491573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144b5919061562b565b95945050505050565b80517f31fb6a2d116ef519550e8d3bce0e446b722f788b7f9cb5b5bdc78c8160fbda9c1415806144f75750612710816020015161ffff16115b1561294057604051634674941d60e11b815260040160405180910390fd5b60018401545f9063ffffffff1615614543576040516001620787ab60e51b0319815260040160405180910390fd5b835161454e856143ca565b915061455b818585614a79565b865561456d62ffffff83166001615b41565b600196909601805463ffffffff191663ffffffff90971696909617909555949350505050565b8282028183858304148515170261461a575f198385098181108201900382848609835f0384168285116145cd5763ae47f7025f526004601cfd5b93849004938382119092035f8390038390046001010292030417600260038302811880840282030280840282030280840282030280840282030280840282030280840290910302026134f9565b0492915050565b805f0361462d57505050565b8281614659827f0000000000000000000000000000000000000000000000000000000000000000614aae565b1015614678576040516365169c1d60e01b815260040160405180910390fd5b81836003015f82825461468b9190615adb565b9091555050604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e906146de9030908690600401615a3e565b602060405180830381865afa1580156146f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061471d919061562b565b604051637a94c56560e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5298aca9061477090309086908890600401615b01565b5f604051808303815f87803b158015614787575f5ffd5b505af1158015614799573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e906147eb9030908790600401615a3e565b602060405180830381865afa158015614806573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061482a919061562b565b9050818111806148435750836148408284615adb565b14155b8061485e575061485b836148556128e0565b906148a6565b81105b1561487c5760405163104eed1d60e31b815260040160405180910390fd5b6148868685614ad8565b83856002015f8282546148999190615aee565b9091555050505050505050565b60068201545f9081906001600160a01b038481169116146148f157600684015460058501546001600160a01b039182169116106148e757601284015461491d565b600e84015461491d565b600584015460068501546001600160a01b0391821691161061491757601284015461491d565b600e8401545b60088501549091505f906001600160a01b03858116911614614943578460170154614949565b84601601545b60068601549091506001600160a01b0385811691161461497c57846015015485601401546149779190615aee565b614982565b84601301545b61498c8284615aee565b6144b59190615aee565b6040515f906149b5908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b805f036149de57505050565b5f6149e98430614aae565b90505f6149f68585614aae565b9050614a03858585614c4e565b5f614a0e8630614aae565b90505f614a1b8787614aae565b905083821180614a34575084614a318386615adb565b14155b80614a3e57508281105b80614a52575084614a4f8483615adb565b14155b15614a7057604051631dc418c360e31b815260040160405180910390fd5b50505050505050565b5f838383604051602001614a8f93929190615b5d565b6040516020818303038152906040528051906020012090509392505050565b5f816014526370a0823160601b5f5260208060246010865afa601f3d111660205102905092915050565b5f614b027f0000000000000000000000000000000000000000000000000000000000000000614c98565b6001600160a01b031614614b29576040516365169c1d60e01b815260040160405180910390fd5b815f614b55827f0000000000000000000000000000000000000000000000000000000000000000614aae565b90505f614b628330614aae565b604051630b0d9c0960e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c0990614bb590889030908990600401615b01565b5f604051808303815f87803b158015614bcc575f5ffd5b505af1158015614bde573d5f5f3e3d5ffd5b505050505f614c0d847f0000000000000000000000000000000000000000000000000000000000000000614aae565b90505f614c1a8530614aae565b905083821180614c33575085614c308386615adb565b14155b80614c3d57508281105b80614a52575085614a4f8483615adb565b816014528060345263a9059cbb60601b5f5260205f604460105f875af18060015f511416614c8e57803d853b151710614c8e576390b8ec185f526004601cfd5b505f603452505050565b60405163789add5560e11b81527f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b960048201525f906001600160a01b0383169063f135baaa90602401602060405180830381865afa158015614cfc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e57919061562b565b5f60a08284031215614d30575f5ffd5b50919050565b5f60a08284031215614d46575f5ffd5b6134f98383614d20565b5f60208284031215614d60575f5ffd5b5035919050565b6001600160a01b03169052565b634e487b7160e01b5f52602160045260245ffd5b6002811061294057634e487b7160e01b5f52602160045260245ffd5b614dad81614d88565b9052565b81516001600160a01b03908116825260208084015190911690820152604080830151610120830191614de590840182614d67565b506060830151614df86060840182614da4565b506080830151614e0f608084018262ffffff169052565b5060a0830151614e2460a084018260ff169052565b5060c0830151614e3760c0840182614d67565b5060e0830151614e4b60e084018215159052565b5061010092830151919092015290565b6001600160a01b0381168114612940575f5ffd5b5f5f83601f840112614e7f575f5ffd5b5081356001600160401b03811115614e95575f5ffd5b602083019150836020828501011115614eac575f5ffd5b9250929050565b5f5f5f5f5f858703610160811215614ec9575f5ffd5b8635614ed481614e5b565b9550614ee38860208901614d20565b9450608060bf1982011215614ef6575f5ffd5b5060c0860192506101408601356001600160401b03811115614f16575f5ffd5b614f2288828901614e6f565b969995985093965092949392505050565b6001600160e01b031991909116815260200190565b6001600160a01b0391909116815260200190565b5f5f60408385031215614f6d575f5ffd5b823591506020830135614f7f81614e5b565b809150509250929050565b918252602082015260400190565b5f60208284031215614fa8575f5ffd5b81356134f981614e5b565b5f5f8284036101c0811215614fc6575f5ffd5b614fd08585614d20565b9250610120609f1982011215614fe4575f5ffd5b5060a0830190509250929050565b61ffff81168114612940575f5ffd5b5f5f60408385031215615012575f5ffd5b823591506020830135614f7f81614ff2565b5f60608284031215614d30575f5ffd5b5f5f5f5f5f6101408688031215615049575f5ffd5b853561505481614e5b565b94506150638760208801614d20565b93506150728760c08801615024565b92506101208601356001600160401b03811115614f16575f5ffd5b5f5f5f60e0848603121561509f575f5ffd5b6150a98585614d20565b925060a08401356150b981614e5b565b915060c08401356150c981614e5b565b809150509250925092565b5f5f5f604084860312156150e6575f5ffd5b8335925060208401356001600160401b03811115615102575f5ffd5b8401601f81018613615112575f5ffd5b80356001600160401b03811115615127575f5ffd5b8660208260051b840101111561513b575f5ffd5b939660209190910195509293505050565b604080825283519082018190525f9060208501906060840190835b8181101561518857835160060b835260209384019390920191600101615167565b5050838103602080860191909152855180835291810192508501905f5b818110156151cc5782516001600160a01b03168452602093840193909201916001016151a5565b50919695505050505050565b8035600281900b81146128bd575f5ffd5b5f5f5f5f61010085870312156151fd575f5ffd5b843561520881614e5b565b93506152178660208701614d20565b925060c085013561522781614e5b565b915061523560e086016151d8565b905092959194509250565b5f5f60208385031215615251575f5ffd5b82356001600160401b03811115615266575f5ffd5b61527285828601614e6f565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f5f5f61016087890312156152c9575f5ffd5b86356152d481614e5b565b95506152e38860208901614d20565b94506152f28860c08901615024565b935061012087013592506101408701356001600160401b03811115615315575f5ffd5b61532189828a01614e6f565b979a9699509497509295939492505050565b5f5f5f5f5f5f6101208789031215615349575f5ffd5b863561535481614e5b565b95506153638860208901614d20565b945060c0870135935060e087013592506101008701356001600160401b03811115615315575f5ffd5b602080825282518282018190525f918401906040840190835b818110156153c35783518352602093840193909201916001016153a5565b509095945050505050565b602081016153db83614d88565b91905290565b5f602082840312156153f1575f5ffd5b81356134f981614ff2565b5f5f6040838503121561540d575f5ffd5b50508035926020909101359150565b5f6060828403121561542c575f5ffd5b6134f98383615024565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561547257615472615436565b604052919050565b62ffffff81168114612940575f5ffd5b5f60a082840312801561549b575f5ffd5b5060405160a081016001600160401b03811182821017156154be576154be615436565b60405282356154cc81614e5b565b815260208301356154dc81614e5b565b602082015260408301356154ef8161547a565b6040820152615500606084016151d8565b6060820152608083013561551381614e5b565b60808201529392505050565b61ffff92831681529116602082015260400190565b803561553f81614e5b565b6001600160a01b03168252602081013561555881614e5b565b6001600160a01b0316602083015260408101356155748161547a565b62ffffff16604083015261558a606082016151d8565b60020b606083015260808101356155a081614e5b565b6001600160a01b03166080929092019190915250565b803580151581146128bd575f5ffd5b6155ce816155b6565b151582526020818101359083015260408101356155ea81614e5b565b6001600160a01b03166040929092019190915250565b610120810161560f8286615534565b61561c60a08301856155c5565b82610100830152949350505050565b5f6020828403121561563b575f5ffd5b5051919050565b5f60208284031215615652575f5ffd5b6134f9826155b6565b5f5f6040838503121561566c575f5ffd5b82516156778161547a565b6020840151909250614f7f81614ff2565b818382375f9101908152919050565b83815260406020820181905281018290525f8360608301825b858110156156e157823563ffffffff81168082146156cc575f5ffd5b835250602092830192909101906001016156b0565b509695505050505050565b5f6001600160401b0382111561570457615704615436565b5060051b60200190565b5f82601f83011261571d575f5ffd5b815161573061572b826156ec565b61544a565b8082825260208201915060208360051b860101925085831115615751575f5ffd5b602085015b8381101561577757805161576981614e5b565b835260209283019201615756565b5095945050505050565b5f5f60408385031215615792575f5ffd5b82516001600160401b038111156157a7575f5ffd5b8301601f810185136157b7575f5ffd5b80516157c561572b826156ec565b8082825260208201915060208360051b8501019250878311156157e6575f5ffd5b6020840193505b828410156158165783518060060b8114615805575f5ffd5b8252602093840193909101906157ed565b6020870151909550925050506001600160401b03811115615835575f5ffd5b6158418582860161570e565b9150509250929050565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f83128015821682158216171561587e5761587e61584b565b505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156158aa575f5ffd5b81516134f981614e5b565b60a08101610e578284615534565b5f602082840312156158d3575f5ffd5b81516001600160401b038111156158e8575f5ffd5b8201601f810184136158f8575f5ffd5b80516001600160401b0381111561591157615911615436565b615924601f8201601f191660200161544a565b818152856020838501011115615938575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f60408385031215615966575f5ffd5b505080516020909101519092909150565b5f60208284031215615987575f5ffd5b6134f9826151d8565b5f602082840312156159a0575f5ffd5b8135600281106134f9575f5ffd5b5f602082840312156159be575f5ffd5b81356134f98161547a565b5f602082840312156159d9575f5ffd5b813560ff811681146134f9575f5ffd5b5f60408284031280156159fa575f5ffd5b50604080519081016001600160401b0381118282101715615a1d57615a1d615436565b604052825181526020830151615a3281614ff2565b60208201529392505050565b6001600160a01b0392831681529116602082015260400190565b5f600160ff1b8201615a6c57615a6c61584b565b505f0390565b60e08101615a808286615534565b60a082019390935260c00152919050565b634e487b7160e01b5f52601260045260245ffd5b5f82615abf57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610e5757610e5761584b565b81810381811115610e5757610e5761584b565b80820180821115610e5757610e5761584b565b6001600160a01b039384168152919092166020820152604081019190915260600190565b63ffffffff8281168282160390811115610e5757610e5761584b565b63ffffffff8181168382160190811115610e5757610e5761584b565b8381526001600160a01b038316602082015260a0810161187d60408301846155c556febbaa14b89d897968cceb6d38217c5b6714f6be272da6dd1d0b07aa443da1995f";
75
+ //# sourceMappingURL=auto-compound-static-pool-v1-20261028.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-compound-static-pool-v1-20261028.js","sourceRoot":"","sources":["../../../src/lifecycle/deployments/auto-compound-static-pool-v1-20261028.ts"],"names":[],"mappings":"AAGA,gGAAgG;AAChG,+KAA+K;AAC/K,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC;IACtD,cAAc,EAAE,oEAAoE;IACpF,oBAAoB,EAAE,oEAAoE;IAC1F,kBAAkB,EAAE,oEAAoE;IACxF,WAAW,EAAE,oEAAoE;IACjF,QAAQ,EAAE,CAAC;IACX,aAAa,EAAE,CAAC;IAChB,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE,IAAI;IAClB,KAAK,EAAE,EAAE;IACT,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,KAAK;IACnB,gBAAgB,EAAE,4CAA4C;IAC9D,sBAAsB,EAAE,CAAC;IACzB,WAAW,EAAE,4CAA4C;IACzD,sBAAsB,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,kBAAkB,EAAE,CAAC;QACrB,kBAAkB,EAAE,KAAK;QACzB,gBAAgB,EAAE,EAAE;QACpB,wBAAwB,EAAE,IAAI;QAC9B,YAAY,EAAE,CAAC;KAChB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,4CAA4C;QACrD,QAAQ,EAAE,4CAA4C;QACtD,aAAa,EAAE,4CAA4C;QAC3D,MAAM,EAAE,4CAA4C;QACpD,gBAAgB,EAAE,4CAA4C;QAC9D,iBAAiB,EAAE,4CAA4C;QAC/D,YAAY,EAAE,4CAA4C;QAC1D,YAAY,EAAE,oEAAoE;QAClF,eAAe,EAAE,oEAAoE;QACrF,mBAAmB,EAAE,oEAAoE;QACzF,qBAAqB,EAAE,oEAAoE;QAC3F,cAAc,EAAE,oEAAoE;QACpF,wBAAwB,EAAE,oEAAoE;QAC9F,yBAAyB,EAAE,oEAAoE;QAC/F,oBAAoB,EAAE,oEAAoE;QAC1F,oBAAoB,EAAE,oEAAoE;QAC1F,UAAU,EAAE,4CAA4C;QACxD,cAAc,EAAE,oEAAoE;QACpF,UAAU,EAAE,4CAA4C;QACxD,cAAc,EAAE,oEAAoE;QACpF,cAAc,EAAE,oEAAoE;KACrF,CAAC;CACH,CAA4B,CAAC;AAC9B,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrD,cAAc,EAAE,4CAA4C;IAC5D,QAAQ,EAAE,oEAAoE;IAC9E,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,IAAI;CACd,CAAiC,CAAC;AACnC,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1D,SAAS,EAAE,oEAAoE;IAC/E,YAAY,EAAE,oEAAoE;IAClF,gBAAgB,EAAE,oEAAoE;IACtF,KAAK,EAAE,4CAA4C;IACnD,OAAO,EAAE,4CAA4C;IACrD,IAAI,EAAE,4CAA4C;IAClD,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,IAAI;CACd,CAAiC,CAAC;AACnC,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC;IACtD,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,4CAA4C;IAC1D,oBAAoB,EAAE,oEAAoE;CAC3F,CAA6B,CAAC;AAC/B,6FAA6F;AAC7F,MAAM,CAAC,MAAM,8BAA8B,GAAQ,syvDAAsyvD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { type Address } from "viem";
2
+ import { type LaunchPlanV1 } from "./schema.js";
3
+ import { type UfgLaunchConfig } from "./ufg-config.js";
4
+ import { type LifecycleBlock, type LifecycleLaunchGasBounds, type LifecycleLimitSource, type LifecycleOpeningBuyQuote, type LifecyclePlanningAssessment, type LifecycleRpcClient, type LifecycleTransaction, type PlannedLaunch } from "./types.js";
5
+ export declare const LIFECYCLE_GAS_PROFILE_VERSION = "robinhood-4663-capacity-v3";
6
+ export type NextTransactionEnvelope = Readonly<{
7
+ gas: bigint;
8
+ gasPrice: bigint;
9
+ }>;
10
+ type CapacityOptions = {
11
+ plan: LaunchPlanV1;
12
+ predictedToken: Address;
13
+ ufg?: {
14
+ config: UfgLaunchConfig;
15
+ };
16
+ headroomBps?: number;
17
+ };
18
+ export type ProfiledLaunchCapacity = {
19
+ bounds: LifecycleLaunchGasBounds;
20
+ initialBuys: readonly LifecycleOpeningBuyQuote[];
21
+ headroomBps: number;
22
+ atomic?: LifecycleTransaction;
23
+ activation: LifecycleTransaction;
24
+ };
25
+ /** No quote-token allowlist: costs and exact curve math belong to the release template. */
26
+ export declare function deriveLifecycleLaunchCapacity(options: CapacityOptions, openingBuys?: readonly LifecycleOpeningBuyQuote[]): ProfiledLaunchCapacity | undefined;
27
+ /** Pure release-template budgets with headroom, excluding poster allocation.
28
+ * Missing coverage refuses planning; there is no execution fallback. */
29
+ export declare function computeLifecycleLaunchGasBounds(options: CapacityOptions): LifecycleLaunchGasBounds | undefined;
30
+ export type LifecycleBudgetOptions = {
31
+ client: LifecycleRpcClient;
32
+ planned: PlannedLaunch;
33
+ limits?: LifecycleLimitSource;
34
+ signal?: AbortSignal;
35
+ };
36
+ /** Checks pinned inputs and deterministic capacity only. Never executes launch calldata. */
37
+ export declare function assessLifecycleTransactions(options: LifecycleBudgetOptions, transactions: readonly LifecycleTransaction[], block: LifecycleBlock, reviewed?: NextTransactionEnvelope, openingBuys?: readonly LifecycleOpeningBuyQuote[], capacity?: ProfiledLaunchCapacity): Promise<LifecyclePlanningAssessment>;
38
+ export {};
39
+ //# sourceMappingURL=gas-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas-profile.d.ts","sourceRoot":"","sources":["../../src/lifecycle/gas-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAK3C,OAAO,EAAiE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAG/G,OAAO,EAA4D,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EAA0B,KAAK,cAAc,EAAE,KAAK,wBAAwB,EAAE,KAAK,oBAAoB,EAAE,KAAK,wBAAwB,EAAE,KAAK,2BAA2B,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAG5Q,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAkElF,KAAK,eAAe,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAChI,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,wBAAwB,CAAC;IAAC,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IACxG,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,oBAAoB,CAAC;CACjE,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,SAAS,wBAAwB,EAAE,GAAG,sBAAsB,GAAG,SAAS,CAmB7J;AAED;wEACwE;AACxE,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,eAAe,GAAG,wBAAwB,GAAG,SAAS,CAE9G;AAED,MAAM,MAAM,sBAAsB,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAEjJ,4FAA4F;AAC5F,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,SAAS,oBAAoB,EAAE,EAAE,KAAK,EAAE,cAAc,EACrJ,QAAQ,CAAC,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,SAAS,wBAAwB,EAAE,EAAE,QAAQ,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAoEhK"}
@@ -0,0 +1,193 @@
1
+ import { toHex } from "viem";
2
+ import { decodeAbyssLifecycleMarketConfig, decodePoolBoundV4LifecycleMarketConfig } from "./markets.js";
3
+ import { computeLifecycleOpeningBuys, hasProfiledOpeningMath } from "./opening-buys.js";
4
+ import { hmmV2ForwardingReserve } from "./presets.js";
5
+ import { lifecyclePinnedRpc, lifecycleSourceClient, nitroPosterGasBound, readLifecycleGasPrice, readNitroPrices, registerLifecycleFinalCheck, resolveLifecycleLimits, rpcQuantity } from "./rpc.js";
6
+ import { LifecycleFundingKind, LifecycleRewardMode, LifecycleTokenKind } from "./schema.js";
7
+ import { isAutoCompoundProfile } from "./auto-compound.js";
8
+ import { buildLifecycleCommand, LIFECYCLE_CAPACITY_PADDING_BPS, preparationCalldataGas, preparationGasEstimate } from "./transactions.js";
9
+ import { UFG_LAUNCH_PROXY_ADDRESS, isUfgProfile, ufgPlanPrincipal } from "./ufg-config.js";
10
+ import { LifecyclePlanningError } from "./types.js";
11
+ import { isHmmProfile } from "./hmm.js";
12
+ export const LIFECYCLE_GAS_PROFILE_VERSION = "robinhood-4663-capacity-v3";
13
+ const ceil = (value, divisor) => (value + divisor - 1n) / divisor;
14
+ const approval = (transaction) => transaction.kind === "approve" || transaction.kind === "approve-reset";
15
+ function marketGas(plan) {
16
+ return plan.markets.map((market) => {
17
+ const abyss = market.configVersion === 1;
18
+ const config = abyss ? decodeAbyssLifecycleMarketConfig(market.config) : decodePoolBoundV4LifecycleMarketConfig(market.config, 6);
19
+ return { abyss, hmm: isHmmProfile(market.profileId), ufgHook: isUfgProfile(market.profileId), positions: config.positions.length };
20
+ });
21
+ }
22
+ function utf8Bytes(value) {
23
+ let bytes = 0;
24
+ for (let index = 0; index < value.length; index += 1) {
25
+ const code = value.charCodeAt(index);
26
+ if (code < 0x80)
27
+ bytes += 1;
28
+ else if (code < 0x800)
29
+ bytes += 2;
30
+ else if (code >= 0xd800 && code <= 0xdbff && index + 1 < value.length && value.charCodeAt(index + 1) >= 0xdc00 && value.charCodeAt(index + 1) <= 0xdfff) {
31
+ bytes += 4;
32
+ index += 1;
33
+ }
34
+ else
35
+ bytes += 3;
36
+ }
37
+ return bytes;
38
+ }
39
+ function tokenCreationGas(token) {
40
+ return (token.kind === LifecycleTokenKind.ERC404 ? 2500000n : 0n) +
41
+ (token.rewardMode === LifecycleRewardMode.Staking ? 2500000n : token.rewardMode === LifecycleRewardMode.Dividends ? 500000n : 0n) +
42
+ 25000n * BigInt(Math.ceil(utf8Bytes(token.name) / 32) + Math.ceil(utf8Bytes(token.symbol) / 32) + Math.ceil(utf8Bytes(token.metadataURI) / 32));
43
+ }
44
+ // Max observed compute: native Abyss atomic21,584,262; V4 fixed20,833,003;
45
+ // HMM26,395,772; UFG27,941,420 (historical-receipts.json,195 transactions).
46
+ // fork-matrix.json: Abyss activation8 positions11.08M/32 positions39.72M;
47
+ // fork-v4-matrix.json: dynamic V4 eight positions5,906,285.
48
+ // Native mixed HMM8/Abyss8/HMM8 activation23,883,893 (0xf05e…fe98).
49
+ const activationCosts = {
50
+ call: 1500000n,
51
+ abyss: { market: 500000n, position: 1250000n },
52
+ v4: { market: 250000n, position: 500000n },
53
+ hmm: 1000000n,
54
+ ufg: 250000n,
55
+ // Fork Abyss32: 64 buys78.44M minimum versus one buy47.49M;
56
+ // max observed marginal is below0.5M/buy. ERC404 pairs add below0.1M/NFT.
57
+ buy: 500000n,
58
+ nft: 100000n,
59
+ };
60
+ /** Measured-max template budgets, never gas-limit sizing or execution evidence. */
61
+ function capacityBasis(plan, transaction, markets, quotes, ufgRoute) {
62
+ const atomic = transaction.kind === "atomic";
63
+ let gas = atomic ? 22000000n + tokenCreationGas(plan.token) + (ufgRoute ? 6500000n : 0n)
64
+ : activationCosts.call + (ufgRoute ? activationCosts.ufg : 0n);
65
+ for (const market of markets) {
66
+ if (atomic)
67
+ gas += (market.hmm ? 7000000n : market.ufgHook ? 1000000n : market.abyss ? 500000n : 0n) +
68
+ (market.abyss ? 1500000n : 600000n) * BigInt(market.positions - 1);
69
+ else {
70
+ const cost = market.abyss ? activationCosts.abyss : activationCosts.v4;
71
+ gas += cost.market + cost.position * BigInt(market.positions) + (market.hmm ? activationCosts.hmm : market.ufgHook ? activationCosts.ufg : 0n);
72
+ }
73
+ }
74
+ gas += activationCosts.buy * BigInt(quotes.length);
75
+ if (plan.token.kind === LifecycleTokenKind.ERC404)
76
+ for (const quote of quotes)
77
+ gas += activationCosts.nft * ceil(quote.tokenOut, plan.token.nftUnit);
78
+ return gas + 24n * BigInt((transaction.data.length - 2) / 2) + 100000n * BigInt(plan.feeAssets.length);
79
+ }
80
+ /** No quote-token allowlist: costs and exact curve math belong to the release template. */
81
+ export function deriveLifecycleLaunchCapacity(options, openingBuys) {
82
+ const { plan, ufg } = options;
83
+ if (!hasProfiledOpeningMath(plan) || (plan.creator.toLowerCase() === UFG_LAUNCH_PROXY_ADDRESS.toLowerCase()) !== (ufg !== undefined))
84
+ return undefined;
85
+ // Auto-compounding templates have no measured gas yet; never invent their budgets.
86
+ if (plan.markets.some((market) => isAutoCompoundProfile(market.profileId)))
87
+ return undefined;
88
+ const headroomBps = options.headroomBps ?? 1500;
89
+ if (!Number.isSafeInteger(headroomBps) || headroomBps < 0 || headroomBps > 10000)
90
+ throw new LifecyclePlanningError("INVALID_LIMITS", "Headroom must be between zero and 10000 basis points");
91
+ const initialBuys = openingBuys ?? computeLifecycleOpeningBuys(options);
92
+ const route = ufg === undefined ? undefined : { account: ufgPlanPrincipal(plan), config: ufg.config };
93
+ const atomic = plan.markets.length === 1 && !plan.funding.some((funding) => funding.kind === LifecycleFundingKind.Swap)
94
+ ? buildLifecycleCommand(plan, { kind: "atomic" }, route) : undefined;
95
+ const activation = buildLifecycleCommand(plan, { kind: "activate" }, route);
96
+ const markets = marketGas(plan), reserve = hmmV2ForwardingReserve(plan);
97
+ const bound = (transaction) => {
98
+ const basis = capacityBasis(plan, transaction, markets, initialBuys, ufg !== undefined);
99
+ const buffered = ceil(basis * BigInt(10000 + Math.max(LIFECYCLE_CAPACITY_PADDING_BPS, headroomBps)), 10000n);
100
+ return buffered > basis + reserve ? buffered : basis + reserve;
101
+ };
102
+ return { bounds: { ...(atomic === undefined ? {} : { atomicComputeGasUpperBound: bound(atomic) }), activationComputeGasUpperBound: bound(activation) }, initialBuys, headroomBps, atomic, activation };
103
+ }
104
+ /** Pure release-template budgets with headroom, excluding poster allocation.
105
+ * Missing coverage refuses planning; there is no execution fallback. */
106
+ export function computeLifecycleLaunchGasBounds(options) {
107
+ return deriveLifecycleLaunchCapacity(options)?.bounds;
108
+ }
109
+ /** Checks pinned inputs and deterministic capacity only. Never executes launch calldata. */
110
+ export async function assessLifecycleTransactions(options, transactions, block, reviewed, openingBuys, capacity) {
111
+ const { client, planned } = options, plan = planned.plan;
112
+ const context = { client, account: planned.account, orchestrator: plan.orchestrator, block, chainId: planned.chainId };
113
+ const observed = await resolveLifecycleLimits(context, options.limits === undefined ? planned.limits : options.limits);
114
+ const [recommendation, balanceValue, prices] = await Promise.all([
115
+ readLifecycleGasPrice(client, block, planned.chainId),
116
+ lifecyclePinnedRpc(client, "eth_getBalance", [planned.account, toHex(block.number)], block),
117
+ observed.limits.protocol === "nitro" ? readNitroPrices(client, block) : undefined,
118
+ ]);
119
+ options.signal?.throwIfAborted();
120
+ observed.assertCurrent();
121
+ registerLifecycleFinalCheck(client, observed.assertCurrent);
122
+ const { limits } = observed, baseFee = block.baseFeePerGas ?? 0n, gasLimit = limits.executionGasCeiling;
123
+ const requiredGasPrice = limits.protocol === "nitro" && recommendation > baseFee ? recommendation : baseFee;
124
+ const gasPrice = reviewed?.gasPrice ?? (recommendation > baseFee * 2n ? recommendation : baseFee * 2n);
125
+ if (reviewed !== undefined && reviewed.gas !== gasLimit)
126
+ throw new LifecyclePlanningError("STALE_REVIEWED_GAS", "Reviewed gas differs from the native transaction ceiling. Refresh the review before continuing.");
127
+ const cancelOnly = transactions.every((transaction) => transaction.kind === "cancel");
128
+ const currentCapacity = cancelOnly ? undefined : capacity?.headroomBps === limits.headroomBps ? capacity
129
+ : deriveLifecycleLaunchCapacity({ plan, predictedToken: planned.predictedToken, ufg: planned.ufg, headroomBps: limits.headroomBps }, openingBuys);
130
+ const immediate = transactions[0], launch = transactions.find((transaction) => !approval(transaction));
131
+ const poster = (transaction) => prices === undefined ? 0n : nitroPosterGasBound(transaction, prices).posterGas;
132
+ const assessment = { ready: true, blockNumber: block.number, blockHash: block.hash,
133
+ account: planned.account, chainId: planned.chainId, limits,
134
+ ...(currentCapacity === undefined ? {} : { gasProfile: { version: LIFECYCLE_GAS_PROFILE_VERSION, bounds: currentCapacity.bounds, initialBuys: currentCapacity.initialBuys } }) };
135
+ const refuse = (code, reason, failureCategory, capacityConstraint, failedTransactionId) => ({ ...assessment, ready: false, code, reason, failureCategory, capacityConstraint, failedTransactionId });
136
+ if (!cancelOnly && currentCapacity === undefined)
137
+ return refuse("UNKNOWN_GAS_PROFILE", "Gas budgets are unavailable for this launch profile. Use a supported profile or update the SDK.", "capacity");
138
+ if (!cancelOnly && currentCapacity.bounds.activationComputeGasUpperBound + poster(currentCapacity.activation) > gasLimit) {
139
+ return refuse("ACTIVATION_GAS_LIMIT", "Too many positions or pools for one activation. Reduce them to fit the native transaction ceiling.", "capacity", "activation", "activate");
140
+ }
141
+ for (const transaction of transactions) {
142
+ if (transaction.kind === "atomic" && (currentCapacity?.bounds.atomicComputeGasUpperBound === undefined || currentCapacity.bounds.atomicComputeGasUpperBound + poster(transaction) > gasLimit))
143
+ return refuse("STAGED_EXECUTION_REQUIRED", "This launch requires staged execution. Refresh the review before continuing.", "capacity", "gas-envelope", transaction.id);
144
+ if (transaction.kind === "prepare" && ceil((preparationGasEstimate(plan, transaction.marketStart, transaction.marketCount) + preparationCalldataGas(transaction.data)) * BigInt(10000 + Math.max(LIFECYCLE_CAPACITY_PADDING_BPS, limits.headroomBps)), 10000n) + poster(transaction) > gasLimit)
145
+ return refuse("PREPARATION_GAS_LIMIT", "This preparation batch exceeds the gas budget. Refresh the review to split it.", "capacity", "preparation", transaction.id);
146
+ if (limits.maxCalldataBytes !== undefined && (transaction.data.length - 2) / 2 > limits.maxCalldataBytes)
147
+ return refuse("CALLDATA_LIMIT", "The launch exceeds the transaction data limit. Reduce its positions or pools.", "capacity", "calldata", transaction.id);
148
+ }
149
+ if (launch !== undefined && limits.transactionGasCeiling !== undefined && gasLimit > limits.transactionGasCeiling)
150
+ return refuse("GAS_POLICY_LIMIT", "The configured gas limit is below the chain's native transaction ceiling.", "capacity", "gas-envelope", launch.id);
151
+ if (reviewed !== undefined && gasPrice < requiredGasPrice)
152
+ return refuse("REVIEWED_FEE_TOO_LOW", "The reviewed gas price is below the current required fee. Refresh the review before continuing.", "semantic", undefined, immediate?.id);
153
+ const quotes = currentCapacity?.initialBuys ?? [];
154
+ if (quotes.some((quote) => quote.tokenOut < plan.buys[quote.buyIndex].minTokenOut))
155
+ return refuse("BUY_MINIMUM_NOT_MET", "An opening buy is below its minimum output. Refresh the review before continuing.", "semantic");
156
+ if (block.timestamp > plan.deadline && !cancelOnly)
157
+ return refuse("PLAN_EXPIRED", "The launch deadline has passed. Cancel an unfinished launch to recover its funds.", "semantic");
158
+ const inputs = new Map();
159
+ for (const prerequisite of planned.prerequisites) {
160
+ if (prerequisite.allowance === undefined)
161
+ continue;
162
+ const key = prerequisite.funding.inputAsset.toLowerCase(), total = inputs.get(key) ?? { required: 0n, balance: prerequisite.inputBalance };
163
+ total.required += prerequisite.requiredInput;
164
+ inputs.set(key, total);
165
+ }
166
+ if ([...inputs.values()].some((input) => input.required > input.balance))
167
+ return refuse("INSUFFICIENT_FUNDING_BALANCE", "There are not enough tokens to fund this launch. Add funds or reduce the purchase.", "affordability");
168
+ const balance = rpcQuantity(balanceValue, "creator native balance");
169
+ if (gasPrice >= 1n << 256n || launch !== undefined && launch.value + gasLimit * gasPrice >= 1n << 256n)
170
+ throw new LifecyclePlanningError("INVALID_GAS_ENVELOPE", "Transaction value and native-ceiling fee must fit uint256");
171
+ if (launch !== undefined && launch.value + gasLimit * gasPrice > balance)
172
+ return refuse("INSUFFICIENT_NATIVE_BALANCE", "There is not enough native currency for the launch amount and gas budget. Add funds or reduce the purchase.", "affordability", undefined, launch.id);
173
+ if (immediate !== undefined && !approval(immediate)) {
174
+ const source = lifecycleSourceClient(client);
175
+ const dataFee = limits.protocol === "nitro" ? 0n : observed.configuration.estimateDataFee === undefined ? undefined
176
+ : await observed.configuration.estimateDataFee({ ...immediate, gas: gasLimit, gasPrice }, source === client ? context : { ...context, client: source });
177
+ if (dataFee !== undefined && (typeof dataFee !== "bigint" || dataFee < 0n || dataFee >= 1n << 256n))
178
+ throw new LifecyclePlanningError("INVALID_DATA_FEE", "Data-fee estimate must be a nonnegative uint256 amount");
179
+ const executionFee = gasLimit * gasPrice, required = immediate.value + executionFee + (dataFee ?? 0n);
180
+ if (required >= 1n << 256n)
181
+ throw new LifecyclePlanningError("INVALID_GAS_ENVELOPE", "Transaction value and gas/data fee budget must fit uint256");
182
+ if (required > balance)
183
+ return refuse("INSUFFICIENT_NATIVE_BALANCE", "There is not enough native currency for the launch amount and gas budget. Add funds or reduce the purchase.", "affordability", undefined, immediate.id);
184
+ const posterGas = prices === undefined ? undefined : poster(immediate);
185
+ assessment.estimate = { gasLimit, gasPrice, executionFee, dataFee, totalFee: dataFee === undefined ? undefined : executionFee + dataFee,
186
+ posterGas, posterFee: posterGas === undefined ? undefined : posterGas * gasPrice, dataFeeIncludedInGas: limits.protocol === "nitro",
187
+ feeConfidence: dataFee === undefined ? "native-ceiling-only" : "native-ceiling-and-data" };
188
+ }
189
+ options.signal?.throwIfAborted();
190
+ observed.assertCurrent();
191
+ return assessment;
192
+ }
193
+ //# sourceMappingURL=gas-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas-profile.js","sourceRoot":"","sources":["../../src/lifecycle/gas-profile.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,20 @@
1
- /** Versioned construction metadata and live launch execution calibration. */
1
+ /** Versioned construction metadata, exact local curve math and launch budgets. */
2
2
  export * from "./schema.js";
3
3
  export * from "./types.js";
4
4
  export * from "./abi.js";
5
5
  export * from "./markets.js";
6
6
  export * from "./hmm.js";
7
7
  export * from "./ufg.js";
8
+ export * from "./auto-compound.js";
8
9
  export { ABYSS_LIFECYCLE_CONFIG_SCHEMA, readLifecycleTokenAtBlock, readLifecycleHeadProgress, predictLifecycleToken, validateV4LifecycleOracle, readLifecycleProfiles, readPoolBoundHookDeployment, buildPoolBoundHookDeploymentTransaction, validateLifecycleMarketIdentity, readLaunchProgress } from "./progress.js";
9
- export * from "./fork.js";
10
10
  export * from "./authors.js";
11
11
  export * from "./presets.js";
12
- export * from "./transactions.js";
12
+ export { preparationGasEstimate, packPreparationBatches, buildLaunchTransactions, LIFECYCLE_CAPACITY_PADDING_BPS } from "./transactions.js";
13
13
  export { createLifecycleSessionCache } from "./rpc.js";
14
14
  export { launchLensAbi } from "./lens.js";
15
15
  export { hookSaltMinerAbi } from "./mining.js";
16
- export { planLaunch, simulateLaunchPlan, buildNextTransaction, prepareAndPlanLifecycleLaunch } from "./planner.js";
16
+ export { planLaunch, buildNextTransaction, prepareAndPlanLifecycleLaunch } from "./planner.js";
17
+ export { computeLifecycleOpeningBuys } from "./opening-buys.js";
18
+ export { computeLifecycleLaunchGasBounds } from "./gas-profile.js";
17
19
  export { assertLaunchTopologyCoverage, getTickAtSqrtRatio, type LaunchTopologyCoverageInput, type LaunchTopologyPosition } from "../launch.js";
18
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,qBAAqB,EACjH,yBAAyB,EAAE,qBAAqB,EAAE,2BAA2B,EAC7E,uCAAuC,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtH,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,KAAK,2BAA2B,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,qBAAqB,EACjH,yBAAyB,EAAE,qBAAqB,EAAE,2BAA2B,EAC7E,uCAAuC,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtH,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAC5I,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,KAAK,2BAA2B,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC"}