@black-market/sdk 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +19 -15
  2. package/dist/abyss.d.ts +4 -0
  3. package/dist/abyss.d.ts.map +1 -1
  4. package/dist/abyss.js +1 -0
  5. package/dist/abyss.js.map +1 -1
  6. package/dist/lifecycle/abi.d.ts +1 -0
  7. package/dist/lifecycle/abi.d.ts.map +1 -1
  8. package/dist/lifecycle/abi.js +1 -0
  9. package/dist/lifecycle/abi.js.map +1 -1
  10. package/dist/lifecycle/deployments/{hmm-dynamic-pool-hook-v1-20261011.d.ts → hmm-dynamic-pool-hook-v2-20261017.d.ts} +21 -21
  11. package/dist/lifecycle/deployments/{hmm-dynamic-pool-hook-v1-20261011.d.ts.map → hmm-dynamic-pool-hook-v2-20261017.d.ts.map} +1 -1
  12. package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v2-20261017.js +69 -0
  13. package/dist/lifecycle/deployments/{hmm-dynamic-pool-hook-v1-20261011.js.map → hmm-dynamic-pool-hook-v2-20261017.js.map} +1 -1
  14. package/dist/lifecycle/deployments/{hmm-fixed-pool-hook-v1-20261011.d.ts → hmm-fixed-pool-hook-v2-20261017.d.ts} +21 -21
  15. package/dist/lifecycle/deployments/{hmm-fixed-pool-hook-v1-20261011.d.ts.map → hmm-fixed-pool-hook-v2-20261017.d.ts.map} +1 -1
  16. package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v2-20261017.js +69 -0
  17. package/dist/lifecycle/deployments/{hmm-fixed-pool-hook-v1-20261011.js.map → hmm-fixed-pool-hook-v2-20261017.js.map} +1 -1
  18. package/dist/lifecycle/hmm-abi.d.ts +4544 -0
  19. package/dist/lifecycle/hmm-abi.d.ts.map +1 -0
  20. package/dist/lifecycle/hmm-abi.js +299 -0
  21. package/dist/lifecycle/hmm-abi.js.map +1 -0
  22. package/dist/lifecycle/hmm.d.ts +19 -3
  23. package/dist/lifecycle/hmm.d.ts.map +1 -1
  24. package/dist/lifecycle/hmm.js +11 -7
  25. package/dist/lifecycle/hmm.js.map +1 -1
  26. package/dist/lifecycle/markets.d.ts.map +1 -1
  27. package/dist/lifecycle/markets.js +2 -0
  28. package/dist/lifecycle/markets.js.map +1 -1
  29. package/dist/lifecycle/presets.d.ts +2 -2
  30. package/dist/lifecycle/presets.js +4 -4
  31. package/docs/launch-lifecycle.md +135 -56
  32. package/examples/README.md +6 -4
  33. package/examples/hmm-launch-config.ts +4 -1
  34. package/package.json +2 -2
  35. package/src/abyss.ts +1 -0
  36. package/src/lifecycle/abi.ts +1 -0
  37. package/src/lifecycle/deployments/hmm-dynamic-pool-hook-v2-20261017.ts +71 -0
  38. package/src/lifecycle/deployments/hmm-fixed-pool-hook-v2-20261017.ts +71 -0
  39. package/src/lifecycle/hmm-abi.ts +302 -0
  40. package/src/lifecycle/hmm.ts +12 -7
  41. package/src/lifecycle/markets.ts +1 -0
  42. package/src/lifecycle/presets.ts +4 -4
  43. package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.js +0 -69
  44. package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.js +0 -69
  45. package/src/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.ts +0 -71
  46. package/src/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.ts +0 -71
@@ -7,72 +7,151 @@ The canonical authorities are the registry/certification/adapter/config contract
7
7
  in the protocol repository. Plan identity is `LaunchPlanV1`. Pool-bound V4 uses **config 6**,
8
8
  canonical Abyss uses **config 1**, and generic current shared-V4 support uses **config 4**.
9
9
 
10
- ## 0.9.0 release: HMM pool hooks
11
-
12
- The October11 registered **HMM Fixed** and **HMM Dynamic** use
13
- `KnownLifecycleProfile.V4HmmFixedPool` (`v4-hmm-fixed-pool`) and
14
- `KnownLifecycleProfile.V4HmmDynamicPool` (`v4-hmm-dynamic-pool`), with hook keys
15
- `KnownLifecycleHook.HmmFixedPoolV1` / `HmmDynamicPoolV1`. Their frozen profile,
16
- adapter, envelope, graph, runtime hashes and creation code come from Black Market
17
- main `1ca9881`, admissions `20261011T214314Z-hmm-fixed` and
18
- `20261011T220032Z-hmm-dynamic`. Each graph has its own HMM collector/deployer and
19
- locker; these are not aliases for the existing fixed/dynamic hooks.
20
- Live `readLifecycleProfiles` remains the authority for `admitted`, not the presets.
21
-
22
- Both require `lpFeePips: 0` and `developerFeeBps: 0`. Fixed uses `hookFeePips`
23
- as the static trading fee; Dynamic uses the same minimum/maximum/sensitivity
24
- policy as the Dynamic Fee Hook. Config6 requires `hmmLaunchConfig`:
10
+ ## 0.9.1 release: Abyss 0.01% fee tier
11
+
12
+ `ABYSS_FEE_TIERS` now includes `{ feePips: 100, tickSpacing: 1, label: "0.01%" }`.
13
+ Pass `fee: 100` to `deriveLaunchPoolRecipe` to derive spacing-one geometry without
14
+ an explicit spacing override. Use `tickSpacing: 1` when passing that recipe to
15
+ `deriveLaunchPositionRanges`; the permanent boundary tail reaches tick `887272`
16
+ for launch token0 or `-887272` for launch token1. Abyss config1 lifecycle planning
17
+ derives this spacing from the canonical catalog automatically.
18
+
19
+ The Robinhood chain 4663 factory has enabled fee 100 with spacing 1. Other
20
+ deployments must enable the tier before execution; local recipe construction is
21
+ not evidence of live profile admission. Existing tiers and defaults are unchanged.
22
+
23
+ ## 0.10.0 release: HMM V2 only
24
+
25
+ The admitted October17 **HMM Fixed V2** and **HMM Dynamic V2** replace the SDK's
26
+ earlier HMM offerings. Generic keys `KnownLifecycleProfile.V4HmmFixedPool`
27
+ (`v4-hmm-fixed-pool`) and `V4HmmDynamicPool` (`v4-hmm-dynamic-pool`) now select V2.
28
+ Versioned hook keys are `KnownLifecycleHook.HmmFixedPoolV2` / `HmmDynamicPoolV2`.
29
+ These are not aliases for the non-HMM fixed/dynamic hooks; those APIs are unchanged.
30
+
31
+ | Preset | Admitted V2 profile ID |
32
+ | --- | --- |
33
+ | HMM Fixed V2 (`hooks/hmm-fixed-v2`) | `0x45e957bcc7068350a65f5b4de5453b674d54d0f5eb2a88fc839da13197e80e98` |
34
+ | HMM Dynamic V2 (`hooks/hmm-dynamic-v2`) | `0x8e500f203ace505072e209c5f077e11de6d071ac7f298cd75c0e05c6a55c36e6` |
35
+
36
+ Frozen adapters, envelopes, complete dependency graphs, creation code and admission
37
+ fixtures preserve the V2 release and pinned registry readback at block 91,874,655.
38
+ Each graph has its own collector/deployer, locker and hook deployer. Presets are
39
+ construction data, not a current admission certificate: live
40
+ `readLifecycleProfiles` and execution proof remain authoritative.
41
+
42
+ Both require `lpFeePips: 0` and `developerFeeBps: 0`. Fixed charges `hookFeePips`
43
+ as its static fee; Dynamic uses config6 minimum/maximum/sensitivity policy.
44
+ Config6 requires a typed `hmmLaunchConfig`:
25
45
 
26
46
  ```ts
27
47
  const hmmLaunchConfig = defaultHmmLaunchConfig({
28
48
  tokenBudget: marketTokenBudget, quoteAsset: "USDG", quoteDecimals: 6,
49
+ // Illustrative caller choices, not SDK risk defaults:
50
+ maxBidQuote: 100n * 10n ** 6n, // maximum 100 USDG of new/refreshed bid principal
51
+ referenceDeviation: 0, // do not ask below or bid above the rounded reference
29
52
  });
30
- // Optional explicit UI choices:
31
- hmmLaunchConfig.strategyShareBps = 2500; // 25%; default 50%; 100% is also valid.
32
- hmmLaunchConfig.strategy.premiumDecaySeconds = 259200; // 72h; default off (0).
53
+ hmmLaunchConfig.strategyShareBps = 2500; // optional 25%; existing default is 50%
54
+ hmmLaunchConfig.strategy.premiumDecaySeconds = 259200; // optional 72h; default off
33
55
  const config = encodePoolBoundV4LifecycleMarketConfig({
34
56
  ...reviewedV6Fields, lpFeePips: 0, developerFeeBps: 0, hmmLaunchConfig,
35
57
  });
36
58
  ```
37
59
 
38
- `HmmStrategyConfig` / `HmmLaunchConfig` mirror Solidity
39
- `HMMStrategyConfigV1` / `HMMLaunchConfigV1`; `encodeHmmLaunchTail` produces exactly
40
- `abi.encode(HMMLaunchConfigV1)` (448 bytes). The V6 codec automatically appends it
41
- only for HMM profile IDs and rejects a missing tail. Decoding preserves the typed
42
- tail through `prepareAndPlanLifecycleLaunch` salt mining and recovery; plain V6,
43
- noncanonical prefixes and incorrectly sized tails are rejected before RPC planning.
44
- The full plan hash includes the tail. The hook constructor's market-economics
45
- commitment hashes only the canonical V6 prefix with zero salt, exactly as the
46
- HMM collector factory does.
47
-
48
- `validateHmmLaunchConfig` mirrors the collector factory: share <=10,000 bps;
49
- positive bid/ask widths and stale displacement, nonnegative gap, positive stale
50
- seconds and harvest thresholds; resale premium <=5,000 bps; 1–8 asks; exposure
51
- >= ask count and minimum token harvest; inventory >= minimum token harvest;
52
- both caps <= uint128 max. Solidity int24/uint32/uint256 widths are enforced.
53
- Minimum quote deployment may be zero; premium decay is any uint32.
54
- Widths, gap and displacement are **tick spacings**, not raw ticks.
55
-
56
- Defaults: 50% share; widths 5/5, gap 1, stale 86,400 seconds/displacement 5,
57
- resale premium 500 bps, 4 asks, decay off. Token thresholds are raw market-budget
58
- ratios: harvest budget/100,000, ask exposure budget/10, acquired inventory budget.
59
- Budgets too small to produce a positive harvest or above uint128 are rejected.
60
- WETH minimum quote deploy/harvest is 0.0005/0.005 ETH; USDG is 1/10 six-decimal
61
- units. Symbols and canonical catalog addresses work; supplied decimals must match.
62
- Other quotes require explicit `minQuoteDeploy` and `minQuoteHarvest` raw values.
63
- Do not infer USD prices or units for unsupported assets.
64
-
65
- Each harvest sends the share of collected **QUOTE** fees to the per-market manager;
66
- the remainder follows the normal owner/holder-reward split. Token-side fees are
67
- untouched. The fee owner may call `HMMFeeCollectorV1.setStrategyShareBps` later.
68
- The manager bids below price and re-sells acquired inventory at/above realized
69
- cost plus premium; it never touches the locked launch positions.
70
-
71
- Independent Solidity ABI fixtures are generated by
72
- `node scripts/generate-hmm-fixtures.mjs` (Foundry `cast abi-encode`). Snapshot
73
- regeneration uses `node --experimental-transform-types scripts/generate-hmm-presets.mjs
74
- /path/to/black-market`; it reads hash-checked storage-child runtime code from
75
- Robinhood without modifying the evidence checkout.
60
+ `HmmStrategyConfig` / `HmmLaunchConfig` are V2-only and mirror Solidity
61
+ `HMMStrategyConfigV2` / `HMMLaunchConfigV2`. `encodeHmmLaunchTail` produces exactly
62
+ `abi.encode(HMMLaunchConfigV2)`: **16 static words / 512 bytes**. The V6 codec
63
+ appends the tail only for current HMM profile IDs. Missing tails, old 448-byte
64
+ tails, extra words and noncanonical prefixes are rejected before RPC planning.
65
+ Mining and recovery preserve the typed tail. The full launch-plan hash binds
66
+ every tail byte, including both new guards.
67
+
68
+ The hook constructor is still **one 20-word / 640-byte
69
+ `PoolBoundHookParametersV2` tuple**. Do not append the HMM tail to creation code.
70
+ The collector factory hashes only the canonical config6 prefix with zero hook
71
+ salt for the hook's market-economics commitment; the auxiliary strategy settings
72
+ are handed to the manager through the collector. Changing those settings changes
73
+ the full plan commitment, but not the hook constructor's prefix-only commitment.
74
+
75
+ `validateHmmLaunchConfig` enforces the factory's exact launch guards and Solidity
76
+ field widths. Share is 0..10,000 bps. All 15 strategy fields are listed in wire order:
77
+
78
+ | Field | Unit and accepted launch values |
79
+ | --- | --- |
80
+ | `bidWidth` | Tick spacings; positive int24 |
81
+ | `askWidth` | Tick spacings; positive int24 |
82
+ | `gap` | Tick spacings; nonnegative int24 |
83
+ | `staleAfterSeconds` | Positive uint32 seconds |
84
+ | `staleDisplacement` | Tick spacings; positive int24 |
85
+ | `minQuoteDeploy` | Raw quote units; any uint256, including zero |
86
+ | `minQuoteHarvest` | Raw quote units; positive uint256 |
87
+ | `minTokenHarvest` | Raw launch-token units; positive, covered by both token caps |
88
+ | `resalePremiumBps` | 0..5,000 bps |
89
+ | `maxAsks` | 1..8 |
90
+ | `maxAskTokenExposure` | Raw launch-token units; at least ask count and minimum token harvest, at most uint128 max |
91
+ | `maxAcquiredInventory` | Raw launch-token units; at least minimum token harvest, at most uint128 max |
92
+ | `premiumDecaySeconds` | Any uint32 seconds; zero disables decay |
93
+ | `maxBidQuote` | Raw quote-principal ceiling for new/refreshed bids; positive and at most uint128 max |
94
+ | `referenceDeviation` | Tick spacings; nonnegative int24 |
95
+
96
+ For reference pool tick `R`, deviation `D` and spacing `S`, ask lower is at least
97
+ `R - D*S` and bid upper is at most `R + D*S`, with side-appropriate grid rounding.
98
+ The reference comes from the hook's truncated oracle, not an independent spot
99
+ price supplied by the caller.
100
+
101
+ The default helper **requires explicit `maxBidQuote` and `referenceDeviation`**;
102
+ neither has a guessed risk default. All other defaults are preserved: 50% share,
103
+ widths 5/5, gap 1, stale 86,400 seconds/displacement 5, premium 500 bps, 4 asks,
104
+ decay off. Token thresholds are raw market-budget ratios: harvest budget/100,000,
105
+ ask exposure budget/10, inventory budget. Too-small budgets producing zero harvest
106
+ and budgets above uint128 are rejected. WETH quote deploy/harvest thresholds remain
107
+ 0.0005/0.005 ETH; USDG is 1/10 six-decimal units. Catalog symbols/addresses work;
108
+ explicit decimals must match. Other quotes require explicit `minQuoteDeploy` and
109
+ `minQuoteHarvest`; no unsupported asset's USD price or units are inferred.
110
+
111
+ ### V2 fee funding and owner controls
112
+
113
+ V2 reserves the strategy share **on each swap in both pool currencies, after the
114
+ protocol treasury share**, rather than waiting for harvest. The remaining fees
115
+ follow the normal fee-hub distribution. HMM itself does not burn fees and never
116
+ touches the permanently locked launch positions.
117
+
118
+ The browser-safe lifecycle and root exports include complete
119
+ `hmmLiquidityManagerV2Abi`, `hmmFeeCollectorV2Abi`, `hmmFeeCollectorFactoryV2Abi`,
120
+ `hmmFixedHookV2Abi` and `hmmDynamicHookV2Abi`. Use ordinary viem contract calls;
121
+ the SDK adds no speculative transaction wrappers:
122
+
123
+ - Read `strategyOwner()` and `liquidityManager()` on the collector. Authority
124
+ follows the **current** fee owner from the canonical hub/fee-owner registry.
125
+ - Call collector `setStrategyShareBps(uint16)` for 0..10,000 bps. It changes future
126
+ swap reservations, not fees already reserved.
127
+ - Read manager `strategyConfig()` for the complete 15-field tuple, then call
128
+ `setStrategyConfig(HMMStrategyConfigV2)` to update every setting immediately.
129
+ This queues a book refresh for the next maintenance pass. Lowering intake caps
130
+ does not forcibly liquidate existing inventory; existing lots keep their stored
131
+ floor and age. New premium settings apply to newly acquired lots.
132
+ - Read `placementsPaused()` and call `setPlacementsPaused(bool)` on the manager.
133
+ Pausing queues auxiliary-liquidity withdrawal on maintenance and stops new
134
+ placements, not trading or fee collection. It does not withdraw locked launch LP.
135
+
136
+ These writes require the current fee-owner wallet and explicit transaction
137
+ authorization. Read-only planning never invokes them.
138
+
139
+ ### Breaking migration from the earlier HMM SDK
140
+
141
+ Rebuild unstarted HMM plans with the new preset IDs/adapters/graphs, supply both
142
+ new guards, re-encode the 512-byte tail, and re-mine/re-prove the resulting plan.
143
+ Do not pad old 448-byte payloads, reuse an old graph/salt, or relabel old bytes.
144
+ The former `HmmFixedPoolV1` / `HmmDynamicPoolV1` enum members and old HMM metadata
145
+ have no compatibility aliases. Existing onchain HMM V1 profiles/markets were not
146
+ deregistered or upgraded by this SDK release; submitted legacy plans must not be
147
+ mutated into V2 plans. Use tooling matching their original contract release.
148
+
149
+ Independent Solidity ABI fixtures are regenerated with
150
+ `node scripts/generate-hmm-fixtures.mjs` (Foundry `cast abi-encode` / `calldata`).
151
+ To regenerate canonical V2 metadata/ABIs from preserved evidence without RPC or
152
+ onchain writes, use `node --experimental-transform-types
153
+ scripts/generate-hmm-presets.mjs release.json live.json`; both JSON files must be
154
+ the exact V2 release and matching successful admission/pinned-readback records.
76
155
 
77
156
  ## 0.8.1 release
78
157
 
@@ -7,9 +7,11 @@ The default chain-4663 launch cases retain
7
7
  the October8 mined fixed pool-bound V4 config6/V2 and canonical Abyss config1 deployment.
8
8
  The SDK additionally knows the October11 zero-author-royalty Dynamic Fee Hook;
9
9
  its registration does not change the fixed cases' selection or fee schedule.
10
- HMM Fixed/Dynamic are additional October11 presets; their required typed launch
11
- tail and defaults are demonstrated by `hmm-launch-config.ts`. Existing fixed
12
- cases are intentionally unchanged. See the HMM section in the lifecycle guide.
10
+ HMM Fixed/Dynamic V2 are additional admitted October17 presets; their required
11
+ 512-byte typed launch tail and explicit bid/reference guards are demonstrated by
12
+ `hmm-launch-config.ts`. The generic HMM profile keys now select V2 only.
13
+ Existing fixed cases are intentionally unchanged. See the lifecycle guide for
14
+ the breaking migration, per-swap funding and fee-owner configuration/pause ABIs.
13
15
  Historical October5 config5 evidence is not relabeled as these graphs. Discovery
14
16
  is read-only; fixed launch examples default to an unsigned dry run. Only
15
17
  `--broadcast` (or deliberate `--resume` continuation) authorizes real writes.
@@ -22,7 +24,7 @@ examples; their relative support imports use explicit `.ts` extensions for Node
22
24
  | Script | Behavior |
23
25
  | --- | --- |
24
26
  | `quickstart.ts` | Reads the current mainnet orchestrator, checks its registry binding, and discovers admitted profiles. No wallet or writes. |
25
- | `hmm-launch-config.ts` | Pure HMM fixed/dynamic config construction with typed defaults and an automatically appended launch tail; no RPC, signatures or writes. |
27
+ | `hmm-launch-config.ts` | Pure HMM V2 fixed/dynamic config construction with caller-chosen bid/reference guards and an automatically appended 512-byte launch tail; no RPC, signatures or writes. |
26
28
  | `launch.ts` | Reviews/reconstructs an explicit saved plan and selected atomic/staged mode; optional offchain config6/V2 salt mining. Prints simulation, progress, and an admitted unsigned next transaction when evidence permits. |
27
29
  | `generate-lifecycle-commitment-fixture.ts` | Frozen independent historical config4/Abyss ABI bytes/hash/identity vector. Its pre-cutover allocations are not an executable 0.7.1 plan. |
28
30
  | `launch-lifecycle-smoke.ts` | Actual SDK launch/recovery/custody/fee operations, only on an explicitly authorized owned disposable loopback graph. |
@@ -10,7 +10,10 @@ const tokenBudget = 1000000n * 10n ** 18n;
10
10
  for (const key of [KnownLifecycleProfile.V4HmmFixedPool, KnownLifecycleProfile.V4HmmDynamicPool]) {
11
11
  const preset = getKnownLifecycleProfile({ ...identity, key })!;
12
12
  const envelope = preset.profile.envelope!;
13
- const hmmLaunchConfig = defaultHmmLaunchConfig({ tokenBudget, quoteAsset: "USDG", quoteDecimals: 6 });
13
+ // Illustrative caller-chosen guards: at most 100 six-decimal USDG
14
+ // of bid principal, and no ask below/bid above the rounded oracle reference.
15
+ const hmmLaunchConfig = defaultHmmLaunchConfig({ tokenBudget, quoteAsset: "USDG", quoteDecimals: 6,
16
+ maxBidQuote: 100n * 10n ** 6n, referenceDeviation: 0 });
14
17
  // Optional explicit choices: share 2500/5000/10000 bps; decay off/259200 (72h).
15
18
  const config = encodePoolBoundV4LifecycleMarketConfig({
16
19
  version: 6, lpFeePips: 0, tickSpacing: 60, sqrtPriceX96: 1n << 96n,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@black-market/sdk",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "TypeScript SDK for Abyss token launches, swaps, and lending.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -43,7 +43,7 @@
43
43
  "lint": "tsc -p tsconfig.json --noEmit",
44
44
  "prepublishOnly": "pnpm build",
45
45
  "test": "pnpm test:unit",
46
- "test:unit": "pnpm build && node --test test/*.test.mjs",
46
+ "test:unit": "pnpm build && node --import ./test/register-typescript.mjs --test test/*.test.mjs",
47
47
  "test:api": "pnpm build && node --test test/integration/launch-api.read.test.mjs",
48
48
  "test:api:write": "pnpm build && node --test test/integration/launch-api.sessions.test.mjs",
49
49
  "typecheck": "tsc -p tsconfig.json --noEmit"
package/src/abyss.ts CHANGED
@@ -18,6 +18,7 @@ export type AbyssPoolKey = {
18
18
  };
19
19
 
20
20
  export const ABYSS_FEE_TIERS = [
21
+ { feePips: 100, tickSpacing: 1, label: "0.01%" },
21
22
  { feePips: 500, tickSpacing: 10, label: "0.05%" },
22
23
  { feePips: 3_000, tickSpacing: 60, label: "0.30%" },
23
24
  { feePips: 10_000, tickSpacing: 200, label: "1%" },
@@ -5,6 +5,7 @@ import {
5
5
  profileRegistrationV1Components, profileTopologyV1Components, launchEnvelopeV2Components, sourceTermsV3Components,
6
6
  } from "./schema.js";
7
7
  import { poolBoundHookParametersV1Components, poolBoundHookParametersV2Components, v4LifecycleMarketComponents } from "./markets.js";
8
+ export { hmmLiquidityManagerV2Abi, hmmFeeCollectorV2Abi, hmmFeeCollectorFactoryV2Abi, hmmFixedHookV2Abi, hmmDynamicHookV2Abi } from "./hmm-abi.js";
8
9
 
9
10
  const planInput = { name: "plan", type: "tuple", components: launchPlanV1Components } as const;
10
11
  export const launchLifecycleAbi = [
@@ -0,0 +1,71 @@
1
+ import type { Hex } from "viem";
2
+ import type { LaunchEnvelopeV2, AdapterRegistrationV1, ProfileRegistrationV1 } from "../schema.js";
3
+
4
+ // Preserved hooks/hmm-dynamic-v2; admission 0xb9008b2db27f8469aaec0b3daf115acfcdd4e6045052378944479532b1463905.
5
+ // Generated by scripts/generate-hmm-presets.mjs; pinned readback block 91874655.
6
+ export const hmmDynamicEnvelope = Object.freeze({
7
+ artifactDigest: "0xa34e62ffbe33e4665a8f35521ab6168830d1b49e69d64a7078eb2bc910c22fc2",
8
+ reviewManifestDigest: "0x43581c257b85c1de39f22cc4133a0df8609ebab69a1437bd79a0edd2098da31c",
9
+ configBoundsDigest: "0x72e0b2d542556d472a47f9c38b2c91079c72793af847dee77933f0eca203129d",
10
+ termsDigest: "0x1f938732548db1e9e447926e14cfec16a0f0eebb542ee295529a1c19535a59ab",
11
+ topology: 2,
12
+ configVersion: 6,
13
+ economicVersion: 3,
14
+ capabilities: 123n,
15
+ flags: 0n,
16
+ callbackFlags: 6908,
17
+ callbackMask: 16383,
18
+ protocolTreasury: "0x961981916AB6575C3af3eeCecbf6A3b7Fad7C9e1",
19
+ protocolFeeDenominator: 6,
20
+ beneficiary: "0x7cb44b8693b3C350A2BcD4b681aF85365aa27783",
21
+ maximumDeveloperFeeBps: 0,
22
+ bounds: Object.freeze({
23
+ minimumTickSpacing: 1,
24
+ maximumTickSpacing: 32767,
25
+ maximumPositions: 32,
26
+ maximumOracleCardinality: 4096,
27
+ feeModeFlags: 3,
28
+ }),
29
+ graph: Object.freeze({
30
+ manager: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
31
+ hookRoot: "0x0000000000000000000000000000000000000000",
32
+ oracleFactory: "0xe7feF2BC860B25bbdEB6F6AB96d88bAAa77ddad7",
33
+ locker: "0x571880B289f73E265DA25e3D07289Be5cbB55475",
34
+ collectorFactory: "0xB0B3bE89D096e427FBE48041ab57E6AA69826eF7",
35
+ collectorDeployer: "0x8Ca57C7f4A3982d9574d93fa5cBE0b2f6A69C94A",
36
+ hookDeployer: "0xeB9b8C3646Da8fEDea4f0D866D4C74f8eB1B8b71",
37
+ coreCodeHash: "0x9fb8f46c3b980b9db25dfdb487a69a308a86be145860269b4036a4e74480787b",
38
+ managerCodeHash: "0xbd3881180b547f5fe817545743cfb4343e96b1bc6640dcd70c106b0066e95626",
39
+ hookRuntimeCodeHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
40
+ oracleFactoryCodeHash: "0x974fb5c72d91ccb99f1eb4679a5d4432c82bbaa0906b1c2917ec4da3499b7b98",
41
+ lockerCodeHash: "0x970b70cbcc27f7690072a5cb025687d2060e0fc85bb003208eedd9b21b5a0b0e",
42
+ collectorFactoryCodeHash: "0x5c87d0a517f3520bdfe84ba01ca7621dd24236b0973a6f11893bdb591ff74d5c",
43
+ collectorDeployerCodeHash: "0x56f0c8a282d05ef4e4d42c727370aaf02153d26a3efe10d5402fca8d667d9331",
44
+ hookDeployerCodeHash: "0x80f16e4090509d198117ea5bacb1124c4fb847c7a0535ce6c52cc19ad67e634b",
45
+ hookCreationCodeHash: "0xa34e62ffbe33e4665a8f35521ab6168830d1b49e69d64a7078eb2bc910c22fc2",
46
+ codeChunk0: "0xcd36ed8A655a804324FdE228e62F7521dB990c02",
47
+ codeChunk0Hash: "0xd73162845522c086184d0ae6cb572f704a1c3f60483311b09683123fb7e4d39a",
48
+ codeChunk1: "0x8996e0875E5DaB61Ef3B5438d05e69542aB5fba5",
49
+ codeChunk1Hash: "0x3594a628127a8446965a867a682d8a7232372ca0ff57adfba39872093a41fd88",
50
+ sharedHookSalt: "0x0000000000000000000000000000000000000000000000000000000000000000",
51
+ }),
52
+ }) satisfies LaunchEnvelopeV2;
53
+ export const hmmDynamicAdapter = Object.freeze({
54
+ implementation: "0x886ea067b204257F422F14aF15fF58925370D8d3",
55
+ codeHash: "0x4ed9f1ff8516f4acc04b4c6f1601bdd03413ed2c1a9defce9f16631edb40c983",
56
+ capabilities: 123n,
57
+ configVersion: 6,
58
+ enabled: true,
59
+ }) satisfies AdapterRegistrationV1;
60
+ export const hmmDynamicRegistration = Object.freeze({
61
+ adapterId: "0x41651f0ab87e1ac3ce95346e06cab2e9fd11fe5aed569083d5d1253d14b9d6ff",
62
+ configSchema: "0x51c5ca14c40012f78425cd1afb1ea77980da3fed0490a00911a8a4ed34792045",
63
+ dependencyDigest: "0x949ec6492b3f1bd0cff85a9991fe9b48492e57d79dd04c729ad2fe2168b1bdc1",
64
+ venue: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
65
+ factory: "0x0000000000000000000000000000000000000000",
66
+ hook: "0x0000000000000000000000000000000000000000",
67
+ capabilities: 123n,
68
+ enabled: true,
69
+ }) satisfies ProfileRegistrationV1;
70
+ // 28392 bytes; keccak256 0xa34e62ffbe33e4665a8f35521ab6168830d1b49e69d64a7078eb2bc910c22fc2; append the 640-byte PoolBoundHookParametersV2 constructor, not the launch tail.
71
+ export const hmmDynamicCreationCode: Hex = "0x61028060405234610b5257610280616ee88038038091610021826102806110f8565b6102803912610b525760405161028081016001600160401b03811182821017610b695760405261005261028061111b565b8082526100606102a061111b565b602083018190526100726102c061111b565b60408401819052916100856102e061111b565b606085018190529061009861030061111b565b60808601819052916100ab61032061111b565b60a08701819052926100be61034061111b565b60c088018190526100d061036061112f565b908160e08a01526101006102800151928360020b8403610b52576101008a018490526103a051946001600160a01b0386168603610b52576101208b018690526101a09861016098610140988d6101276103c061112f565b9a8b9101528d61013a8c6102800161112f565b9b018b90528d61018061014e61040061113f565b9101528d61015f8d61028001611150565b9c018c90528d6101c0610173610440611150565b9101528d6101e061018561046061111b565b910152610480518015158103610b52576102008f01526104a0516102208f01526104c0516102408f01528d6102606101be6104e061113f565b9101526001600160a01b0316803b159c9095908d156110e5575b8d156110d2575b508c156110bf575b8c156110ac575b8c15611099575b8c15611087575b8c15611071575b508b1561105e575b508a15611048575b8a15611035575b8a15611022575b50891561100f575b508815610ffc575b8815610fe9575b50508615610fda575b508515610fcb575b8515610fba575b508415610fa2575b8415610f77575b508315610f65575b8315610f52575b50508115610f44575b508015610f0b575b8015610ee3575b8015610ecc575b8015610eb0575b8015610e91575b8015610e84575b8015610e71575b8015610e5c575b610ad457602081810151608083015160405163797a759360e11b81526001600160a01b0392831693929091169181600481865afa908115610b5e575f91610e22575b5060608401516001600160a01b0391821691161480159290610da9575b8215610d2d575b8215610cad575b508115610c31575b8115610bae575b50610ad457611afc613fff301603610b9f5760018060a01b0381511660805260018060a01b0360208201511660a05260018060a01b0360408201511660c05260018060a01b0360608201511660e05260018060a01b036080820151166101005260018060a01b0360a08201511661012052604051602081019060018060a01b03835116825260018060a01b03602084015116604082015260018060a01b03604084015116606082015260018060a01b03606084015116608082015260018060a01b0360808401511660a082015260018060a01b0360a08401511660c082015260018060a01b0360c08401511660e082015262ffffff60e08401511661010082015261010083015160020b61012082015260018060a01b036101208401511661014082015262ffffff6101408401511661016082015262ffffff6101608401511661018082015263ffffffff610180840151166101a082015260ff6101a0840151166101c082015260ff6101c0840151166101e082015260018060a01b036101e084015116610200820152610200830151151561022082015261022083015161024082015261024083015161026082015263ffffffff6102608401511661028082015261028081526104ff6102a0826110f8565b5190206101609081526102408201516101809081526101208301516001600160a01b039081166101a05261026084015163ffffffff166101c052918301519083015160181b66ffffffff0000001662ffffff91909116176101e05260c082015160a08301518216911681811091908215610b985780925b15610b9157505b8161020052806102205262ffffff60e08401511661010084015160020b916040519360a0850185811060018060401b03821117610b695760409081526001600160a01b039182168652918116602086019081529185019283526060850193845230608080870191825260a08088206101405296515f80549185166001600160a01b03199283161790559351600180549651975160b81b62ffffff60b81b1662ffffff60a01b9890991b979097169084166001600160d01b03199096169590951794909417959095179093559251600280549184169190941617835583015160c08401516101a085015160ff811694928416939190911691841015610b7d5762ffffff6101408601511660ff6101c0870151169060018060a01b036101e088015116936102008801511515956102208901519760405190610120820182811060018060401b03821117610b695760409081525f83526020830184905282810185905260608301919091526080820185905260a080830187905260c08084018a905260e084018b90526101009093018b9052600380546001600160a01b0319908116909155600480549091166001600160a01b03958616178155600580546001600160c81b0319169686169690961798821b60ff60a01b9081169990991760a89790971b62ffffff60a81b169690961796831b60ff60c01b1696909617909355600680546001600160a81b03191697831697909717971515851b90951696909617909455600795909555858201519086015190841690841611610240526102208501519051825163deee413560e01b815294850191909152909183916024918391165afa8015610b5e575f915f91610b0d575b5062ffffff82168015908115610b00575b508015610af2575b8015610ae3575b610ad4576016805464ffffffffff60c81b191660c89390931b62ffffff60c81b169290921760e09190911b61ffff60e01b1617905560c001516001600160a01b031661026052604051615d89908161115f823960805181818161035801528181610612015281816108e401528181610a9901528181610b5a01528181610c7901528181610f6c01528181611060015281816118b001528181611a6901528181611c9b015281816120220152818161215601528181612b830152818161381e015281816138a801528181614daf01528181614e5601526156ff015260a051818181611f4101528181612a7d015281816137d901528181613a7d0152614b83015260c051818181610de90152613edf015260e05181818161074801528181612e1c015281816131c30152614bca0152610100518181816117d80152818161208e0152818161240101528181612b6101528181614135015281816141c90152818161420101528181614517015281816146730152818161479b01526148790152610120518181816102bf01528181610b230152818161148e0152818161271201528181612dd50152614ad80152610140518181816103360152818161052001528181610f11015281816110b60152818161188f01528181611ecb01528181612001015281816121c401528181612a1401528181612b3f01528181613ac9015281816140e8015281816144ef0152818161464b01528181614773015281816148510152614d8d015261016051816120dc01526101805181610cdd01526101a051818181611ba00152611f0901526101c05181818161179e015261342d01526101e0518181816103930152818161173d01528181611c1501526121fe015261020051818181612bb10152614278015261022051818181612c93015281816136ff01526142a00152610240518181816109c801528181611de501526155f401526102605181610a620152f35b63c52a9bd360e01b5f5260045ffd5b5061100061ffff82161161080e565b50600261ffff821610610807565b620d89e89150115f6107ff565b9150506040813d604011610b56575b81610b29604093836110f8565b81010312610b52576020610b3c8261112f565b9101519061ffff82168203610b5257905f6107ee565b5f80fd5b3d9150610b1c565b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b905061057d565b8192610576565b632a96f9e160e21b5f5260045ffd5b60405163dc4c90d360e01b81529150602090829060049082905afa908115610b5e575f91610bef575b5081516001600160a01b03918216911614155f61032c565b90506020813d602011610c29575b81610c0a602093836110f8565b81010312610b5257516001600160a01b0381168103610b52575f610bd7565b3d9150610bfd565b604051630b775e8f60e11b8152909150602081600481855afa908115610b5e575f91610c73575b5060208301516001600160a01b039182169116141590610325565b90506020813d602011610ca5575b81610c8e602093836110f8565b81010312610b5257610c9f9061111b565b5f610c58565b3d9150610c81565b604051636bdcb6a760e11b8152919250602090829060049082905afa908115610b5e575f91610cf3575b5060808301516001600160a01b0391821691161415905f61031d565b90506020813d602011610d25575b81610d0e602093836110f8565b81010312610b5257610d1f9061111b565b5f610cd7565b3d9150610d01565b604051630c7f7fb960e41b8152909250602081600481865afa908115610b5e575f91610d6f575b5060408401516001600160a01b039182169116141591610316565b90506020813d602011610da1575b81610d8a602093836110f8565b81010312610b5257610d9b9061111b565b5f610d54565b3d9150610d7d565b60405163dc4c90d360e01b8152909250602081600481865afa908115610b5e575f91610de8575b5083516001600160a01b03918216911614159161030f565b90506020813d602011610e1a575b81610e03602093836110f8565b81010312610b5257610e149061111b565b5f610dd0565b3d9150610df6565b90506020813d602011610e54575b81610e3d602093836110f8565b81010312610b5257610e4e9061111b565b5f6102f2565b3d9150610e30565b50602063ffffffff61026083015116116102b0565b5063ffffffff61026082015116156102a9565b50610240810151156102a2565b506101e081015160808201516001600160a01b0390811691161461029b565b506101e081015181516001600160a01b03908116911614610294565b506101e08101516001600160a01b0316301461028d565b5060ff6101c0820151161515801561028657506101e08101516001600160a01b031615610286565b5060ff6101c0820151168015159081610f25575b5061027f565b6004811091508115610f39575b505f610f1f565b600a9150115f610f32565b6001915060ff16115f610277565b62ffffff90811691161191505f8061026e565b620f424062ffffff8216119350610267565b73fffd8963efd1fc6a506488495d951d5263988d266001600160a01b0391909116101593505f61025f565b6401000276a36001600160a01b038216109450610258565b617fff91955060020b13935f610250565b945060018560020b1294610249565b62ffffff16151595505f610241565b6001600160a01b03161496505f80610238565b6001600160a01b03811630149850610231565b6001600160a01b0316301498505f610229565b6001600160a01b0316301499505f610221565b6001600160a01b03811684149a5061021a565b6001600160a01b03808216908316149a50610213565b6001600160a01b031630149a505f61020b565b6001600160a01b038083169116149b505f610203565b6001600160a01b038216159c506101fc565b6001600160a01b0381163b159c506101f5565b6001600160a01b0385163b159c506101ee565b6001600160a01b0384163b159c506101e7565b6001600160a01b03163b159c505f6101df565b6001600160a01b0384163b159d506101d8565b601f909101601f19168101906001600160401b03821190821017610b6957604052565b51906001600160a01b0382168203610b5257565b519062ffffff82168203610b5257565b519063ffffffff82168203610b5257565b519060ff82168203610b525756fe60806040526004361015610011575f80fd5b5f5f3560e01c80630268e29314613a4d5780630581555f14613a335780630885f7321461390a57806321d0ee7014613892578063259982e5146138085780632b20e397146137c4578063338274381461379a578063354a85631461377b578063359b4f301461375d5780633e451d6a1461373657806342ea83e014612a3757806347f8496c146129fd57806350fb3a3a146129335780635341d8d7146129145780635524d548146128e6578063575e24b4146120ff5780635955d09a146120c457806360f89f2e14611fbc578063654f631c14611f855780636fe7e6eb14611c5a578063747a68cd14611c395780637dbeb94e14611bf9578063847211a614611bcf5780638bc801c114611b8a57806391dd734614611a36578063921b0bed146118075780639759164a146117c25780639e5fe06214611781578063a3f4bac714611764578063a869111414611720578063aae49d7014611702578063ac4e4054146116e5578063ac5555aa146116b3578063b47b2fb114611004578063b6a8b0fa14610f53578063c5c51dca14610e6f578063c5fbb29814610e36578063c67046af14610e18578063c7f7fb9014610dd3578063ca266dfe14610d00578063ce1b8e4f14610cc5578063d2be662514610ca8578063dc4c90d314610c63578063dd71cea814610be7578063e16ccbb014610969578063e1b4af69146108cc578063e2e65ec1146108ab578063e3daf45614610801578063f11457c714610777578063f2f4eb2614610732578063f399150c14610485578063f9bc70e7146102ee578063fc0c546a146102a95763fd5b6d5b1461026c575f80fd5b346102a65760403660031901126102a6576020600261029c61028c613b47565b6102976004356140e6565b61426a565b0154604051908152f35b80fd5b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a65760603660031901126102a6573068929eee149b4bd2126854146104785760ff60125460081c161561046a57610327614a3e565b61032f613d45565b5062ffffff7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000090610382848361499f565b50949091941661045b57506103b8847f000000000000000000000000000000000000000000000000000000000000000093614c8d565b90600435801515918282036102a657602061044e888863ffffffff8962ffffff8a8a6005549160ff8360a01c1696604051986103f38a613cbc565b89526001600160a01b03168a8901526001600160801b031660408801526024356060880152608087015260a81c1660a085015262ffffff811660c085015260181c1660e083015261044381613b29565b610100820152614d1a565b62ffffff60405191168152f35b63c52a9bd360e01b8252600482fd5b62820f3560e61b8152600490fd5b63ab143c0690526004601cfd5b50346102a65760a03660031901126102a6573068929eee149b4bd212685414610478573068929eee149b4bd212685560ff601554166107235780816104c8614092565b6003546001600160a01b03163303610715576008541580159061070a575b610559575b60408093505182815281602082015233907f4a93be8d0a356d70b54fdf016f78a2ed8b8a3c420952848eb4f4b2c4546405b6857f000000000000000000000000000000000000000000000000000000000000000092a33868929eee149b4bd212685582519182526020820152f35b505060405190602082016004356001600160a01b038116908190036106f55781526024356001600160a01b038116908190036106f557604084015260443562ffffff81168091036106f55760608401526064358060020b8091036106f55760808401526084356001600160a01b038116908190036106f55792829161060d9460a083015260a082526105ec60c083613d22565b81519020601455604051809481926348c8949160e01b835260048301613c3b565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19182156106fd57819261067c575b5060145461066d57506106688160208060409451830101910161407c565b6104eb565b63f7a632f560e01b8152600490fd5b908092503d8082843e61068f8184613d22565b8201916020818403126106f9578051906001600160401b0382116106f5570182601f820112156106f95780516106c481613fbd565b936106d26040519586613d22565b818552602082840101116106f5578060208093018386015e83010152905f61064a565b8280fd5b5080fd5b50604051903d90823e3d90fd5b50600c5415156104e6565b6282b42960e81b8352600483fd5b63558a1e0360e11b8152600490fd5b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a65760203660031901126102a6576107946004356140e6565b61010060165461ffff604051918181168352818160101c166020840152818160201c1660408401528060301c60020b606084015260018060401b038160481c16608084015260018060401b038160881c1660a08401528060c81c60020b60c084015260e01c1660e0820152f35b50346102a657806003193601126102a6576003546040516371ed7a2b60e11b815290602090829060049082906001600160a01b03165afa9081156108a057829161085a575b6040516001600160a01b0383168152602090f35b90506020813d602011610898575b8161087560209383613d22565b810103126106f957516001600160a01b03811681036106f957602091505f610846565b3d9150610868565b6040513d84823e3d90fd5b50346102a65760403660031901126102a6576020600161029c61028c613b47565b50346102a6576108db36613c65565b509294935050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303905061095b5760ff60155416610723573068929eee149b4bd212685414610478576109418261093c816140d6565b614765565b610949615550565b60405163e1b4af6960e01b8152602090f35b6282b42960e81b8152600490fd5b50346102a657806003193601126102a6573068929eee149b4bd212685414610478573068929eee149b4bd212685560ff601554166107235762010016546001600160a01b0381163303610bd95760165461ffff8160101c1615610bca577f000000000000000000000000000000000000000000000000000000000000000015610bbf576109fb9060301c60020b6153bc565b62010017549162010018549084620100175584620100185583610b0c575b81610a45575b50606093503868929eee149b4bd2126855604051928352602083015260020b6040820152f35b6040516304ade6db60e11b81529060209082908190610a949086907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906004850161405a565b0381887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610b01576060955015610a1f57610af39060203d602011610afa575b610aeb8183613d22565b810190614042565b505f610a1f565b503d610ae1565b6040513d87823e3d90fd5b6040516304ade6db60e11b815260208180610b55887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876004850161405a565b0381897f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610bb457610b95575b50610a19565b610bad9060203d602011610afa57610aeb8183613d22565b505f610b8f565b6040513d88823e3d90fd5b60301c60020b6109fb565b6329d9e10560e01b8352600483fd5b6282b42960e81b8252600482fd5b50346102a65760403660031901126102a65760243590610c086004356140e6565b61ffff821015610c4f57608082601701546040519063ffffffff811682528060201c60060b602083015260018060a01b038160581c16604083015260f81c15156060820152f35b634e487b7160e01b81526032600452602490fd5b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a657806003193601126102a65760206040516110008152f35b50346102a657806003193601126102a65760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346102a65760203660031901126102a6578060a0916080604051610d2481613d07565b8281528260208201528260408201528260608201520152610d466004356140e6565b60405190610d5382613d07565b600180841b039054169081815260015462ffffff60208301600180871b038316815260408401908284881c168252606085019360b81c60020b84526080600180891b03600254169501948552604051958652600180881b039051166020860152511660408401525160020b6060830152600180841b039051166080820152f35b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a657806003193601126102a6575060405160018152602090f35b50346102a65760203660031901126102a657610e536004356140e6565b60165460405160889190911c6001600160401b03168152602090f35b50346102a657806003193601126102a65760125460ff168015610f4b5760ff60015b16610eb4610e9e82613ff3565b91610eac6040519384613d22565b808352613ff3565b602082019290601f1901368437610f08575b90604051928392602084019060208552518091526040840192915b818110610eef575050500390f35b8251845285945060209384019390920191600101610ee1565b805115610f37577f00000000000000000000000000000000000000000000000000000000000000008252610ec6565b634e487b7160e01b83526032600452602483fd5b60ff82610e91565b50346102a657610f6236613c65565b50909350909190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610ff6573068929eee149b4bd212685414610fe95760ff60155416610fda57610fc89350610fc3816140d6565b614843565b604051635b54587d60e11b8152602090f35b63558a1e0360e11b8452600484fd5b63ab143c0684526004601cfd5b6282b42960e81b8452600484fd5b50346102a6576101603660031901126102a65761101f613b5d565b60a03660231901126106f95760603660c31901126106f9576101243591610144356001600160401b0381116106f95761105c903690600401613b9d565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169133839003610bd9573068929eee149b4bd2126854146116a65760ff60155416611697576110b46140c6565b7f00000000000000000000000000000000000000000000000000000000000000006011549163ffffffff8316908115908115611680575b5061166e575f190163ffffffff811161165a5762ffffff16918360105563ffffffff191660115561111a61463d565b611122614350565b936001600160a01b038086169490611138613e17565b16850361164c576044356001600160a01b03811681036106f957945b8415158097819861163c575b506115d0575b508095806115c1575b6111ae575b60408661118d898060801b15159060801c151516615510565b815163b47b2fb160e01b81526001600160801b03909116600f0b6020820152f35b9394506001600160a01b038086169492939192916111ea916111ce613e17565b1686036115b5576111e58860801d5b600f0b61441a565b614448565b9485156111745760ff60055460c01c163068929eee149b4bd2126854146115a8573068929eee149b4bd21268556112208661426a565b91611231835460028501549061493a565b8361123b82614925565b8a11611597575b5050508061155c575081925b611258848861493a565b600354604051632637166b60e11b815290602090829060049082906001600160a01b03165afa908115610b01578591611506575b506112b46127106112a76112dc9461ffff6003951690614965565b048061148c575b8a61493a565b936112c0858254614978565b8155600181016112d1888254614978565b905501928354614978565b8255604051627eeac760e11b815291602083806112fd8a3060048401614985565b0381855afa928315611434578493611458575b50813b1561145457604051630ab714fb60e11b81528481806113378c8c306004850161405a565b038183875af18015610b015790859161143f575b505060206040518093627eeac760e11b8252818061136d8c3060048401614985565b03915afa9182156114345784926113fc575b50878383109384156113ef575b505082156113e4575b50506113d5575091604094915f516020615d295f395f51905f528661118d958151908882526020820152a33868929eee149b4bd2126855925f8080611174565b63104eed1d60e31b8152600490fd5b541190505f80611395565b830314159250875f61138c565b9091506020813d60201161142c575b8161141860209383613d22565b810103126114285751905f61137f565b5f80fd5b3d915061140b565b6040513d86823e3d90fd5b8161144991613d22565b61145457835f61134b565b8380fd5b9092506020813d602011611484575b8161147460209383613d22565b810103126114285751915f611310565b3d9150611467565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a036114ee576114ca816201001754614978565b62010017555b89895f516020615d695f395f51905f526020604051858152a36112ae565b6114fc816201001854614978565b62010018556114d0565b90506020813d602011611554575b8161152160209383613d22565b81010312611550576112b46127106112a76112dc9461ffff611544600396613eb1565b9550509450505061128c565b8480fd5b3d9150611514565b6115669087614947565b607d810290808204607d149015171561158357606490049261124e565b634e487b7160e01b83526011600452602483fd5b6115a092614e45565b5f8083611242565b63ab143c0683526004601cfd5b6111e588600f0b6111dd565b506115cb85614395565b61116f565b60e435906115e1866111e58461441a565b806115ee575b5050611166565b611612916001600160a01b03611602613e17565b1603611632578960801d92613fd8565b90600f0b03611623575f80806115e7565b63161b48a960e21b8152600490fd5b89600f0b92613fd8565b6116469150614395565b5f611160565b611654613e17565b94611154565b634e487b7160e01b84526011600452602484fd5b6001620787ab60e51b03198452600484fd5b905061168f601054918461535d565b14155f6110eb565b63558a1e0360e11b8252600482fd5b63ab143c0682526004601cfd5b50346102a65760203660031901126102a6576116d06004356140e6565b602060ff60125460081c166040519015158152f35b50346102a657806003193601126102a6576020604051611afc8152f35b50346102a657806003193601126102a6576020604051620f42408152f35b50346102a657806003193601126102a657602060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000060181c168152f35b50346102a657806003193601126102a6576020604051613fff8152f35b50346102a657806003193601126102a657602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a65760403660031901126102a6576024356001600160401b0381116106f957366023820112156106f9576004810135906001600160401b0382116106f5573660248360051b830101116106f5576118636004356140e6565b6016549261ffff8460101c16908115611a27574263ffffffff169461ffff81169060301c60020b6118d47f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614c8d565b926118de87613ff3565b976118ec604051998a613d22565b8789526118f888613ff3565b60208a019790601f190136893761190e89613ff3565b9761191c604051998a613d22565b8989526119288a613ff3565b60208a019190601f1901368337845b8b81101561199e5760248160051b8501013563ffffffff8116810361199a57908b61198e8f8390818f8f8f918f9161197f938f9360019c61197795615207565b92909661400a565b90878060a01b0316905261400a565b9060060b905201611937565b8680fd5b8a8d84888560405194859460408601906040875251809152606086019290845b818110611a0b575050506020908583038287015251918281520192915b8181106119e9575050500390f35b82516001600160a01b03168452859450602093840193909201916001016119db565b825160060b8552889750602094850194909201916001016119be565b6329d9e10560e01b8152600490fd5b50346102a65760203660031901126102a6576004356001600160401b0381116106f957611a67903690600401613b9d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610715576014548015908115611b46575b50611b375782601455810160a0828203126106f557611ac291613d98565b90611acf60a083206140e6565b60ff60125460081c161561046a57611b3382611b0a611af660018060a01b03835116614c01565b6020909201516001600160a01b0316614c01565b604051916020830152604082015260408152611b27606082613d22565b60405191829182613c3b565b0390f35b63f7a632f560e01b8352600483fd5b9050611b5182613fbd565b611b5e6040519182613d22565b82815260208101903684860111611b865783858337856020858301015251902014155f611aa4565b8580fd5b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a65760203660031901126102a657611bec6004356140e6565b6020601354604051908152f35b50346102a657806003193601126102a657602060405162ffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a65760203660031901126102a6576020600361029c610297613b5d565b50346102a6576101003660031901126102a657611c75613b5d565b9060a03660231901126102a657611c8a613b73565b9160e435928360020b84036106f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610715573068929eee149b4bd2126854146115a857604051611ce681613d07565b6024356001600160a01b03811681036115505781526044356001600160a01b038116810361155057602082015260643562ffffff811681036115505760408201526084358060020b810361155057606082015260a4356001600160a01b0381168103611550578160a0916080611d5e940152206140e6565b6012549160ff831615928315611f77575b508215611f3f575b508115611f07575b5061046a57602091604051611d9381613cec565b4263ffffffff908116825284820184815260408301859052600160608401529151915166ffffffffffffff16851b911617605883901b600160581b600160f81b031617600160f81b17601755601654907f000000000000000000000000000000000000000000000000000000000000000015611f0157611e12906153bc565b905b60309190911b62ffffff60301b1662010000600160c81b0319909116174360481b600160481b600160881b03168181174260881b600160881b600160c81b0316908117640100010000908117601681905593179290919060029060e01c61ffff16808211611ef9575b5061ffff861b90861b169261ffff861b191617171760165561010061ff00196012541617601255604051907febcc9ffea17e08841d7588f2ecd87720e1cfb444bb3b5e662c4a5005c3c94ab27f00000000000000000000000000000000000000000000000000000000000000009180a2636fe7e6eb60e01b8152f35b90505f611e7d565b90611e14565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116141590505f611d7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116141591505f611d77565b60081c60ff1692505f611d6f565b50346102a65760203660031901126102a657604061ffff611fa7600435613ec0565b62ffffff849392935193168352166020820152f35b50346102a657366003190160e081126106f95760a0136102a65760a4356001600160a01b038116908190036106f957611ff3613b73565b90611ffc614092565b6120467f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061499f565b50506003546001600160a01b031690921480159391925061208c575b50811561207a575b5061046a57612077614a3e565b80f35b6001600160a01b03161590505f61206a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116141591505f612062565b50346102a657806003193601126102a65760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034611428576101403660031901126114285761211a613b5d565b60a03660231901126114285760603660c319011261142857610124356001600160401b03811161142857612152903690600401613b9d565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381169290338490036128d8573068929eee149b4bd2126854146128285760ff601554166128c95762ffffff906121b16140c6565b6121b9614242565b6121c1613d45565b507f0000000000000000000000000000000000000000000000000000000000000000906121ee828261499f565b5094909194166128ba57612223837f000000000000000000000000000000000000000000000000000000000000000093614c8d565b9060e4359160c4359384151594858103611428575063ffffffff6005549162ffffff60ff8460a01c16936040519a61225a8c613cbc565b8a8c526001600160a01b031660208c01526001600160801b0390951660408b0190815260608b0188905260808b0189905260a89590951c1660a08a015262ffffff811660c08a015260181c1660e08801526122b481613b29565b610100870152516011546001600160801b03909116979063ffffffff166128ab576122ea906122e4875197614d1a565b9661535d565b60105562ffffff8516966001880163ffffffff81116128035763ffffffff1663ffffffff19601154161760115560018060401b0360165460481c16430361289b575b5050612336614350565b935f9615158061288c575b612876575b506040516364b3357d60e11b8152916024356001600160a01b038116908190036114285760048401526044356001600160a01b0381169081900361142857602484015260643562ffffff81168091036114285760448401526084358060020b80910361142857606484015260a4356001600160a01b0381169081900361142857608484015260a483015260c4820152610104356001600160a01b038116908190036114285760e48201526101048101859052602081610124817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156126d1575f90612842575b6124619150612445613ea2565b1561283b57805b612454613ea2565b1561283557505f906144e1565b83612488575b60608484604051916315d7892d60e21b835260801b60208301526040820152f35b60ff60055460c01c16913068929eee149b4bd212685414612828573068929eee149b4bd21268556001600160a01b038116926124c38461426a565b916124d4835460028501549061493a565b836124de82614925565b8911612817575b505050806127dc57505f955b60046124fd888861493a565b600354604051632637166b60e11b81529260209184919082906001600160a01b03165afa9182156126d1575f9261278a575b5061255761271061254a60039361ffff612574961690614965565b0480612710575b8961493a565b93612563858254614978565b8155600181016112d18b8254614978565b8255604051627eeac760e11b81529160208380612595883060048401614985565b0381855afa9283156126d1575f936126dc575b50813b1561142857604051630ab714fb60e11b81525f81806125cf8b8a306004850161405a565b038183875af180156126d1576126bc575b5060206040518093627eeac760e11b825281806126018a3060048401614985565b03915afa918215610bb4578692612688575b508683831093841561267b575b50508215612670575b5050612661575f516020615d295f395f51905f5260406060968151908782526020820152a33868929eee149b4bd21268555f80612467565b63104eed1d60e31b8352600483fd5b541190505f80612629565b830314159250865f612620565b9091506020813d6020116126b4575b816126a460209383613d22565b810103126114285751905f612613565b3d9150612697565b6126c99196505f90613d22565b5f945f6125e0565b6040513d5f823e3d90fd5b9092506020813d602011612708575b816126f860209383613d22565b810103126114285751915f6125a8565b3d91506126eb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031688036127725761274e816201001754614978565b62010017555b87875f516020615d695f395f51905f526020604051858152a3612551565b612780816201001854614978565b6201001855612754565b91506020823d6020116127d4575b816127a560209383613d22565b810103126114285761255761271061254a60039361ffff6127c861257497613eb1565b9650509350505061252f565b3d9150612798565b6127e69086614947565b607d810290808204607d14901517156128035760649004956124f1565b634e487b7160e01b5f52601160045260245ffd5b61282092614e45565b5f80836124e5565b63ab143c065f526004601cfd5b906144e1565b5f9061244c565b506020813d60201161286e575b8161285c60209383613d22565b81010312611428576124619051612438565b3d915061284f565b8196506111e56128859261441a565b945f612346565b5061289685614395565b612341565b6128a49161558f565b5f8061232c565b6307f8785560e51b5f5260045ffd5b63c52a9bd360e01b5f5260045ffd5b63558a1e0360e11b5f5260045ffd5b6282b42960e81b5f5260045ffd5b34611428576020366003190112611428576129026004356140e6565b602060ff601254166040519015158152f35b34611428575f3660031901126114285760206201001854604051908152f35b346114285760403660031901126114285760043560243561ffff811690818103611428573068929eee149b4bd2126854146128285790612972836140e6565b6016549061ffff8260e01c168091116129f3575b5061ffff6129999160201c1691826142e6565b6016805461ffff60201b1916602083901b61ffff60201b1617905561ffff168082036129c157005b7f04f592d3848fffa22f73de92a2fd8da837e6d597f468af77c6fc619b478362ae9160409182519182526020820152a2005b915061ffff612986565b34611428575f3660031901126114285760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346114285736600319016101c081126114285760a013611428576101203660a3190112611428573068929eee149b4bd212685414612828573068929eee149b4bd21268557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316338190036128d857604051612ab981613d07565b6004356001600160a01b03811681036114285781526024356001600160a01b038116810361142857602082015260443562ffffff811681036114285760408201526064358060020b81036114285760608201526084356001600160a01b0381168103611428578160a0916080612b31940152206140e6565b6012549060ff8216613727577f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000612bac858261499f565b5050507f000000000000000000000000000000000000000000000000000000000000000090813b159081156136fd575b81156136ea575b5080156136c2575b8015613698575b8015613667575b8015613643575b8015613623575b80156135f8575b80156135d5575b80156135c6575b80156135b6575b801561359a575b8015613581575b8015613565575b6128ba57612c44613e01565b916001600160a01b031690612c588361504d565b51928360a01c611428576040516371a9730560e01b81525f92602082600481865afa1561355c5760203d106114285781516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693921691903d601f19810182116001600160401b0383111761142857602082843e8251906001600160401b03821190839003601f190160051c8211176114285760021461353d575b5050612d0783615075565b518060a01c611428576001600160a01b03168514801594906134f9575b84156134b8575b8415613488575b8415613455575b84156133ff575b84156133d9575b8415613398575b8415613365575b841561332b575b84156132f7575b84156132b2575b84156132a9575b50831561329f575b831561328c575b8315613276575b8315613260575b831561324d575b831561323a575b508215613227575b50811561320f575b81156131f6575b506128ba57612dc18261509d565b51918260a01c611428576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116931683148015906131ae575b8015613174575b6128ba5760405163086fce0d60e11b81527f000000000000000000000000000000000000000000000000000000000000000093909261016084600481885afa1561316b576101603d1061142857604084015190602085019460058311865160201c176114285760608101976101408201895b81811061315a575050815198891594851561314e575b508415613142575b508315613133575b508215613124575b821561310a575b82156130fb575b50506128d8576101c063ffffffff60249451169460405194858092636373dff160e11b82528960048301525afa156130f2576101c03d106114285760a08301519460058611600160808601511117604085015160a01c176114285760c08401906101208501825b8181106130e157506101a08601905b8181106130d0575050845114958615966130c4575b5085156130b8575b5050831561309e575b50821561308e575b50506128d857612f6d6101a435613ec0565b6016549162ffffff8360c81c60020b911660020b1491821592613077575b50506128ba5760046020612f9d613e01565b6040516306704e8760e31b815292839182905afa601f3d1116156114285751908160a01c61142857604051637f5a7c7b60e01b8152602081600481865afa601f3d11161561142857518060a01c6114285730036128ba5762010016919091556001906001600160a01b0361300f613e01565b16828060a01b0319600354161760035560ff19161760125560018060a01b03613036613e01565b6001600160a01b03909216929116907ffafdbdd88ac30f0aa936e576be61816ea751908540523fa81b80c4a406ad7bec5f80a43868929eee149b4bd2126855005b61ffff919250819060e01c16911614158480612f8b565b6101400151111590508480612f5b565b60e08201516001600160a01b039091161415925086612f53565b51141593508780612f4a565b60011415955089612f42565b805160201c61142857602001612f2d565b805160a01c61142857602001612f1e565b823d5f823e3d90fd5b60e00151141590508980612eb7565b60c08101516005546001600160a01b031614159250612eb0565b60a08101518414159250612ea9565b6080820151141592508b612ea1565b5181141593508c612e99565b6001141594508d612e91565b805160a01c61142857602001612e7b565b833d5f823e3d90fd5b5060405163b3f05b9760e01b8152602081600481855afa156131a65760203d1061142857516001811115612e09575f80fd5b3d5f823e3d90fd5b506131b8816150c5565b518060a01c611428577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415612e02565b6006546001600160a01b03918216911614905087612db3565b6006546001600160a01b038581169116149150612dac565b6001600160a01b03851614915088612da4565b6001600160a01b03861614925089612d9c565b6001600160a01b03861685149350612d95565b6001600160a01b03868116908a16149350612d8e565b6001600160a01b03868116908416149350612d87565b6001600160a01b03861630149350612d80565b853b159350612d79565b1593508a612d71565b9350604051630961712f60e01b81528a60048201526020816024818d5afa156131a65760203d1061142857518060a01c611428576001600160a01b0316151593612d6a565b9350604051635c0af38360e01b81528a60048201526020816024818d5afa156131a65760203d106114285751151593612d63565b9350604051630323715f60e11b81528a60048201526020816024818d5afa156131a65760203d106114285751600181116114285793612d5c565b935060405162e568cf60e71b81528a60048201526020816024818d5afa156131a65760203d106114285751151593612d55565b604051630b775e8f60e11b81529094506020816004818d5afa156131a65760203d1061142857518060a01c611428576001600160a01b031687141593612d4e565b93506133e489615075565b518060a01c611428576001600160a01b031685141593612d47565b604051634f2ff03160e11b8152909450602081600481875afa156131a65760203d10611428575163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016141593612d40565b60405163182148ef60e01b815290945060a081600481875afa156131a65760a03d106114285760a08b9120141593612d39565b604051631f06e1a760e11b8152909450602081600481875afa156131a65760203d1061142857518a141593612d32565b604051636620eee760e11b8152909450602081600481875afa156131a65760203d1061142857518060a01c611428576001600160a01b031630141593612d2b565b604051636bdcb6a760e11b8152909450602081600481875afa156131a65760203d1061142857518060a01c611428576001600160a01b038a81169116141593612d24565b604091929550602001823e838260208301511491511416928a80612cfc565b503d5f823e3d90fd5b5061356e613e01565b6001600160a01b03838116911614612c38565b50306001600160a01b03613593613e01565b1614612c31565b506135a3613e01565b6001600160a01b03868116911614612c2a565b506135bf613e01565b3b15612c23565b506007546101a4351415612c1c565b506101843580151590818103611428575060ff60065460a01c1615151415612c15565b50610164356001600160a01b0381169081810361142857506006546001600160a01b03161415612c0e565b506101443560ff81168091036114285760ff60055460c01c161415612c07565b506101243562ffffff81168091036114285762ffffff60055460a81c161415612c00565b506101043560028110156114285760ff60055460a01c169061368882613b29565b61369181613b29565b1415612bf9565b5060e4356001600160a01b0381169081810361142857506005546001600160a01b03161415612bf2565b5060c4356001600160a01b0381169081810361142857506001600160a01b0386161415612beb565b6001600160a01b03161515905087612be3565b7f00000000000000000000000000000000000000000000000000000000000000003b159150612bdc565b630ea075bf60e21b5f5260045ffd5b34611428576020366003190112611428576020613754610297613b5d565b54604051908152f35b3461142857604036600319011261142857602061375461028c613b47565b34611428575f3660031901126114285760206201001754604051908152f35b34611428575f3660031901126114285762010016546040516001600160a01b039091168152602090f35b34611428575f366003190112611428576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346114285761381636613bca565b5091929091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036128d8573068929eee149b4bd21268541461282857816138739161386e613880956140d6565b61410e565b61387b614242565b614d7a565b60405163259982e560e01b8152602090f35b34611428576138a036613bca565b5091929091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036128d8573068929eee149b4bd212685414612828578161387b9161386e6138f8956140d6565b60405163021d0ee760e41b8152602090f35b3461142857602036600319011261142857613923613d45565b5061392f6004356140e6565b61012060405161393e81613cbc565b6003546001600160a01b03908116825260045481166020830190815260055491821660408401908152909160608401919060ff9060a081901c821661398281613b29565b845262ffffff60a882901c81166080880190815260c092831c841660a0808a019182526006546001600160a01b03808216968c01968752911c8616151560e08b019081526007546101008c01908152604080519c5184168d529a51831660208d01529751909116988a019890985295519496959294613a0081613b29565b606089015251166080870152511660a0850152516001600160a01b031660c084015251151560e083015251610100820152f35b34611428575f3660031901126114285760206040515f8152f35b346114285760a0366003190112611428573068929eee149b4bd212685414612828573068929eee149b4bd21268557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036128d857613ab3614092565b601354613b1a5742601355613ac66154aa565b427f00000000000000000000000000000000000000000000000000000000000000007ff1bac50d2c6f6c83cb8ff6fac488b03adc5fb0cc9fae30db2077588d5d9e5fbd5f80a33868929eee149b4bd2126855005b6304c7cf6760e51b5f5260045ffd5b60021115613b3357565b634e487b7160e01b5f52602160045260245ffd5b602435906001600160a01b038216820361142857565b600435906001600160a01b038216820361142857565b60c435906001600160a01b038216820361142857565b35906001600160a01b038216820361142857565b9181601f84011215611428578235916001600160401b038311611428576020838186019501011161142857565b90610160600319830112611428576004356001600160a01b0381168103611428579160a060231982011261142857602491608060c3198301126114285760c49161014435906001600160401b03821161142857613c2991600401613b9d565b9091565b35908160020b820361142857565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610120600319820112611428576004356001600160a01b0381168103611428579160a06023198301126114285760249160c4359160e4359161010435906001600160401b03821161142857613c2991600401613b9d565b61012081019081106001600160401b03821117613cd857604052565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b03821117613cd857604052565b60a081019081106001600160401b03821117613cd857604052565b601f909101601f19168101906001600160401b03821190821017613cd857604052565b60405190613d5282613cbc565b5f610100838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b359062ffffff8216820361142857565b91908260a091031261142857604051613db081613d07565b6080613dfc818395613dc181613b89565b8552613dcf60208201613b89565b6020860152613de060408201613d88565b6040860152613df160608201613c2d565b606086015201613b89565b910152565b60a4356001600160a01b03811681036114285790565b6024356001600160a01b03811681036114285790565b6080906001600160a01b03613e4182613b89565b1683526001600160a01b03613e5860208301613b89565b16602084015262ffffff613e6e60408301613d88565b166040840152613e8060608201613c2d565b60020b60608401526001600160a01b0390613e9c908301613b89565b16910152565b60c43580151581036114285790565b519061ffff8216820361142857565b6040805163deee413560e01b81526004810192909252909190826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156126d1575f925f92613f6e575b508162ffffff8416908115918215613f61575b508115613f52575b8115613f42575b506128ba57565b611000915061ffff16115f613f3b565b600261ffff8216109150613f34565b620d89e81091505f613f2c565b925090506040823d604011613fb5575b81613f8b60409383613d22565b810103126114285781519162ffffff83168303611428576020613fae9101613eb1565b905f613f19565b3d9150613f7e565b6001600160401b038111613cd857601f01601f191660200190565b9190915f838201938412911290801582169115161761280357565b6001600160401b038111613cd85760051b60200190565b805182101561401e5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b61ffff82101561401e5701905f90565b90816020910312611428575180151581036114285790565b6001600160a01b03918216815291166020820152604081019190915260600190565b9190826040910312611428576020825192015190565b6140a860a06140a2366004613d98565b206140e6565b60ff60125460081c16156140b857565b62820f3560e61b5f5260045ffd5b6140a860a06140a2366024613d98565b60a06140a26140a8923690613d98565b7f0000000000000000000000000000000000000000000000000000000000000000036140b857565b9060ff60155416809181926141f4575b506128c95760135461416e57506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691160361415f57565b637cd5a0ad60e01b5f5260045ffd5b60ff60065460a01c1691826141bc575b8261419b575b505061418c57565b630af9fb3360e21b5f5260045ffd5b90915081156141ad575b505f80614184565b9050620100165414155f6141a5565b6001600160a01b038082167f00000000000000000000000000000000000000000000000000000000000000009091161415925061417e565b6001600160a01b038481167f00000000000000000000000000000000000000000000000000000000000000009091161480159250614234575b505f61411e565b60409150013515155f61422d565b60155460ff8160081c16614267576101009061425c614a3e565b61ff00191617601555565b50565b6001600160a01b03908116907f00000000000000000000000000000000000000000000000000000000000000001681146142e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146142db5762820f3560e61b5f5260045ffd5b600c90565b50600890565b61ffff81169081156143415761ffff83169182111561433b576017905b8261ffff8216106143145750505090565b61ffff81101561401e5760018161ffff9284018263ffffffff198254161790550116614303565b91505090565b6329d9e10560e01b5f5260045ffd5b60c4358015159081810361142857505f60e435120361437f576024356001600160a01b03811681036114285790565b6044356001600160a01b03811681036114285790565b600554600160ff8260a01c166143aa81613b29565b036143ca576001600160a01b03165b6001600160a01b0391821691161490565b5060c435801515810361142857156143f3576024356001600160a01b03811681146143b9575f80fd5b6044356001600160a01b03811681146143b9575f80fd5b600160ff1b8114612803575f0390565b600160ff1b8114614439575f811215614436576144369061440a565b90565b637e2df70960e11b5f5260045ffd5b9062ffffff169081810291620f42408215828486041417021561447f575050620f42409004905b60016001607f1b03821161443957565b620f4240905f198184098481108501900392099080620f424011156144d457828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c26139029061446f565b63ae47f7025f526004601cfd5b60405162e568cf60e71b81527f0000000000000000000000000000000000000000000000000000000000000000600482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693909291602081602481885afa9081156126d1575f9161460b575b5015614605576015805460ff191660011790556040516381f8a9d160e01b815291614589600484016024613e2d565b60a483015260c482015260408160e4815f875af180156126d1575f516020615d495f395f51905f52916040915f915f916145d6575b5060ff196015541660155582519182526020820152a3565b90506145f89150823d84116145fe575b6145f08183613d22565b81019061407c565b5f6145be565b503d6145e6565b50505050565b90506020813d602011614635575b8161462660209383613d22565b8101031261142857515f61455a565b3d9150614619565b60405162e568cf60e71b81527f0000000000000000000000000000000000000000000000000000000000000000600482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691602081602481865afa9081156126d1575f91614733575b501561472f576015805460ff191660011790556040516381f8a9d160e01b81526146e1600482016024613e2d565b5f60a48201525f60c482015260408160e4815f875af180156126d1575f516020615d495f395f51905f52916040915f915f916145d6575060ff196015541660155582519182526020820152a3565b5050565b90506020813d60201161475d575b8161474e60209383613d22565b8101031261142857515f6146b3565b3d9150614741565b60405162e568cf60e71b81527f0000000000000000000000000000000000000000000000000000000000000000600482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316929091602081602481875afa9081156126d1575f91614811575b501561480c576015805460ff191660011790556040516381f8a9d160e01b8152906146e1906004830190613e2d565b505050565b90506020813d60201161483b575b8161482c60209383613d22565b8101031261142857515f6147dd565b3d915061481f565b60405162e568cf60e71b81527f0000000000000000000000000000000000000000000000000000000000000000600482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169490939091602081602481895afa9081156126d1575f916148f3575b50156148ec576015805460ff191660011790556040516381f8a9d160e01b815292614589906004850190613e2d565b5050505050565b90506020813d60201161491d575b8161490e60209383613d22565b8101031261142857515f6148bd565b3d9150614901565b60016001607f1b039081039190821161280357565b9190820391821161280357565b8115614951570490565b634e487b7160e01b5f52601260045260245ffd5b8181029291811591840414171561280357565b9190820180921161280357565b6001600160a01b0391821681529116602082015260400190565b91906149ac602091615027565b604051631e2eaeaf60e01b8152600481019190915292839060249082906001600160a01b03165afa9182156126d1575f92614a0a575b506001600160a01b0382169160a081901c60020b9162ffffff60b883901c81169260d01c1690565b9091506020813d602011614a36575b81614a2660209383613d22565b810103126114285751905f6149e2565b3d9150614a19565b60ff60155460081c16614bff576003546001600160a01b0316614a608161504d565b51908160a01c611428576040519063537df88f60e11b8252600482015260c081602481855afa156131a65760c03d106114285760608101805160a01c825160a01c176114285760a0820190815192608081019384511760101c6114285760c08101604052614acd8561509d565b518060a01c611428577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161480159590614bb4575b508415614b7f575b8415614b72575b8415614b65575b508315614b5b575b508215614b50575b8215614b43575b50506128ba57565b5190511090505f80614b3b565b805115159250614b34565b511592505f614b2c565b604001511593505f614b24565b6020810151159450614b1d565b80517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614159450614b16565b614bbf9195506150c5565b518060a01c611428577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415935f614b0e565b565b6001600160a01b03811690614c158261426a565b908154908115614c855792614c5b835f9384614c739897614c496002614bff99019185614c4384548761493a565b91614e45565b8160018501805498899655555561493a565b6006549095869390916001600160a01b0316836150ed565b6003546001600160a01b0316906150ed565b505050505f90565b90614c9790615027565b6003810180911161280357604051631e2eaeaf60e01b8152600481019190915290602090829060249082906001600160a01b03165afa9081156126d1575f91614ce8575b506001600160801b031690565b90506020813d602011614d12575b81614d0360209383613d22565b8101031261142857515f614cdb565b3d9150614cf6565b90600160ff1b6060830151146144395762ffffff60a08301511691614d4862ffffff60c083015116916153cf565b9262ffffff84169081116144395710614d5d57565b6302cce67760e31b5f5260045ffd5b358060020b81036114285790565b6040810135158015614e2b575b614267577f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000614dd8838261499f565b5050929050614de681614d6c565b60020b8360020b908112918215614e11575b505061480c57614bff92614e0b91614c8d565b9061558f565b614e1f919250602001614d6c565b60020b13155f80614df8565b506016544360489190911c6001600160401b031614614d87565b5f8315614605576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690831685614e8583836156c7565b10615018576003850190614e9a87835461493a565b8255604051627eeac760e11b81529260208480614ebb853060048401614985565b0381845afa9384156126d1575f94614fe4575b50803b1561142857604051637a94c56560e11b81525f8180614ef58c87306004850161405a565b038183865af180156126d157614fc5575b50614f2a92916020916040518080968194627eeac760e11b83523060048401614985565b03915afa918215611434578492614f91575b5086838311938415614f83575b50508215614f78575b50506113d55750614f7491614f6b8460029330906156ec565b01918254614978565b9055565b541190505f80614f52565b83900314159250865f614f49565b9091506020813d602011614fbd575b81614fad60209383613d22565b810103126114285751905f614f3c565b3d9150614fa0565b602091955091614fd95f614f2a9594613d22565b5f9591509192614f06565b9093506020813d602011615010575b8161500060209383613d22565b810103126114285751925f614ece565b3d9150614ff3565b6365169c1d60e01b5f5260045ffd5b604051602081019182526006604082015260408152615047606082613d22565b51902090565b90602060049260405193848092630d96a1bf60e21b82525afa1561355c5760203d1061142857565b9060206004926040519384809263dc4c90d360e01b82525afa1561355c5760203d1061142857565b9060206004926040519384809263514526c360e11b82525afa1561355c5760203d1061142857565b9060206004926040519384809263056a0fbf60e31b82525afa1561355c5760203d1061142857565b9190811561480c576150ff30846156c7565b9261510a82826156c7565b91806014528360345263a9059cbb60601b5f5260205f6044601082865af18060015f511416156151a6575b5061514e905f60345261514830846156c7565b926156c7565b90848111948515615199575b5050831561518f575b8315615182575b50505061517357565b631dc418c360e31b5f5260045ffd5b03141590505f808061516a565b8181109350615163565b0383141593505f8061515a565b3d833b151710156151b7575f615135565b6390b8ec185f526004601cfd5b906040516151d181613cec565b915463ffffffff81168352602081811c60060b90840152605881901c6001600160a01b0316604084015260f81c15156060830152565b95949290939163ffffffff8516156152fe5763ffffffff61522e9588031680976017615906565b63ffffffff82949251168083146152e25763ffffffff8251168084146152bf579063ffffffff818193031693031693602081015160060b9283602084015160060b0360060b928160060b928315614951576040908101519101516001600160a01b03929183169183916152aa9190831684900383168a02614947565b1601169460060b91050260060b0160060b9190565b5050602081015160409091015160069190910b93506001600160a01b0316919050565b505050602082015160060b91604060018060a01b039101511690565b925090925061ffff81101561401e57615319906017016151c4565b9363ffffffff85511663ffffffff82160361534a57505050602082015160060b91604060018060a01b039101511690565b6153549394615827565b905f80806152e2565b60408051602081019283526001600160a01b0390931690830152906060810160c4358015159081900361142857815260e435602082015260406001600160a01b036153a9610104613b89565b1691015260a0815261504760c082613d22565b60020b627fffff198114612803575f0390565b62ffffff60c08201511663ffffffff60e062ffffff60a085015116930151169181811480156154a2575b61549c57614436925f915f9360165461ffff8160101c16906001821161543d575b5050835f811261542b575b50615b04565b61543691945061440a565b925f615425565b61ffff811691826017015492815f1991010106601701549163ffffffff83820316908161546c575b505061541a565b90919263ffffffff94985080975060201c9060201c0360060b059060301c60020b0393420316935f808080615465565b50905090565b5082156153f9565b62010016546001600160a01b0381161561426757622ea7d35a106128ba575f602481808094632520a12d60e11b825281600452622dc6c0f1156154e957565b7f6e819d90474482ea53f17905af71585dac910232de1a68f42349cd60badb287460205fa1565b62010016546001600160a01b0381161561472f57622ea7d35a106128ba5760245f808094938194632f02d37f60e21b8352600452622dc6c0f1156154e957565b62010016546001600160a01b0381161561426757622ea7d35a106128ba575f6024818080946309f17b8160e31b825281600452622dc6c0f1156154e957565b906155c29060165461ffff8160201c169161ffff8260101c16918060301c60020b9061ffff63ffffffff42169116615ba4565b909161ffff63ffff00006016549360101b16931690818463ffffffff19851617178060301c60020b9060c81c60020b917f00000000000000000000000000000000000000000000000000000000000000005f146156c257615622906153bc565b60020b81810391905f821280158285131691841216176128035761565192828181131561569b57509150613fd8565b62ffffff60301b60309190911b16600160481b600160881b031990931665ffff00000001600160881b03199092169190911717174360481b600160481b600160881b031617601655565b6156a48261440a565b136156b0575b50613fd8565b6156bb91925061440a565b905f6156aa565b615622565b602460106020939284936014526370a0823160601b5f525afa601f3d11166020510290565b915f928115614605576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911661572c82826156c7565b9361573781836156c7565b92803b1561142857604051630b0d9c0960e01b8152600481018490526001600160a01b0383166024820152604481018690525f8160648183865af180156126d1576157e5575b509061514861578c92846156c7565b908481119485156157d8575b505083156157ce575b83156157c1575b5050506157b25750565b631dc418c360e31b8152600490fd5b03141590505f80806157a8565b81811093506157a1565b0383141593505f80615798565b61578c929197505f6157f691613d22565b6151485f9791925061577d565b6040519061581082613cec565b5f6060838281528260208201528260408201520152565b91929092615833615803565b508251602084015160409094015163ffffffff9091168503936001600160a01b039091169260069190910b906001600160801b038116156158d6575b6001600160801b03169182156149515763ffffffff6040519661589188613cec565b16865263ffffffff851660060b9060020b0260060b0160060b602085015260018060a01b039263ffffffff60801b9060801b1604011660408201526001606082015290565b50600161586f565b61ffff60019116019061ffff821161280357565b9061ffff169081156149515761ffff160690565b9692949094939193615916615803565b5061591f615803565b9161593361592d858b614032565b506151c4565b916159468763ffffffff8551168a615c9e565b615ad0575050505061596c61592d61596687615961856158de565b6158f2565b88614032565b83606082015115615ab5575b63ffffffff61598992511686615c9e565b15615aa65761ffff6159b18661596183946159a2615803565b506159ab615803565b506158de565b169416936159bf8582614978565b5f19810191908211612803575b6159d68282614978565b60011c916159f061592d6159ea8986615d1e565b8a614032565b606081015115615a8f57600184019081851161280357615a1c61592d615a168b85615d1e565b8c614032565b615a2e8863ffffffff8451168b615c9e565b918280615a77575b615a68575050615a5b5750505f198201918211612803576159d691905b9091506159cc565b9091506159d69250615a53565b9a509850949650505050505050565b50615a8a63ffffffff8351168a8c615c9e565b615a36565b50905060018201809211612803576159d691615a53565b636ffbbccd60e11b5f5260045ffd5b615989915063ffffffff615ac8896151c4565b925050615978565b94975094925063ffffffff919750809550511663ffffffff8216145f14615af8575050509190565b83614436949650615827565b93929162ffffff85169362ffffff8316851015615b9b575f8413801590615b8d575b8015615b7f575b615b775763ffffffff908116959116929190615b53908490830362ffffff168702614947565b8211615b6f575092615b6a9162ffffff9402614947565b011690565b935050505090565b505050505090565b5063ffffffff821615615b2d565b5063ffffffff811615615b26565b50509250505090565b94959392919061ffff86101561401e57615bc0866017016151c4565b9663ffffffff88511663ffffffff831614615c935761ffff85168061ffff8316119081615c72575b50615c0995615c03929115615c6b57505b61596181986158de565b96615827565b61ffff84101561401e57805160208083015160408401516060909401516001600160f81b031990151560f81b16600160581b600160f81b0360589590951b9490941663ffffffff909316911b66ffffffffffffff60201b161717176017840155565b9050615bf9565b5f190191905061ffff8211612803579061ffff888116911614615c09615be8565b505050509250909190565b63ffffffff8091169116818111801580615d0e575b615cff5715615ce55763ffffffff90925b1690811115615cd257101590565b600160201b810190811061280357101590565b600160201b81019081106128035763ffffffff9092615cc4565b509163ffffffff915016101590565b508263ffffffff85161115615cb3565b811561495157069056fe2616e25de5abcc9e6a698b140fb6c92f55ace21b7a57f76172f195dbbf693af6a30ca6140dfb2cac1c1021c5303d8dc7de0cd4db47221fb3ad068fac7ef8185e1168603ec6f79d8fa5f8da5aab9cd5dd8455146cb4adfd8e21e1fc4beb829389";