@gvnrdao/dh-sdk 0.0.144 → 0.0.145
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.
- package/browser/dist/397.browser.js +1 -1
- package/browser/dist/833.browser.js +1 -1
- package/browser/dist/browser.js +6 -6
- package/dist/index.d.mts +34 -3
- package/dist/index.d.ts +34 -3
- package/dist/index.js +581 -83
- package/dist/index.mjs +581 -83
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -12708,51 +12708,51 @@ var init_deployment_addresses = __esm({
|
|
|
12708
12708
|
SEPOLIA_DEPLOYMENT = {
|
|
12709
12709
|
"network": "sepolia",
|
|
12710
12710
|
"chainId": 11155111,
|
|
12711
|
-
"timestamp": "2026-01-
|
|
12711
|
+
"timestamp": "2026-01-19T06:19:19.006Z",
|
|
12712
12712
|
"deployer": "",
|
|
12713
12713
|
"contracts": {
|
|
12714
|
-
"UpgradeValidator": "
|
|
12714
|
+
"UpgradeValidator": "0xfA8959B98a3Cd3D6dc5ee73eEaff9B31b3a0c141",
|
|
12715
12715
|
"UCDToken": "0x86060fa5b3e01e003b8afd9c1295f1f444a7dc60",
|
|
12716
|
-
"UCDController": "
|
|
12717
|
-
"PriceFeedConsumer": "
|
|
12718
|
-
"UCDMintingRewards": "
|
|
12719
|
-
"PositionManagerCoreModule": "
|
|
12720
|
-
"TermManagerModule": "
|
|
12721
|
-
"LoanOperationsManagerModule": "
|
|
12722
|
-
"CollateralManagerModule": "
|
|
12723
|
-
"LiquidationManagerModule": "
|
|
12724
|
-
"CircuitBreakerModule": "
|
|
12725
|
-
"CommunityManagerModule": "
|
|
12726
|
-
"AdminModule": "
|
|
12727
|
-
"PositionManagerViews": "
|
|
12728
|
-
"PositionManager": "
|
|
12729
|
-
"OperationAuthorizationRegistry": "
|
|
12730
|
-
"PKPValidation": "
|
|
12716
|
+
"UCDController": "0xd4558d907a61Be6096b5cF4E0958Ad5239259Fe3",
|
|
12717
|
+
"PriceFeedConsumer": "0x5ad368E357BaE7176df0ECCCE7a9174689aB1b88",
|
|
12718
|
+
"UCDMintingRewards": "0x095e6A1E1b2404c8d938D41b3eE58869dc06e55c",
|
|
12719
|
+
"PositionManagerCoreModule": "0x67a429758607EAF99b131F3ac1d499796F2ce22b",
|
|
12720
|
+
"TermManagerModule": "0xc11f70d006be21B40414A70545E15D744f92a05c",
|
|
12721
|
+
"LoanOperationsManagerModule": "0x34EFaF40aEd319dbA265b1989573fe4544a7d593",
|
|
12722
|
+
"CollateralManagerModule": "0x61c4BC075BC46ca8B9d5c754b4A2d94a56741D9D",
|
|
12723
|
+
"LiquidationManagerModule": "0x8ff9D8df540237BD36B1f028c5B8Dc6621278D3D",
|
|
12724
|
+
"CircuitBreakerModule": "0x52106B17f20F0686b753974b2732ca65107FC9a4",
|
|
12725
|
+
"CommunityManagerModule": "0xcbF571CD4af0C194DD6C4698a70Ad671195A2BFC",
|
|
12726
|
+
"AdminModule": "0x401f9f8e8748D46B63a7FDcF33e8C59AAEdEE6C1",
|
|
12727
|
+
"PositionManagerViews": "0x49F45Ab7E3DB572843e663CF6a8d09f95c0CC4dB",
|
|
12728
|
+
"PositionManager": "0x0eCD818D1Ac1BD3ab2d8ba4815974F9ed714eC1A",
|
|
12729
|
+
"OperationAuthorizationRegistry": "0x6d7E95eE42f41BFEdC7A84d2269A0033c7C44079",
|
|
12730
|
+
"PKPValidation": "0x18f6f11Fe3e9eea10106a45176C88B05733b95a8"
|
|
12731
12731
|
}
|
|
12732
12732
|
};
|
|
12733
12733
|
SEPOLIA_CONTRACTS = {
|
|
12734
|
-
"UpgradeValidator": "
|
|
12734
|
+
"UpgradeValidator": "0xfA8959B98a3Cd3D6dc5ee73eEaff9B31b3a0c141",
|
|
12735
12735
|
"UCDToken": "0x86060fa5b3e01e003b8afd9c1295f1f444a7dc60",
|
|
12736
|
-
"UCDController": "
|
|
12737
|
-
"PriceFeedConsumer": "
|
|
12738
|
-
"UCDMintingRewards": "
|
|
12739
|
-
"PositionManagerCoreModule": "
|
|
12740
|
-
"TermManagerModule": "
|
|
12741
|
-
"LoanOperationsManagerModule": "
|
|
12742
|
-
"CollateralManagerModule": "
|
|
12743
|
-
"LiquidationManagerModule": "
|
|
12744
|
-
"CircuitBreakerModule": "
|
|
12745
|
-
"CommunityManagerModule": "
|
|
12746
|
-
"AdminModule": "
|
|
12747
|
-
"PositionManagerViews": "
|
|
12748
|
-
"PositionManager": "
|
|
12749
|
-
"OperationAuthorizationRegistry": "
|
|
12750
|
-
"PKPValidation": "
|
|
12736
|
+
"UCDController": "0xd4558d907a61Be6096b5cF4E0958Ad5239259Fe3",
|
|
12737
|
+
"PriceFeedConsumer": "0x5ad368E357BaE7176df0ECCCE7a9174689aB1b88",
|
|
12738
|
+
"UCDMintingRewards": "0x095e6A1E1b2404c8d938D41b3eE58869dc06e55c",
|
|
12739
|
+
"PositionManagerCoreModule": "0x67a429758607EAF99b131F3ac1d499796F2ce22b",
|
|
12740
|
+
"TermManagerModule": "0xc11f70d006be21B40414A70545E15D744f92a05c",
|
|
12741
|
+
"LoanOperationsManagerModule": "0x34EFaF40aEd319dbA265b1989573fe4544a7d593",
|
|
12742
|
+
"CollateralManagerModule": "0x61c4BC075BC46ca8B9d5c754b4A2d94a56741D9D",
|
|
12743
|
+
"LiquidationManagerModule": "0x8ff9D8df540237BD36B1f028c5B8Dc6621278D3D",
|
|
12744
|
+
"CircuitBreakerModule": "0x52106B17f20F0686b753974b2732ca65107FC9a4",
|
|
12745
|
+
"CommunityManagerModule": "0xcbF571CD4af0C194DD6C4698a70Ad671195A2BFC",
|
|
12746
|
+
"AdminModule": "0x401f9f8e8748D46B63a7FDcF33e8C59AAEdEE6C1",
|
|
12747
|
+
"PositionManagerViews": "0x49F45Ab7E3DB572843e663CF6a8d09f95c0CC4dB",
|
|
12748
|
+
"PositionManager": "0x0eCD818D1Ac1BD3ab2d8ba4815974F9ed714eC1A",
|
|
12749
|
+
"OperationAuthorizationRegistry": "0x6d7E95eE42f41BFEdC7A84d2269A0033c7C44079",
|
|
12750
|
+
"PKPValidation": "0x18f6f11Fe3e9eea10106a45176C88B05733b95a8"
|
|
12751
12751
|
};
|
|
12752
12752
|
LOCALHOST_DEPLOYMENT = {
|
|
12753
12753
|
"network": "localhost",
|
|
12754
12754
|
"chainId": 31337,
|
|
12755
|
-
"timestamp": "2026-01-
|
|
12755
|
+
"timestamp": "2026-01-19T02:14:25.529Z",
|
|
12756
12756
|
"deployer": "",
|
|
12757
12757
|
"contracts": {
|
|
12758
12758
|
"UpgradeValidator": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6",
|
|
@@ -12771,7 +12771,7 @@ var init_deployment_addresses = __esm({
|
|
|
12771
12771
|
"PositionManagerViews": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933",
|
|
12772
12772
|
"PositionManager": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690",
|
|
12773
12773
|
"OperationAuthorizationRegistry": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf",
|
|
12774
|
-
"PKPValidation": "
|
|
12774
|
+
"PKPValidation": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D"
|
|
12775
12775
|
}
|
|
12776
12776
|
};
|
|
12777
12777
|
LOCALHOST_CONTRACTS = {
|
|
@@ -12791,7 +12791,7 @@ var init_deployment_addresses = __esm({
|
|
|
12791
12791
|
"PositionManagerViews": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933",
|
|
12792
12792
|
"PositionManager": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690",
|
|
12793
12793
|
"OperationAuthorizationRegistry": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf",
|
|
12794
|
-
"PKPValidation": "
|
|
12794
|
+
"PKPValidation": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D"
|
|
12795
12795
|
};
|
|
12796
12796
|
ALL_DEPLOYMENTS = {
|
|
12797
12797
|
sepolia: SEPOLIA_DEPLOYMENT,
|
|
@@ -29297,7 +29297,7 @@ async function generateWithdrawAuthorization(positionId, amount, chainId, mode,
|
|
|
29297
29297
|
console.log(" Recovered Address (for verification):", recovered);
|
|
29298
29298
|
console.log(
|
|
29299
29299
|
" Signer Matches Recovered:",
|
|
29300
|
-
recovered.toLowerCase() === signerAddress.toLowerCase() ? "\u2705 YES" : "\u274C NO"
|
|
29300
|
+
recovered.toLowerCase() === signerAddress.toLowerCase() ? "\u2705 YES" : "\u274C NO (mismatch)"
|
|
29301
29301
|
);
|
|
29302
29302
|
return {
|
|
29303
29303
|
positionId,
|
|
@@ -29309,6 +29309,49 @@ async function generateWithdrawAuthorization(positionId, amount, chainId, mode,
|
|
|
29309
29309
|
mode
|
|
29310
29310
|
};
|
|
29311
29311
|
}
|
|
29312
|
+
async function generateBalanceConfirmationAuthorization(positionId, chainId, mode, signer) {
|
|
29313
|
+
const timestamp = calculateNextQuantumTimestamp();
|
|
29314
|
+
const caller = await signer.getAddress();
|
|
29315
|
+
const action = "confirm-balance";
|
|
29316
|
+
const actionHash = ethers_exports.utils.keccak256(ethers_exports.utils.toUtf8Bytes(action));
|
|
29317
|
+
const types = [
|
|
29318
|
+
"bytes32",
|
|
29319
|
+
// positionId
|
|
29320
|
+
"uint256",
|
|
29321
|
+
// timestamp
|
|
29322
|
+
"uint256",
|
|
29323
|
+
// chainId
|
|
29324
|
+
"address",
|
|
29325
|
+
// caller
|
|
29326
|
+
"bytes32"
|
|
29327
|
+
// actionHash
|
|
29328
|
+
];
|
|
29329
|
+
const values = [positionId, timestamp, chainId, caller, actionHash];
|
|
29330
|
+
const messageHash = ethers_exports.utils.solidityKeccak256(types, values);
|
|
29331
|
+
const messageHashBytes = ethers_exports.utils.arrayify(messageHash);
|
|
29332
|
+
console.log(
|
|
29333
|
+
"[SDK Balance Confirmation Authorization] Building message hash:"
|
|
29334
|
+
);
|
|
29335
|
+
console.log(" Position ID:", positionId);
|
|
29336
|
+
console.log(" Timestamp:", timestamp);
|
|
29337
|
+
console.log(" Chain ID:", chainId);
|
|
29338
|
+
console.log(" Caller:", caller);
|
|
29339
|
+
console.log(" Action:", action);
|
|
29340
|
+
console.log(" Action Hash:", actionHash);
|
|
29341
|
+
console.log(" Message Hash (solidityKeccak256):", messageHash);
|
|
29342
|
+
const signature2 = await signer.signMessage(messageHashBytes);
|
|
29343
|
+
console.log("[SDK Balance Confirmation Authorization] Signature generated:");
|
|
29344
|
+
console.log(" Signature:", signature2);
|
|
29345
|
+
return {
|
|
29346
|
+
positionId,
|
|
29347
|
+
timestamp,
|
|
29348
|
+
chainId,
|
|
29349
|
+
caller,
|
|
29350
|
+
action,
|
|
29351
|
+
signature: signature2,
|
|
29352
|
+
mode
|
|
29353
|
+
};
|
|
29354
|
+
}
|
|
29312
29355
|
|
|
29313
29356
|
// ../contracts/node_modules/ethers/lib.esm/_version.js
|
|
29314
29357
|
var version27 = "6.15.0";
|
|
@@ -36660,6 +36703,11 @@ var _abi = [
|
|
|
36660
36703
|
name: "InvalidAddress",
|
|
36661
36704
|
type: "error"
|
|
36662
36705
|
},
|
|
36706
|
+
{
|
|
36707
|
+
inputs: [],
|
|
36708
|
+
name: "InvalidBTCPrice",
|
|
36709
|
+
type: "error"
|
|
36710
|
+
},
|
|
36663
36711
|
{
|
|
36664
36712
|
inputs: [],
|
|
36665
36713
|
name: "InvalidBytes32",
|
|
@@ -38525,6 +38573,11 @@ var _abi = [
|
|
|
38525
38573
|
name: "collateralValue",
|
|
38526
38574
|
type: "uint256"
|
|
38527
38575
|
},
|
|
38576
|
+
{
|
|
38577
|
+
internalType: "uint256",
|
|
38578
|
+
name: "btcPrice",
|
|
38579
|
+
type: "uint256"
|
|
38580
|
+
},
|
|
38528
38581
|
{
|
|
38529
38582
|
internalType: "uint256",
|
|
38530
38583
|
name: "quantumTimestamp",
|
|
@@ -38772,7 +38825,7 @@ var _abi = [
|
|
|
38772
38825
|
type: "function"
|
|
38773
38826
|
}
|
|
38774
38827
|
];
|
|
38775
|
-
var _bytecode = "0x60a080604052346100ea57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b604051615d5490816100f082396080518181816115dd01526117ed0152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063018af3091461037757806301ffc9a714610372578063043fe8fc1461036d57806309d2b0ae1461036857806316d8887a1461036357806316efd9411461035e5780631732d33014610359578063248a9ca3146103545780632f2ff15d1461034f57806336568abe1461034a578063393d92cc1461034557806344c8b85214610340578063487c02b41461033b5780634a54e00a146103365780634f1ef2861461033157806352d1902d1461032c578063544ba5af146103275780635c975abb146103225780635e4936e81461031d5780636068b5d11461031857806363ba8cec146103135780636a89edad1461030e5780636b80155f1461030957806374cb36e61461030457806375b238fc146102ff5780638179dc38146102fa5780638ffee9cd146102f557806391d14854146102f05780639b9d30c1146102eb578063a217fddf146102e6578063a9a52888146102e1578063a9eadc52146102dc578063aa4fec70146102d7578063ad3cb1cc146102d2578063b1517664146102cd578063c12e1291146102c8578063c306b378146102c3578063d0e8ce82146102be578063d547741f146102b9578063d65e880d146102b4578063d6810242146102af578063d7d9f4b0146102aa578063d8dfeb45146102a5578063d9cb25a2146102a0578063dc5632531461029b578063dd74ac7a14610296578063ddccaa3a14610291578063e7f9caa51461028c578063f005e76714610287578063f2dfbf6614610282578063f2f4eb261461027d578063f851a44014610278578063fb7c6a0f146102735763ffa1ad741461026e57600080fd5b612fe7565b612fbe565b612f95565b612f6c565b612f43565b612f1a565b612e98565b612b67565b612b1c565b6129ca565b6128c6565b61289d565b612708565b61266f565b612646565b612612565b6125ae565b612515565b61246d565b61240c565b6123c5565b61238b565b612362565b61230e565b6122f2565b6122b7565b612266565b612077565b611f6a565b611ec1565b611e98565b611de0565b611ca0565b611b1e565b611a44565b6119e3565b6119b3565b611833565b6117da565b61158b565b6114b2565b6111a1565b611120565b6110f7565b6110ad565b611072565b61104c565b611011565b610fe8565b610fbf565b610ab9565b610a2d565b6109b0565b6103ae565b9181601f840112156103a9578235916001600160401b0383116103a957602083818601950101116103a957565b600080fd5b346103a95760c03660031901126103a95760843560043560243560643560443560a4356001600160401b0381116103a9576103ed90369060040161037c565b91906103f761429d565b6103ff6142c7565b33600052600a6020526040600020544311156109885761045292869161042483614317565b61042d8661432f565b6104398487898661438a565b610444600c54610a03565b61044d816143a4565b6143c5565b610465610460600454610a03565b610a03565b604051634977ff8b60e11b81526004810184905290602090829060249082905afa90811561085057600091610959575b5015610948576104ae6104a784613084565b5460ff1690565b610937576104c0610460600054610a03565b604051638d34875560e01b81526004810185905290600090829060249082905afa90811561085057600091610916575b506104fe6080820151610a03565b906101208101519561050f87612910565b61052e61052460a084015164ffffffffff1690565b64ffffffffff1690565b92825115610905576001600160a01b0316963388036108f45761055081612910565b600281141590816108df575b506108ce57816105b8869261058460206080960151828b61057e600154610a03565b9261461a565b61059d6105908a613084565b805460ff19166001179055565b60405163102f3b8760e31b81529687948594600486016131fc565b0381305afa600081600094600093610894575b5061062457856105d96132b8565b6308c379a01461060b575b6105f06105fa91613084565b805460ff19169055565b633a4f184b60e11b60005260046000fd5b6106136132d6565b156105e4576105f06105fa91613084565b92610633610460600054610a03565b803b156103a95760405163fa5fa16360e01b8152916000918391829084908290610661908d6004840161334b565b03925af180156108505761087f575b5061067f610460600054610a03565b91823b156103a95760006040518094630d7ad17360e41b82528183816106a9888d6004840161334b565b03925af1928315610850576106c39361086a575b50614754565b916106d2610460600054610a03565b803b156103a9576000604051809263b222bec960e01b82528183816106fb8a8c6004840161334b565b03925af1801561085057610855575b50610719610460600154610a03565b60405163b1d3354f60e01b8152602081600481855afa90811561085057600091610821575b5083610799575b5050610772600080516020615cff833981519152936107666105f087613084565b6040519384938461338c565b0390a34361077f3361302f565b55610788614303565b6040516001815280602081015b0390f35b6001600160a01b0316803b156103a957836000916107ce9383604051809681958294633c37699760e21b845260048401613371565b03925af19081610806575b506107ef57637101508d60e11b60005260046000fd5b610772600080516020615cff833981519152610745565b80610815600061081b936114f1565b80610fb4565b386107d9565b610843915060203d602011610849575b61083b81836114f1565b81019061335c565b3861073e565b503d610831565b613078565b806108156000610864936114f1565b3861070a565b806108156000610879936114f1565b386106bd565b80610815600061088e936114f1565b38610670565b915093506108ba915060803d6080116108c7575b6108b281836114f1565b8101906131da565b94929050909391386105cb565b503d6108a8565b63a8a168bf60e01b60005260046000fd5b600391506108ec81612910565b14153861055c565b631963d1e760e31b60005260046000fd5b636ec9be1160e01b60005260046000fd5b610931913d8091833e61092981836114f1565b810190613102565b386104f0565b6358c8679f60e01b60005260046000fd5b63559bd01960e01b60005260046000fd5b61097b915060203d602011610981575b61097381836114f1565b810190613060565b38610495565b503d610969565b633b53d1db60e01b60005260046000fd5b600435906001600160e01b0319821682036103a957565b346103a95760203660031901126103a95760206001600160e01b03196109d4610999565b16637965db0b60e01b81149081156109f2575b506040519015158152f35b6301ffc9a760e01b149050386109e7565b6001600160a01b031690565b6001600160a01b038116036103a957565b3590610a2b82610a0f565b565b346103a95760203660031901126103a957600435610a4a81610a0f565b610a52614792565b6001600160a01b03168015610aa857600b80546001600160a01b0319811683179091553391906001600160a01b03167f440ec6c0da0791f6d650579df27149ce4ffc4f4fbf63e9a8bcd45dacdbf338a2600080a4005b63e6c4247b60e01b60005260046000fd5b346103a95760a03660031901126103a9576024356004356044356064356084356001600160401b0381116103a957610af590369060040161037c565b610afd61429d565b610b056142c7565b610b0d614909565b610b1b610460600654610a03565b803b156103a95760405163102d617560e01b81526004810188905260006024820181905290918290604490829084905af1801561085057610f9f575b50610b618361432f565b8315610f8e57848491610b9393610b7a8987868661438a565b610b85600c54610a03565b610b8e816143a4565b614492565b610ba1610460600054610a03565b604051638d34875560e01b81526004810185905290600090829060249082905afa90811561085057600091610f75575b50610bdf6080820151610a03565b61012082015190610bef82612910565b610c0060408401518094898961499a565b610c10610c0c87614a99565b1590565b908115610f61575b50610f5057610c2690614b28565b60046020610c38610460600154610a03565b60405163023b2a9f60e31b815292839182905afa90811561085057600091610f31575b506040516370a0823160e01b81526001600160a01b0391909116929060208180610c88336004830161234f565b0381875afa8015610850578791600091610f12575b50108015610ea9575b610e9857600492610cb987303384614bef565b6020610cc9610460600154610a03565b60405163b1d3354f60e01b815295869182905afa93841561085057600094610e77575b5060405163095ea7b360e01b81526001600160a01b03851660048201526000602482015290602082806044810103816000855af190811561085057610d54956020938a93610e5c575b50600060405180988195829463095ea7b360e01b845260048401613371565b03925af19283156108505786602093610d7692610da696610e41575b506134b5565b93610d85610460600154610a03565b9060006040518096819582946322de8a2d60e01b84528c8c60048601611f4e565b03925af190811561085057600091610e22575b5015610e1157610df27f58c8fcf57870633c97de2da7d6e74c7544b530d15779c0d107edd9933747ec519160405191829133968361334b565b0390a3610dfd614986565b610e05614303565b60405160018152602090f35b63d0806ec760e01b60005260046000fd5b610e3b915060203d6020116109815761097381836114f1565b38610db9565b610e5790863d88116109815761097381836114f1565b610d70565b610e7290853d87116109815761097381836114f1565b610d35565b610e9191945060203d6020116108495761083b81836114f1565b9238610cec565b631e9acf1760e31b60005260046000fd5b50604051636eb1769f60e11b8152336004820152306024820152602081604481875afa8015610850578791600091610ee3575b5010610ca6565b610f05915060203d602011610f0b575b610efd81836114f1565b810190613490565b38610edc565b503d610ef3565b610f2b915060203d602011610f0b57610efd81836114f1565b38610c9d565b610f4a915060203d6020116108495761083b81836114f1565b38610c5b565b6334b110b160e11b60005260046000fd5b6001600160a01b0316331415905038610c18565b610f88913d8091833e61092981836114f1565b38610bd1565b630a0b0d7960e01b60005260046000fd5b806108156000610fae936114f1565b38610b57565b60009103126103a957565b346103a95760003660031901126103a9576020604051600080516020615b1f8339815191528152f35b346103a95760003660031901126103a9576006546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a95760206040517f9792fdc19ab98adfa72ab2fa98d342618c661e01c406979c105b31eda87f5e6f8152f35b346103a95760203660031901126103a957602061106a6004356134c7565b604051908152f35b346103a95760403660031901126103a9576110ab60243560043561109582610a0f565b6110a66110a1826134c7565b6148c1565b615016565b005b346103a95760403660031901126103a9576004356024356110cd81610a0f565b336001600160a01b038216036110e6576110ab9161509c565b63334bd91960e11b60005260046000fd5b346103a95760003660031901126103a9576001546040516001600160a01b039091168152602090f35b346103a95760203660031901126103a957600054604051631e1778ad60e11b8152600480359082015290602090829060249082906001600160a01b03165afa80156108505761079591600091611182575b506040519081529081906020820190565b61119b915060203d602011610f0b57610efd81836114f1565b38611171565b346103a95760403660031901126103a9576004356001600160401b0381116103a9578060040161018060031983360301126103a9576024356001600160401b0381116103a9576111f590369060040161037c565b6111fd61429d565b6112056142c7565b82359261121184614317565b61121e6024860135614317565b61122b6044860135614317565b6112386064860135614317565b61125761125261124b60a48801846134e8565b3691611554565b61512b565b610124850135926112678461432f565b611297611273836151d0565b868584611281600c54610a03565b9361128b856143a4565b6101048c0135946144ca565b6112a5610460600654610a03565b803b156103a9576000604051809263102d617560e01b82528183816112d860048201906000602060408401938281520152565b03925af180156108505761149d575b506112f6610460600054610a03565b604051638d34875560e01b8152600481018790529490600090869060249082905afa94851561085057600095611482575b508451156109055761133c6080860151610a03565b336001600160a01b03909116036108f457611359610c0c87614a99565b610f505760e46004970135604086015195602061137a610460600154610a03565b60405163100c48d360e21b81529a8b9182905afa988915610850576113f4996020986113c695610120956113b694600094611463575b50615262565b01516113c181612910565b61529b565b60006113d6610460600254610a03565b926040519788958694859363121f00ad60e21b855260048501613586565b03925af191821561085057600092611442575b508161142c575b6107958261141a614303565b60405191829182901515815260200190565b610c0c61143891614a99565b610f50573861140e565b61145c91925060203d6020116109815761097381836114f1565b9038611407565b61147b9194508c3d8e11610f0b57610efd81836114f1565b92386113b0565b61149691953d8091833e61092981836114f1565b9338611327565b8061081560006114ac936114f1565b386112e7565b346103a95760003660031901126103a9576004546040516001600160a01b039091168152602090f35b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761151457604052565b6114db565b60405190610a2b610140836114f1565b60405190610a2b610120836114f1565b6001600160401b03811161151457601f01601f191660200190565b92919261156082611539565b9161156e60405193846114f1565b8294818452818301116103a9578281602093846000960137010152565b60403660031901126103a9576004356115a381610a0f565b6024356001600160401b0381116103a957366023820112156103a9576115d3903690602481600401359101611554565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156117b7575b506117a657611615614800565b611623610460600754610a03565b6001600160a01b03811615610aa85760206040518092631052504160e01b82528180611652886004830161234f565b03915afa60009181611785575b506117775761166c6132b8565b6308c379a014611701575b60405162461bcd60e51b815260206004820152605160248201527f41646d696e2076616c69646174696f6e206661696c65643a20556e6b6e6f776e60448201527f206572726f7220286c696b656c7920726571756972652866616c73652920696e6064820152702076616c6964617465557067726164652960781b60848201528060a481015b0390fd5b6117096132d6565b806117145750611677565b60405178020b236b4b7103b30b634b230ba34b7b7103330b4b632b21d1603d1b60208201526116fd9161175f908290611751906039830190615302565b03601f1981018352826114f1565b60405162461bcd60e51b8152918291600483016123b4565b15610f8e576110ab91615319565b61179f91925060203d6020116109815761097381836114f1565b903861165f565b63703e46dd60e11b60005260046000fd5b600080516020615bdf833981519152546001600160a01b03161415905038611608565b346103a95760003660031901126103a9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036117a6576020604051600080516020615bdf8339815191528152f35b346103a95760a03660031901126103a9576004356024356064356044356001600160401b0382116103a95761186e602092369060040161037c565b93909160006084359261187f614853565b6118876142c7565b61188f614909565b61189888614317565b6118a18361432f565b6118cc818989886118b3888585615455565b6118be600c54610a03565b6118c7816143a4565b614502565b6118fc6118dd610460600354610a03565b946040519889978896879563544ba5af60e01b87528d6004880161365e565b03925af190811561085057600091611994575b508061192a575b61079590611922614986565b61141a614303565b611938610460600054610a03565b803b156103a957604051637f15208d60e01b8152926000918491829084908290611965906004830161368d565b03925af1918215610850576107959261197f575b50611916565b80610815600061198e936114f1565b38611979565b6119ad915060203d6020116109815761097381836114f1565b3861190f565b346103a95760003660031901126103a957602060ff600080516020615c7f83398151915254166040519015158152f35b346103a95760203660031901126103a957600854604051630bc926dd60e31b8152600480359082015290602090829060249082906001600160a01b03165afa8015610850576107959160009161118257506040519081529081906020820190565b346103a95760c03660031901126103a9576004356024356001600160401b0381116103a957611a7790369060040161037c565b90916044356001600160401b0381116103a957611a9890369060040161037c565b93606435939091906001600160401b0385116103a95761079595611ac3611ad396369060040161037c565b9390926084359560a435976136e8565b6040519081529081906020820190565b9060806003198301126103a957600435916024359160443591606435906001600160401b0382116103a957611b1a9160040161037c565b9091565b346103a957611b2c36611ae3565b611b37949394614853565b611b3f6142c7565b611b47614909565b611b5084614317565b8415610aa857838591611b8a93611b668661432f565b611b71868585615455565b611b7c600c54610a03565b611b85816143a4565b61453a565b611b98610460600354610a03565b803b156103a957611bc493600080946040519687958694859363f2ebd41f60e01b85526004850161338c565b03925af1801561085057611be3575b611bdb614986565b6110ab614303565b806108156000611bf2936114f1565b38611bd3565b60005b838110611c0b5750506000910152565b8181015183820152602001611bfb565b90602091611c3481518092818552858086019101611bf8565b601f01601f1916010190565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611c7357505050505090565b9091929394602080611c91600193603f198682030187528951611c1b565b97019301930191939290611c64565b346103a95760003660031901126103a957610795611cbc6139a2565b611cc4613a94565b611ccd826139de565b52611cd7816139de565b50611ce0613abc565b611ce982613a01565b52611cf381613a01565b50611cfc613ae4565b611d0582613a11565b52611d0f81613a11565b50611d18613b09565b611d2182613a21565b52611d2b81613a21565b50611d34613b2e565b611d3d82613a31565b52611d4781613a31565b50611d50613b59565b611d5982613a41565b52611d6381613a41565b50611d6c613b7f565b611d7582613a51565b52611d7f81613a51565b50611d88613bb1565b611d9182613a61565b52611d9b81613a61565b50611da4613bda565b611dad82613a72565b52611db781613a72565b50611dc0613c04565b611dc982613a83565b52611dd381613a83565b5060405191829182611c40565b346103a95760603660031901126103a957611df9610999565b6044356024356001600160401b0382116103a957611e1d602092369060040161037c565b600c54604051636b80155f60e01b81529586946001600160a01b039092169385938493611e509391929160048601613c32565b03915afa80156108505761079591600091611e79575b5060405191829182901515815260200190565b611e92915060203d6020116109815761097381836114f1565b38611e66565b346103a95760003660031901126103a9576005546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576020604051600080516020615cbf8339815191528152f35b9080601f830112156103a957816020611f0593359101611554565b90565b64ffffffffff8116036103a957565b3590610a2b82611f08565b61ffff8116036103a957565b3590610a2b82611f22565b600811156103a957565b3590610a2b82611f39565b9094939260609260808301968352602083015260408201520152565b346103a95760803660031901126103a9576004356001600160401b0381116103a95761014060031982360301126103a957611fa3611519565b6004820135815260248201356020820152604482013560408201526064820135906001600160401b0382116103a95761205161012461079594611fef6120679560043691840101611eea565b606085015261200060848201610a20565b608085015261201160a48201611f17565b60a085015261202260c48201611f17565b60c085015261203360e48201611f2e565b60e08501526120456101048201611f17565b61010085015201611f43565b6101208201526024356044359060643592613c57565b9060409492945194859485611f4e565b346103a95760e03660031901126103a95760043561209481610a0f565b602435906120a182610a0f565b604435916120ae83610a0f565b6064356120ba81610a0f565b608435916120c783610a0f565b60a435916120d483610a0f565b60c435946120e186610a0f565b6120e9614792565b6120f28161572c565b6120fb8361572c565b6121048761572c565b61210d8261572c565b6121168561572c565b61211f8461572c565b6121288661572c565b612136610460600754610a03565b91823b156103a957604051638ffee9cd60e01b81526001600160a01b038381166004830152858116602483015289811660448301528281166064830152878116608483015286811660a4830152881660c482015295928660e4815a6000948591f191821561085057612220986121da612204966121cc6121e8946122129b6121f698612251575b506001600160a01b03166133a2565b6001600160a01b03166133c4565b6001600160a01b03166133e6565b6001600160a01b0316613408565b6001600160a01b031661342a565b6001600160a01b031661344c565b6001600160a01b031661346e565b6040516007815233907fc5ec6eb3c84a615de1792ae2858fe498e7c3c8e4986fef4ae3cbf1f8d2c68bca90602090a2005b806108156000612260936114f1565b386121bd565b346103a95760403660031901126103a957602060ff6122ab60243560043561228d82610a0f565b600052600080516020615c3f83398151915284526040600020613049565b54166040519015158152f35b346103a95760003660031901126103a95760206040517f75027301df982f5215b4963a854cf9c73219df80cb6acd8f098189c9480c7bbc8152f35b346103a95760003660031901126103a957602060405160008152f35b346103a9576101603660031901126103a957610795611ad361014435610124356101043560e43560c43560a435608435606435604435602435600435613d67565b6001600160a01b03909116815260200190565b346103a95760003660031901126103a957600b546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576020604051600080516020615b3f8339815191528152f35b906020611f05928181520190611c1b565b346103a95760003660031901126103a95761079560408051906123e881836114f1565b60058252640352e302e360dc1b602083015251918291602083526020830190611c1b565b346103a9576101603660031901126103a95760443561014435602435600435610124356101043560e43560c43560a4356084356064356001600160401b038a116103a9576107959a61246561141a9b369060040161037c565b9a9099613dca565b346103a95760403660031901126103a95760243560043561248d82611f39565b6001546124b1906124aa90610460906001600160a01b0316610a03565b3314613eed565b6124bc811515613f4c565b6124ca610460600054610a03565b91823b156103a9576124f69260009283604051809681958294637f15208d60e01b8452600484016136d2565b03925af180156108505761250657005b8061081560006110ab936114f1565b346103a9576101403660031901126103a9576110ab60043561253681610a0f565b60243561254281610a0f565b60443561254e81610a0f565b60643561255a81610a0f565b60843561256681610a0f565b60a4359061257382610a0f565b60c4359261258084610a0f565b60e4359461258d86610a0f565b610104359661259b88610a0f565b61012435986125a98a610a0f565b613f8e565b346103a95760203660031901126103a9576004356125ca614792565b6125d381614317565b806000526009602052604060002060ff19815416905533907f81a106317e7bcc4bb0d00469e38615879068b044d72620ca9aec13ad478ccb6c600080a3005b346103a95760403660031901126103a9576110ab60243560043561263582610a0f565b6126416110a1826134c7565b61509c565b346103a95760003660031901126103a9576008546040516001600160a01b039091168152602090f35b346103a9576126da6118fc602061268536611ae3565b93829481989392612694614792565b61269c6142c7565b6126a4614909565b6126ad83614317565b6126b68661432f565b6126c1868585615455565b6126cc600c54610a03565b6126d5816143a4565b614572565b6126e8610460600354610a03565b906000604051809681958294637236934f60e11b84528a6004850161338c565b346103a95761271636611ae3565b61272193929361429d565b6127296142c7565b61273285614317565b821561288c578484916127639361274a848785615455565b612755600c54610a03565b61275e816143a4565b6145aa565b612771610460600054610a03565b604051638d34875560e01b815260048101859052909290600081602481875afa90811561085057600091612871575b508051156128605761012001516127b681612910565b6127bf81612910565b61284f57823b156103a95760006040518094637f15208d60e01b82528183816127eb8a600483016136a4565b03925af1928315610850577f07783f66bb7a1367042849627a0e745b947e50de5c98cd9e436eaf66569f6d1a9361283a575b5061282f60405192839242918461338c565b0390a26110ab614303565b806108156000612849936114f1565b3861281d565b63e047416960e01b60005260046000fd5b637bb0b62160e01b60005260046000fd5b61288691503d806000833e61092981836114f1565b386127a0565b63fbd85bc360e01b60005260046000fd5b346103a95760003660031901126103a9576002546040516001600160a01b039091168152602090f35b346103a95760203660031901126103a9576004356128e381610a0f565b6128eb614792565b6001600160a01b03168015610aa857600c80546001600160a01b031916919091179055005b6008111561291a57565b634e487b7160e01b600052602160045260246000fd5b90600882101561291a5752565b610a2b909291926101008061012083019580518452602081015160208501526040810151604085015260018060a01b03606082015116606085015264ffffffffff60808201511660808501526129a160a082015160a086019064ffffffffff169052565b60c08181015161ffff169085015260e08181015164ffffffffff16908501520151910190612930565b346103a95760203660031901126103a957612a1960006004356129eb61423c565b506129f96104608354610a03565b6040518080958194638d34875560e01b8352600483019190602083019252565b03915afa90811561085057600091612b03575b5080519060208101519060408101516080820151612a4990610a03565b60a083015164ffffffffff1660c084015164ffffffffff169160e0850151612a729061ffff1690565b93610100860151612a879064ffffffffff1690565b95610120015196612a9788612910565b612a9f611529565b988952602089015260408801526001600160a01b0316606087015264ffffffffff16608086015264ffffffffff1660a085015261ffff1660c084015264ffffffffff1660e0830152612af5906101008301614291565b60405161079581928261293d565b612b16913d8091833e61092981836114f1565b38612a2c565b346103a95760203660031901126103a9576004356000526009602052602060ff604060002054166040519015158152f35b60609060031901126103a957600435906024359060443590565b346103a957612b7536612b4d565b919060018060a01b03612b8c610460600154610a03565b1680158015612e80575b8015612e76575b610aa8573303612e6557612bb5610460600054610a03565b92612bbf84610a03565b15610aa857604051638d34875560e01b815260048101849052600081602481885afa90811561085057600091612e4c575b50805115610905576001600160801b038311610f8e5764ffffffffff8211610f8e5760c081015164ffffffffff1694803b156103a9576000604051809263fa5fa16360e01b8252818381612c488a8c6004840161334b565b03925af1801561085057612e37575b508215801590612e2a575b612cfb575b50506000612c9c92612c7c6104608354610a03565b6040518080968194638d34875560e01b8352600483019190602083019252565b03915afa91821561085057600092612cde575b50604082015103610f8e5764ffffffffff612cd360c08293015164ffffffffff1690565b9216911610610f8e57005b612cf49192503d806000833e61092981836114f1565b9038612caf565b604081015115612dbf575b6101209150018051612d1781612910565b612d2081612910565b15908115612da1575b50612d36575b3880612c67565b612d44610460600054610a03565b91823b156103a95760006040518094637f15208d60e01b8252818381612d6d87600483016136bb565b03925af190811561085057612c9c93600092612d8d575b50925050612d2f565b8061081584612d9b936114f1565b38612d84565b6001915051612daf81612910565b612db881612910565b1438612d29565b612dcd610460600054610a03565b803b156103a9576040516390da939b60e01b8152926000918491829084908290612dfb908b6004840161334b565b03925af19182156108505761012092612e15575b50612d06565b806108156000612e24936114f1565b38612e0f565b5060408101511515612c62565b806108156000612e46936114f1565b38612c57565b612e5f913d8091833e61092981836114f1565b38612bf0565b63ea8e4eb560e01b60005260046000fd5b5080331415612b9d565b50612e92610460610460600054610a03565b15612b96565b346103a957612eda6020612eab36612b4d565b60085460405163e7f9caa560e01b81529586946001600160a01b0390921693859384939091906004850161338c565b03915afa90811561085057600091612efb575b506040519015158152602090f35b612f14915060203d6020116109815761097381836114f1565b38612eed565b346103a95760003660031901126103a9576020604051600080516020615c5f8339815191528152f35b346103a95760003660031901126103a9576003546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576000546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576007546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a957600c546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a957610795604080519061300a81836114f1565b600682526518971817189960d11b602083015251918291602083526020830190611c1b565b6001600160a01b03166000908152600a6020526040902090565b9060018060a01b0316600052602052604060002090565b908160209103126103a9575180151581036103a95790565b6040513d6000823e3d90fd5b6000526009602052604060002090565b81601f820112156103a95780516130aa81611539565b926130b860405194856114f1565b818452602082840101116103a957611f059160208085019101611bf8565b5190610a2b82610a0f565b5190610a2b82611f08565b5190610a2b82611f22565b5190610a2b82611f39565b6020818303126103a9578051906001600160401b0382116103a95701610140818303126103a957613131611519565b9181518352602082015160208401526040820151604084015260608201519160018060401b0383116103a95761316f610120926131d1948301613094565b6060850152613180608082016130d6565b608085015261319160a082016130e1565b60a08501526131a260c082016130e1565b60c08501526131b360e082016130ec565b60e08501526131c561010082016130e1565b610100850152016130f7565b61012082015290565b91908260809103126103a9578151916020810151916060604083015192015190565b90926060929594936080835280516080840152602081015160a0840152604081015160c08401526132a96101206132438684015161014060e08801526101c0870190611c1b565b60808401516001600160a01b03166101008701529260a081015164ffffffffff168683015260c081015164ffffffffff1661014087015260e081015161ffff1661016087015261010081015164ffffffffff1661018087015201516101a0850190612930565b95602083015260408201520152565b60009060033d116132c557565b905060046000803e60005160e01c90565b600060443d10611f05576040513d600319016004823e8051916001600160401b0383113d602485011117613345578183018051909390916001600160401b03831161333d573d8401600319018584016020011161333d5750611f05929101602001906114f1565b949350505050565b92915050565b908152602081019190915260400190565b908160209103126103a95751611f0581610a0f565b6001600160a01b039091168152602081019190915260400190565b6040919493926060820195825260208201520152565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b908160209103126103a9575190565b634e487b7160e01b600052601160045260246000fd5b919082039182116134c257565b61349f565b600052600080516020615c3f83398151915260205260016040600020015490565b903590601e19813603018212156103a957018035906001600160401b0382116103a9576020019181360383136103a957565b9035601e19823603018112156103a9570160208101919035906001600160401b0382116103a95781360383136103a957565b908060209392818452848401376000828201840152601f01601f1916010190565b63ffffffff8116036103a957565b3590610a2b8261356d565b91611f0593919260408152833560408201526020840135606082015260408401356080820152606084013560a0820152608084013560c082015261365161364361016061363c6135ef6135dc60a08a018a61351a565b61018060e08901526101c088019161354c565b60c089013561010087015260e0890135610120870152610100890135610140870152610120890135838701526136296101408a018a61351a565b878303603f19016101808901529061354c565b960161357b565b63ffffffff166101a0830152565b602081850391015261354c565b9695949092608094926136889489526020890152604088015260a0606088015260a087019161354c565b930152565b908152604081019190610a2b906020016005612930565b908152604081019190610a2b906020016001612930565b908152604081019190610a2b906020016002612930565b908152604081019291610a2b9160200190612930565b959697949297939091936136fa6142c7565b61370261429d565b33600052600a6020526040600020544311156109885761373981613727368887611554565b61373236868e611554565b908a61546f565b80156109485761374d610460600454610a03565b604051634977ff8b60e11b81526004810183905290602090829060249082905afa908115610850576000916138ed575b501561094857613791610460600054610a03565b604051631e1778ad60e11b8152600481018990529096906020816024818b5afa908115610850576000916138ce575b506138bd576137d0600b54610a03565b6001600160a01b03811615610aa857868b868b6138158e8b8a6137f761046060209a610a03565b966040519a8b998a98899863728e8bbb60e01b8a5260048a0161390c565b03915afa9081156108505760009161389e575b5015610f8e57602097600094613857936040519b8c9a8b998a986306f4597160e21b8a52339260048b01613952565b03925af19081156108505760009161387f575b50436138753361302f565b5590610a2b614303565b613898915060203d602011610f0b57610efd81836114f1565b3861386a565b6138b7915060203d6020116109815761097381836114f1565b38613828565b630dd1bc8b60e31b60005260046000fd5b6138e7915060203d602011610f0b57610efd81836114f1565b386137c0565b613906915060203d6020116109815761097381836114f1565b3861377d565b969490611f059896926139449594613931928a5260a060208b015260a08a019161354c565b926040880152868303606088015261354c565b92608081850391015261354c565b99989793919461397a60a098966139949560c08e6136889b968152816020820152019161354c565b926001808a1b031660408c01528a830360608c015261354c565b91878303608089015261354c565b60405161016091906139b483826114f1565b600a815291601f19018260005b8281106139cd57505050565b8060606020809385010152016139c1565b8051156139eb5760200190565b634e487b7160e01b600052603260045260246000fd5b8051600110156139eb5760400190565b8051600210156139eb5760600190565b8051600310156139eb5760800190565b8051600410156139eb5760a00190565b8051600510156139eb5760c00190565b8051600610156139eb5760e00190565b8051600710156139eb576101000190565b8051600810156139eb576101200190565b8051600910156139eb576101400190565b60405190613aa36040836114f1565b600a8252691c1bdcda5d1a5bdb925960b21b6020830152565b60405190613acb6040836114f1565b600a8252691b5a5b9d105b5bdd5b9d60b21b6020830152565b60405190613af36040836114f1565b60078252666d696e7446656560c81b6020830152565b60405190613b186040836114f1565b60078252661b995dd119589d60ca1b6020830152565b60405190613b3d6040836114f1565b600d82526c1b995dd0dbdb1b185d195c985b609a1b6020830152565b60405190613b686040836114f1565b6008825267627463507269636560c01b6020830152565b60405190613b8e6040836114f1565b60148252730c2eae8d0dee4d2f4cac8a6e0cadcc8e690c2e6d60631b6020830152565b60405190613bc06040836114f1565b600b82526a0eac6c888cac4e890c2e6d60ab1b6020830152565b60405190613be96040836114f1565b600c82526b0c6dedce8e4c2c6e890c2e6d60a31b6020830152565b60405190613c136040836114f1565b601082526f07175616e74756d54696d657374616d760841b6020830152565b611f05949260609263ffffffff60e01b1682526020820152816040820152019161354c565b9192303303612e6557610120830160028151613c7281612910565b613c7b81612910565b14613d39575b600c8303613d2a576301e13380905b613caf82613caa61052461010089015164ffffffffff1690565b614704565b91613cc3613cbd42856134b5565b9161472b565b10613d195760039051613cd581612910565b613cde81612910565b14613d0c575b50613d0693613cf4600454610a03565b92613d00600154610a03565b94615562565b90919293565b421015613d195738613ce4565b6309116a8160e11b60005260046000fd5b613d3383614711565b90613c90565b613d4f61052461010086015164ffffffffff1690565b421115613c815763088502f160e21b60005260046000fd5b99979593919896949290986040519960208b019b8c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152613dc4610180826114f1565b51902090565b949a999590969198929a979397613ddf61429d565b613de76142c7565b613def614909565b8315610f8e57613e3d848760209d8f9a613e248f8f9d8f9e60009f928893613ea09f8c908f8f613e1e8461432f565b8c61576b565b613e2f600c54610a03565b613e38816143a4565b6145e2565b613e4b610460600154610a03565b986040519c8d9b8c9a8b9963ee3448f960e01b8b5260048b0195926101009794919a9998959261012088019b8852602088015260408701526060860152608085015260a084015260c083015260e08201520152565b03925af190811561085057600091613ece575b5015610f8e57613ec1614986565b613ec9614303565b600190565b613ee7915060203d6020116109815761097381836114f1565b38613eb3565b15613ef457565b60405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79206c6f616e206f7065726174696f6e73206d616e616765722063616e6044820152692063616c6c207468697360b01b6064820152608490fd5b15613f5357565b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c1bdcda5d1a5bdb881251606a1b6044820152606490fd5b97959391989694929098600080516020615cdf8339815191525499613fb960ff8c60401c1615151590565b9a6001600160401b0316801590816140a9575b600114908161409f575b159081614096575b5061408557600080516020615cdf83398151915280546001600160401b0319166001179055614011998b614060576140b1565b61401757565b600080516020615cdf833981519152805460ff60401b19169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b600080516020615cdf833981519152805460ff60401b1916600160401b1790556140b1565b63f92ee8a960e01b60005260046000fd5b90501538613fde565b303b159150613fd6565b8c9150613fcc565b989793929896919094966140c3615a16565b6140cb6157e7565b6140d3615a16565b6140db615a16565b6140e3615a44565b6001600160a01b0316948515610aa8576001600160a01b0316908115610aa8576001600160a01b0316988915610aa8576001600160a01b0316928315610aa8576001600160a01b0316968715610aa8576001600160a01b0316958615610aa8576001600160a01b0316918215610aa8576001600160a01b0316938415610aa8576001600160a01b0316958615610aa8576001600160a01b03891615610aa8576141be61420c986141b96141c8966141b46142399e6141af6141c3986141aa6141ea9e6133a2565b6133c4565b6133e6565b613408565b61342a565b61344c565b61346e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61421581614c89565b5061421f81614d22565b5061422981614ddf565b5061423381614e9c565b50614f59565b50565b6040519061012082016001600160401b03811183821017611514576040526000610100838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b600882101561291a5752565b60ff600080516020615c7f83398151915254166142b657565b63d93c066560e01b60005260046000fd5b6002600080516020615c9f83398151915254146142f2576002600080516020615c9f83398151915255565b633ee5aeb560e01b60005260046000fd5b6001600080516020615c9f83398151915255565b1561431e57565b6379ec0ed760e11b60005260046000fd5b8015801561437c575b801561436d575b6143465750565b6382d6282f60e01b60005260045264e8d4a51000602452655af3107a400060445260646000fd5b50655af3107a4000811161433f565b5064e8d4a510008110614338565b9290611751613dc492604051948593602085019788611f4e565b6001600160a01b0316156143b457565b639cef199b60e01b60005260046000fd5b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd9263018af30960e01b60048601613c32565b0381875afa90811561085057600091614473575b501561446257823b156103a9576144429260009283604051809681958294630e62cc9360e21b84526004840161334b565b03925af18015610850576144535750565b806108156000610a2b936114f1565b636227817160e01b60005260046000fd5b61448c915060203d6020116109815761097381836114f1565b38614411565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd926304e9585760e11b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd9263121f00ad60e21b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd9263544ba5af60e01b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd926318eea33b60e21b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd92636b40812160e11b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd92630d7d9f4b60e41b60048601613c32565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926143fd92632c545d9960e21b60048601613c32565b604051634911e9cd60e01b8152600481019190915291926001600160a01b0316602083602481845afa928315610850576000936146dc575b50604051630180d64960e11b8152600481019290925260209082908180602481015b03915afa908115610850576000916146bd575b50808211156146b357614699916134b5565b905b036146a257565b63896492f560e01b60005260046000fd5b505060009061469b565b6146d6915060203d602011610f0b57610efd81836114f1565b38614687565b6020919350916146fb61467493833d8511610f0b57610efd81836114f1565b93915091614652565b919082018092116134c257565b9062278d0082029180830462278d0014901517156134c257565b908160011b91808304600214901517156134c257565b818102929181159184041417156134c257565b90600c81146147805762278d0081029080820462278d0014901517156134c25781018091116134c25790565b506301e1338081018091116134c25790565b600080516020615cbf833981519152600052600080516020615c3f83398151915260205260ff6147d033600080516020615b7f833981519152613049565b5416156147d957565b63e2517d3f60e01b60005233600452600080516020615cbf83398151915260245260446000fd5b60008052600080516020615c3f83398151915260205260ff61483033600080516020615bbf833981519152613049565b54161561483957565b63e2517d3f60e01b60005233600452600060245260446000fd5b600080516020615b1f833981519152600052600080516020615c3f83398151915260205260ff61489133600080516020615c1f833981519152613049565b54161561489a57565b63e2517d3f60e01b60005233600452600080516020615b1f83398151915260245260446000fd5b80600052600080516020615c3f83398151915260205260ff6148e7336040600020613049565b5416156148f15750565b63e2517d3f60e01b6000523360045260245260446000fd5b6002600080516020615b5f8339815191525414614934576002600080516020615b5f83398151915255565b60405162461bcd60e51b8152602060048201526024808201527f476c6f62616c5265656e7472616e637947756172643a207265656e7472616e746044820152640818d85b1b60da1b6064820152608490fd5b6001600080516020615b5f83398151915255565b91909115613f53578115614a43575115614a0457116149b557565b60405162461bcd60e51b815260206004820152602160248201527f5061796d656e7420616d6f756e74206578636565647320746f74616c206465626044820152601d60fa1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526017602482015276141bdcda5d1a5bdb88191bd95cc81b9bdd08195e1a5cdd604a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602860248201527f5061796d656e7420616d6f756e74206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608490fd5b60008054604051638d34875560e01b815260048101849052929190839060249082906001600160a01b03165afa91821561085057600092614b0b575b5081511490811591614aec575b50610f8e57600190565b608001516001600160a01b039150614b0390610a03565b161538614ae2565b614b219192503d806000833e61092981836114f1565b9038614ad5565b614b3181612910565b60018114159081614bd9575b81614bc3575b81614bae575b50614b5057565b60405162461bcd60e51b815260206004820152603060248201527f506f736974696f6e20737461747573206e6f7420656c696769626c6520666f7260448201526f081c185c9d1a585b081c185e5b595b9d60821b6064820152608490fd5b60049150614bbb81612910565b141538614b49565b9050614bce81612910565b600381141590614b43565b9050614be481612910565b600281141590614b3d565b6040516323b872dd60e01b60208083019182526001600160a01b0394851660248401529490931660448201526064808201959095529384529260009190614c376084826114f1565b519082855af115613078576000513d614c8057506001600160a01b0381163b155b614c5f5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415614c58565b60008052600080516020615c3f83398151915260205260ff614cb982600080516020615bbf833981519152613049565b5416614d1c5760008052600080516020615c3f833981519152602052614ced81600080516020615bbf833981519152613049565b805460ff1916600117905533906001600160a01b03166000600080516020615aff8339815191528180a4600190565b50600090565b600080516020615b1f833981519152600052600080516020615c3f83398151915260205260ff614d6082600080516020615c1f833981519152613049565b5416614d1c57600080516020615b1f833981519152600052600080516020615c3f833981519152602052614da281600080516020615c1f833981519152613049565b805460ff1916600117905533906001600160a01b0316600080516020615b1f833981519152600080516020615aff833981519152600080a4600190565b600080516020615cbf833981519152600052600080516020615c3f83398151915260205260ff614e1d82600080516020615b7f833981519152613049565b5416614d1c57600080516020615cbf833981519152600052600080516020615c3f833981519152602052614e5f81600080516020615b7f833981519152613049565b805460ff1916600117905533906001600160a01b0316600080516020615cbf833981519152600080516020615aff833981519152600080a4600190565b600080516020615c5f833981519152600052600080516020615c3f83398151915260205260ff614eda82600080516020615bff833981519152613049565b5416614d1c57600080516020615c5f833981519152600052600080516020615c3f833981519152602052614f1c81600080516020615bff833981519152613049565b805460ff1916600117905533906001600160a01b0316600080516020615c5f833981519152600080516020615aff833981519152600080a4600190565b600080516020615b3f833981519152600052600080516020615c3f83398151915260205260ff614f9782600080516020615b9f833981519152613049565b5416614d1c57600080516020615b3f833981519152600052600080516020615c3f833981519152602052614fd981600080516020615b9f833981519152613049565b805460ff1916600117905533906001600160a01b0316600080516020615b3f833981519152600080516020615aff833981519152600080a4600190565b80600052600080516020615c3f83398151915260205260ff61503c836040600020613049565b54166150955780600052600080516020615c3f833981519152602052615066826040600020613049565b805460ff1916600117905533916001600160a01b031690600080516020615aff833981519152600080a4600190565b5050600090565b80600052600080516020615c3f83398151915260205260ff6150c2836040600020613049565b5416156150955780600052600080516020615c3f8339815191526020526150ed826040600020613049565b805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b8051156151355750565b60405163df70480560e01b8152602060048201529081906116fd906024830190611c1b565b9c9798939d9e9d60a08e6151c99c976101609f9a949363ffffffff9f9a96976151a498610180968552602085015260408401526060830152608082015201526101808d019161354c565b9560c08b015260e08a015261010089015261012088015286830361014088015261354c565b9416910152565b803560208201359060408301359260608101359060808101359060a081016151f890826134e8565b60c083013560e0840135906101008501359261012086013594610140870161522090886134e8565b9890976101600135996152328b61356d565b6040519d8e9d60208f019d6152469e61515a565b03601f198101825261525890826114f1565b8051906020012090565b91909181156152955761527d92615278916157f7565b6158a6565b1061528457565b635e31938360e11b60005260046000fd5b50505050565b600881101561291a5780151590816152ec575b816152d6575b816152c1575b5061284f57565b600691506152ce81612910565b1415386152ba565b90506152e181612910565b6002811415906152b4565b90506152f781612910565b6001811415906152ae565b9061531560209282815194859201611bf8565b0190565b6040516352d1902d60e01b81529091906020816004816001600160a01b0387165afa60009181615434575b5061536757634c9c8ce360e01b6000526001600160a01b03831660045260246000fd5b600080516020615bdf83398151915281036154205750813b156153fe57600080516020615bdf83398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28051156153e45761423991615a5b565b5050346153ed57565b63b398979f60e01b60005260046000fd5b50634c9c8ce360e01b60009081526001600160a01b0391909116600452602490fd5b632a87526960e21b60005260045260246000fd5b61544e91925060203d602011610f0b57610efd81836114f1565b9038615344565b9190613dc49061175160405193849260208401968761338c565b61547890614317565b8051156154f55760409051106154b9576154919061512b565b801561549a5750565b6304a45adb60e51b600052600452600160245260001960445260646000fd5b60405163df70480560e01b815260206004820152601360248201527214da59db985d1d5c99481d1bdbc81cda1bdc9d606a1b6044820152606490fd5b60405163df70480560e01b815260206004820152600f60248201526e456d707479207369676e617475726560881b6044820152606490fd5b51906001600160581b03821682036103a957565b91908260409103126103a957611f05602061555b8461552d565b930161552d565b604080516353f366c760e01b815260048101849052939794969195849060249082906001600160a01b03165afa928315610850576000936156f9575b5060408501805190936155db916155be916001600160581b031690615931565b976155ca8986516159a3565b976155d68983836159c8565b6157f7565b925160405163100c48d360e21b81526001600160a01b039092169190602082600481865afa9081156108505761561a926000926156d8575b50856159fa565b6156c75760206004916040519283809263100c48d360e21b82525afa801561085057615650916000916156a8575b5086846159fa565b61569757613caa61567360e06156698861567a966158a6565b96015161ffff1690565b61ffff1690565b9061ffff821161568657565b6319a4c60960e21b60005260046000fd5b631300e8bd60e21b60005260046000fd5b6156c1915060203d602011610f0b57610efd81836114f1565b38615648565b63e5cace4160e01b60005260046000fd5b6156f291925060203d602011610f0b57610efd81836114f1565b9038615613565b61571c91935060403d604011615725575b61571481836114f1565b810190615541565b9050913861559e565b503d61570a565b6001600160a01b03811690811561575a573b156157465750565b630fb15bad60e11b60005260045260246000fd5b63d92e233d60e01b60005260046000fd5b9896919497909392956040519860208a019a7ffa8f74e09e937f69ff6ed56ad5685b576507504860024ea40564c0432ff8034a8c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152613dc4610180826114f1565b6157ef615a16565b614303615a16565b90660775f05a0740008211615895576a52b7d2dcc80cd2e4000000811161588457811580159081615858575b506158475761583191614741565b6064810290808204606414901517156134c25790565b63450d49cd60e01b60005260046000fd5b905061586e576064826000190404811138615823565b634e487b7160e01b600052601260045260246000fd5b63128df78360e01b60005260046000fd5b63e9ec682160e01b60005260046000fd5b81156159205768327cb2734119d3b7a9601e1b811161590f577e068db8bac710cb295e9e1b089a027525460aa64c2f837b4a2339c0ebedfa4381116158fe5761271081029080820461271014901517156134c2570490565b633da428df60e21b60005260046000fd5b638a94304d60e01b60005260046000fd5b6323d359a360e01b60005260046000fd5b68327cb2734119d3b7a9601e1b811161590f5761271082116159925780158015908161597f575b5061596e576127109161596a91614741565b0490565b6340c0d6e560e11b60005260046000fd5b905061586e578060001904821138615958565b637186728f60e11b60005260046000fd5b908101908181116134c25781106159b75790565b636be580af60e11b60005260046000fd5b660775f05a07400010615895576a52b7d2dcc80cd2e4000000106158845768327cb2734119d3b7a9601e1b1061590f57565b908015615a0e57615a0a916158a6565b1090565b505050600090565b60ff600080516020615cdf8339815191525460401c1615615a3357565b631afcd79f60e31b60005260046000fd5b600080516020615b5f833981519152541561498657565b600080611f0593602081519101845af43d15615a99573d91615a7c83611539565b92615a8a60405194856114f1565b83523d6000602085013e615a9d565b6060915b90615ac35750805115615ab257602081519101fd5b63d6bda27560e01b60005260046000fd5b81511580615af5575b615ad4575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15615acc56fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5e17fc5225d4a099df75359ce1f405503ca79498a8dc46a7d583235a0ee45c16f4a222f146e17d7057e96450fc67f08ce8569fd5cf3b62a23983c4f4b9e497f35cd165352ca420415a2423a5a15f077145431fc21aec9b84cb1b8800541a5c26b16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c1b3eac282bb4080c159156c6faa9df237c5a80b4a568c4661ea2010de1eb2caeb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd6c996ba66d0dbb3c38dbaaac7d192f7d41593dd02b55a9147053192322b1d3b615dc3ea5d9654acb949989a0a9587a0da8cd03451c0368cc676ec7c08dd81402dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268004ad5455c7a5edb25c14b61cc4d6429153aab5507800334ac05d65e9828801bf3cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00aaae1071a267a66db1d9c0714498307791bc0f693f5b254c861d95ca60503b6da2646970667358221220bf923774eda538ae7e572ed34d44d75ffa44665884eb85128bc0d128090cf31a64736f6c634300081c0033";
|
|
38828
|
+
var _bytecode = "0x60a080604052346100ea57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b604051615d7b90816100f082396080518181816115f001526118000152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063018af3091461037757806301ffc9a714610372578063043fe8fc1461036d57806309d2b0ae1461036857806316d8887a1461036357806316efd9411461035e5780631732d33014610359578063248a9ca3146103545780632f2ff15d1461034f57806336568abe1461034a578063393d92cc1461034557806344c8b85214610340578063487c02b41461033b5780634a54e00a146103365780634f1ef2861461033157806352d1902d1461032c578063544ba5af146103275780635c975abb146103225780635e4936e81461031d5780636068b5d11461031857806363ba8cec146103135780636a89edad1461030e5780636b80155f1461030957806374cb36e61461030457806375b238fc146102ff5780638179dc38146102fa5780638ffee9cd146102f557806391d14854146102f05780639b9d30c1146102eb578063a217fddf146102e6578063a9a52888146102e1578063a9eadc52146102dc578063aa4fec70146102d7578063ad3cb1cc146102d2578063b1517664146102cd578063bb627c2e146102c8578063c12e1291146102c3578063c306b378146102be578063d0e8ce82146102b9578063d547741f146102b4578063d65e880d146102af578063d6810242146102aa578063d8dfeb45146102a5578063d9cb25a2146102a0578063dc5632531461029b578063dd74ac7a14610296578063ddccaa3a14610291578063e7f9caa51461028c578063f005e76714610287578063f2dfbf6614610282578063f2f4eb261461027d578063f851a44014610278578063fb7c6a0f146102735763ffa1ad741461026e57600080fd5b61300e565b612fe5565b612fbc565b612f93565b612f6a565b612f41565b612ebf565b612b8e565b612b43565b6129f1565b6128ed565b6128c4565b61282b565b612802565b6127ce565b61276a565b6126d1565b612629565b61247c565b61241b565b6123d4565b61239a565b612371565b61231d565b612301565b6122c6565b612275565b612086565b611f79565b611ed0565b611ea7565b611def565b611caf565b611b2d565b611a57565b6119f6565b6119c6565b611846565b6117ed565b61159e565b6114c5565b6111b4565b611133565b61110a565b6110c0565b611085565b61105f565b611024565b610ffb565b610fd2565b610af7565b610a2d565b6109b0565b6103ae565b9181601f840112156103a9578235916001600160401b0383116103a957602083818601950101116103a957565b600080fd5b346103a95760c03660031901126103a95760843560043560243560643560443560a4356001600160401b0381116103a9576103ed90369060040161037c565b91906103f76142c4565b6103ff6142ee565b33600052600a602052604060002054431115610988576104529286916104248361433e565b61042d86614356565b610439848789866143b1565b610444600c54610a03565b61044d816143cb565b6143ec565b610465610460600454610a03565b610a03565b604051634977ff8b60e11b81526004810184905290602090829060249082905afa90811561085057600091610959575b5015610948576104ae6104a7846130ab565b5460ff1690565b610937576104c0610460600054610a03565b604051638d34875560e01b81526004810185905290600090829060249082905afa90811561085057600091610916575b506104fe6080820151610a03565b906101208101519561050f87612937565b61052e61052460a084015164ffffffffff1690565b64ffffffffff1690565b92825115610905576001600160a01b0316963388036108f45761055081612937565b600281141590816108df575b506108ce57816105b8869261058460206080960151828b61057e600154610a03565b92614641565b61059d6105908a6130ab565b805460ff19166001179055565b60405163102f3b8760e31b8152968794859460048601613223565b0381305afa600081600094600093610894575b5061062457856105d96132df565b6308c379a01461060b575b6105f06105fa916130ab565b805460ff19169055565b633a4f184b60e11b60005260046000fd5b6106136132fd565b156105e4576105f06105fa916130ab565b92610633610460600054610a03565b803b156103a95760405163fa5fa16360e01b8152916000918391829084908290610661908d60048401613372565b03925af180156108505761087f575b5061067f610460600054610a03565b91823b156103a95760006040518094630d7ad17360e41b82528183816106a9888d60048401613372565b03925af1928315610850576106c39361086a575b5061477b565b916106d2610460600054610a03565b803b156103a9576000604051809263b222bec960e01b82528183816106fb8a8c60048401613372565b03925af1801561085057610855575b50610719610460600154610a03565b60405163b1d3354f60e01b8152602081600481855afa90811561085057600091610821575b5083610799575b5050610772600080516020615d26833981519152936107666105f0876130ab565b604051938493846133b3565b0390a34361077f33613056565b5561078861432a565b6040516001815280602081015b0390f35b6001600160a01b0316803b156103a957836000916107ce9383604051809681958294633c37699760e21b845260048401613398565b03925af19081610806575b506107ef57637101508d60e11b60005260046000fd5b610772600080516020615d26833981519152610745565b80610815600061081b93611504565b80610fc7565b386107d9565b610843915060203d602011610849575b61083b8183611504565b810190613383565b3861073e565b503d610831565b61309f565b80610815600061086493611504565b3861070a565b80610815600061087993611504565b386106bd565b80610815600061088e93611504565b38610670565b915093506108ba915060803d6080116108c7575b6108b28183611504565b810190613201565b94929050909391386105cb565b503d6108a8565b63a8a168bf60e01b60005260046000fd5b600391506108ec81612937565b14153861055c565b631963d1e760e31b60005260046000fd5b636ec9be1160e01b60005260046000fd5b610931913d8091833e6109298183611504565b810190613129565b386104f0565b6358c8679f60e01b60005260046000fd5b63559bd01960e01b60005260046000fd5b61097b915060203d602011610981575b6109738183611504565b810190613087565b38610495565b503d610969565b633b53d1db60e01b60005260046000fd5b600435906001600160e01b0319821682036103a957565b346103a95760203660031901126103a95760206001600160e01b03196109d4610999565b16637965db0b60e01b81149081156109f2575b506040519015158152f35b6301ffc9a760e01b149050386109e7565b6001600160a01b031690565b6001600160a01b038116036103a957565b3590610a2b82610a0f565b565b346103a95760203660031901126103a957600435610a4a81610a0f565b610a526147b9565b6001600160a01b03168015610aa857600b80546001600160a01b0319811683179091553391906001600160a01b03167f440ec6c0da0791f6d650579df27149ce4ffc4f4fbf63e9a8bcd45dacdbf338a2600080a4005b63e6c4247b60e01b60005260046000fd5b60a06003198201126103a95760043591602435916044359160643591608435906001600160401b0382116103a957610af39160040161037c565b9091565b346103a957610b0536610ab9565b610b109594956142c4565b610b186142ee565b610b20614930565b610b2e610460600654610a03565b803b156103a95760405163102d617560e01b81526004810188905260006024820181905290918290604490829084905af1801561085057610fb2575b50610b7483614356565b8315610fa157848491610ba693610b8d898786866143b1565b610b98600c54610a03565b610ba1816143cb565b6144b9565b610bb4610460600054610a03565b604051638d34875560e01b81526004810185905290600090829060249082905afa90811561085057600091610f88575b50610bf26080820151610a03565b61012082015190610c0282612937565b610c136040840151809489896149c1565b610c23610c1f87614ac0565b1590565b908115610f74575b50610f6357610c3990614b4f565b60046020610c4b610460600154610a03565b60405163023b2a9f60e31b815292839182905afa90811561085057600091610f44575b506040516370a0823160e01b81526001600160a01b0391909116929060208180610c9b336004830161235e565b0381875afa8015610850578791600091610f25575b50108015610ebc575b610eab57600492610ccc87303384614c16565b6020610cdc610460600154610a03565b60405163b1d3354f60e01b815295869182905afa93841561085057600094610e8a575b5060405163095ea7b360e01b81526001600160a01b03851660048201526000602482015290602082806044810103816000855af190811561085057610d67956020938a93610e6f575b50600060405180988195829463095ea7b360e01b845260048401613398565b03925af19283156108505786602093610d8992610db996610e54575b506134dc565b93610d98610460600154610a03565b9060006040518096819582946322de8a2d60e01b84528c8c60048601611f5d565b03925af190811561085057600091610e35575b5015610e2457610e057f58c8fcf57870633c97de2da7d6e74c7544b530d15779c0d107edd9933747ec5191604051918291339683613372565b0390a3610e106149ad565b610e1861432a565b60405160018152602090f35b63d0806ec760e01b60005260046000fd5b610e4e915060203d602011610981576109738183611504565b38610dcc565b610e6a90863d8811610981576109738183611504565b610d83565b610e8590853d8711610981576109738183611504565b610d48565b610ea491945060203d6020116108495761083b8183611504565b9238610cff565b631e9acf1760e31b60005260046000fd5b50604051636eb1769f60e11b8152336004820152306024820152602081604481875afa8015610850578791600091610ef6575b5010610cb9565b610f18915060203d602011610f1e575b610f108183611504565b8101906134b7565b38610eef565b503d610f06565b610f3e915060203d602011610f1e57610f108183611504565b38610cb0565b610f5d915060203d6020116108495761083b8183611504565b38610c6e565b6334b110b160e11b60005260046000fd5b6001600160a01b0316331415905038610c2b565b610f9b913d8091833e6109298183611504565b38610be4565b630a0b0d7960e01b60005260046000fd5b806108156000610fc193611504565b38610b6a565b60009103126103a957565b346103a95760003660031901126103a9576020604051600080516020615b468339815191528152f35b346103a95760003660031901126103a9576006546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a95760206040517f9792fdc19ab98adfa72ab2fa98d342618c661e01c406979c105b31eda87f5e6f8152f35b346103a95760203660031901126103a957602061107d6004356134ee565b604051908152f35b346103a95760403660031901126103a9576110be6024356004356110a882610a0f565b6110b96110b4826134ee565b6148e8565b61503d565b005b346103a95760403660031901126103a9576004356024356110e081610a0f565b336001600160a01b038216036110f9576110be916150c3565b63334bd91960e11b60005260046000fd5b346103a95760003660031901126103a9576001546040516001600160a01b039091168152602090f35b346103a95760203660031901126103a957600054604051631e1778ad60e11b8152600480359082015290602090829060249082906001600160a01b03165afa80156108505761079591600091611195575b506040519081529081906020820190565b6111ae915060203d602011610f1e57610f108183611504565b38611184565b346103a95760403660031901126103a9576004356001600160401b0381116103a9578060040161018060031983360301126103a9576024356001600160401b0381116103a95761120890369060040161037c565b6112106142c4565b6112186142ee565b8235926112248461433e565b611231602486013561433e565b61123e604486013561433e565b61124b606486013561433e565b61126a61126561125e60a488018461350f565b3691611567565b615152565b6101248501359261127a84614356565b6112aa611286836151f7565b868584611294600c54610a03565b9361129e856143cb565b6101048c0135946144f1565b6112b8610460600654610a03565b803b156103a9576000604051809263102d617560e01b82528183816112eb60048201906000602060408401938281520152565b03925af18015610850576114b0575b50611309610460600054610a03565b604051638d34875560e01b8152600481018790529490600090869060249082905afa94851561085057600095611495575b508451156109055761134f6080860151610a03565b336001600160a01b03909116036108f45761136c610c1f87614ac0565b610f635760e46004970135604086015195602061138d610460600154610a03565b60405163100c48d360e21b81529a8b9182905afa98891561085057611407996020986113d995610120956113c994600094611476575b50615289565b01516113d481612937565b6152c2565b60006113e9610460600254610a03565b926040519788958694859363121f00ad60e21b8552600485016135ad565b03925af191821561085057600092611455575b508161143f575b6107958261142d61432a565b60405191829182901515815260200190565b610c1f61144b91614ac0565b610f635738611421565b61146f91925060203d602011610981576109738183611504565b903861141a565b61148e9194508c3d8e11610f1e57610f108183611504565b92386113c3565b6114a991953d8091833e6109298183611504565b933861133a565b8061081560006114bf93611504565b386112fa565b346103a95760003660031901126103a9576004546040516001600160a01b039091168152602090f35b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b0382119082101761152757604052565b6114ee565b60405190610a2b61014083611504565b60405190610a2b61012083611504565b6001600160401b03811161152757601f01601f191660200190565b9291926115738261154c565b916115816040519384611504565b8294818452818301116103a9578281602093846000960137010152565b60403660031901126103a9576004356115b681610a0f565b6024356001600160401b0381116103a957366023820112156103a9576115e6903690602481600401359101611567565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156117ca575b506117b957611628614827565b611636610460600754610a03565b6001600160a01b03811615610aa85760206040518092631052504160e01b82528180611665886004830161235e565b03915afa60009181611798575b5061178a5761167f6132df565b6308c379a014611714575b60405162461bcd60e51b815260206004820152605160248201527f41646d696e2076616c69646174696f6e206661696c65643a20556e6b6e6f776e60448201527f206572726f7220286c696b656c7920726571756972652866616c73652920696e6064820152702076616c6964617465557067726164652960781b60848201528060a481015b0390fd5b61171c6132fd565b80611727575061168a565b60405178020b236b4b7103b30b634b230ba34b7b7103330b4b632b21d1603d1b602082015261171091611772908290611764906039830190615329565b03601f198101835282611504565b60405162461bcd60e51b8152918291600483016123c3565b15610fa1576110be91615340565b6117b291925060203d602011610981576109738183611504565b9038611672565b63703e46dd60e11b60005260046000fd5b600080516020615c06833981519152546001600160a01b0316141590503861161b565b346103a95760003660031901126103a9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036117b9576020604051600080516020615c068339815191528152f35b346103a95760a03660031901126103a9576004356024356064356044356001600160401b0382116103a957611881602092369060040161037c565b93909160006084359261189261487a565b61189a6142ee565b6118a2614930565b6118ab8861433e565b6118b483614356565b6118df818989886118c688858561547c565b6118d1600c54610a03565b6118da816143cb565b614529565b61190f6118f0610460600354610a03565b946040519889978896879563544ba5af60e01b87528d60048801613685565b03925af1908115610850576000916119a7575b508061193d575b610795906119356149ad565b61142d61432a565b61194b610460600054610a03565b803b156103a957604051637f15208d60e01b815292600091849182908490829061197890600483016136b4565b03925af19182156108505761079592611992575b50611929565b8061081560006119a193611504565b3861198c565b6119c0915060203d602011610981576109738183611504565b38611922565b346103a95760003660031901126103a957602060ff600080516020615ca683398151915254166040519015158152f35b346103a95760203660031901126103a957600854604051630bc926dd60e31b8152600480359082015290602090829060249082906001600160a01b03165afa8015610850576107959160009161119557506040519081529081906020820190565b346103a95760c03660031901126103a9576004356024356001600160401b0381116103a957611a8a90369060040161037c565b90916044356001600160401b0381116103a957611aab90369060040161037c565b93606435939091906001600160401b0385116103a95761079595611ad6611ae696369060040161037c565b9390926084359560a4359761370f565b6040519081529081906020820190565b9060806003198301126103a957600435916024359160443591606435906001600160401b0382116103a957610af39160040161037c565b346103a957611b3b36611af6565b611b4694939461487a565b611b4e6142ee565b611b56614930565b611b5f8461433e565b8415610aa857838591611b9993611b7586614356565b611b8086858561547c565b611b8b600c54610a03565b611b94816143cb565b614561565b611ba7610460600354610a03565b803b156103a957611bd393600080946040519687958694859363f2ebd41f60e01b8552600485016133b3565b03925af1801561085057611bf2575b611bea6149ad565b6110be61432a565b806108156000611c0193611504565b38611be2565b60005b838110611c1a5750506000910152565b8181015183820152602001611c0a565b90602091611c4381518092818552858086019101611c07565b601f01601f1916010190565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611c8257505050505090565b9091929394602080611ca0600193603f198682030187528951611c2a565b97019301930191939290611c73565b346103a95760003660031901126103a957610795611ccb6139c9565b611cd3613abb565b611cdc82613a05565b52611ce681613a05565b50611cef613ae3565b611cf882613a28565b52611d0281613a28565b50611d0b613b0b565b611d1482613a38565b52611d1e81613a38565b50611d27613b30565b611d3082613a48565b52611d3a81613a48565b50611d43613b55565b611d4c82613a58565b52611d5681613a58565b50611d5f613b80565b611d6882613a68565b52611d7281613a68565b50611d7b613ba6565b611d8482613a78565b52611d8e81613a78565b50611d97613bd8565b611da082613a88565b52611daa81613a88565b50611db3613c01565b611dbc82613a99565b52611dc681613a99565b50611dcf613c2b565b611dd882613aaa565b52611de281613aaa565b5060405191829182611c4f565b346103a95760603660031901126103a957611e08610999565b6044356024356001600160401b0382116103a957611e2c602092369060040161037c565b600c54604051636b80155f60e01b81529586946001600160a01b039092169385938493611e5f9391929160048601613c59565b03915afa80156108505761079591600091611e88575b5060405191829182901515815260200190565b611ea1915060203d602011610981576109738183611504565b38611e75565b346103a95760003660031901126103a9576005546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576020604051600080516020615ce68339815191528152f35b9080601f830112156103a957816020611f1493359101611567565b90565b64ffffffffff8116036103a957565b3590610a2b82611f17565b61ffff8116036103a957565b3590610a2b82611f31565b600811156103a957565b3590610a2b82611f48565b9094939260609260808301968352602083015260408201520152565b346103a95760803660031901126103a9576004356001600160401b0381116103a95761014060031982360301126103a957611fb261152c565b6004820135815260248201356020820152604482013560408201526064820135906001600160401b0382116103a95761206061012461079594611ffe6120769560043691840101611ef9565b606085015261200f60848201610a20565b608085015261202060a48201611f26565b60a085015261203160c48201611f26565b60c085015261204260e48201611f3d565b60e08501526120546101048201611f26565b61010085015201611f52565b6101208201526024356044359060643592613c7e565b9060409492945194859485611f5d565b346103a95760e03660031901126103a9576004356120a381610a0f565b602435906120b082610a0f565b604435916120bd83610a0f565b6064356120c981610a0f565b608435916120d683610a0f565b60a435916120e383610a0f565b60c435946120f086610a0f565b6120f86147b9565b61210181615753565b61210a83615753565b61211387615753565b61211c82615753565b61212585615753565b61212e84615753565b61213786615753565b612145610460600754610a03565b91823b156103a957604051638ffee9cd60e01b81526001600160a01b038381166004830152858116602483015289811660448301528281166064830152878116608483015286811660a4830152881660c482015295928660e4815a6000948591f19182156108505761222f986121e9612213966121db6121f7946122219b61220598612260575b506001600160a01b03166133c9565b6001600160a01b03166133eb565b6001600160a01b031661340d565b6001600160a01b031661342f565b6001600160a01b0316613451565b6001600160a01b0316613473565b6001600160a01b0316613495565b6040516007815233907fc5ec6eb3c84a615de1792ae2858fe498e7c3c8e4986fef4ae3cbf1f8d2c68bca90602090a2005b80610815600061226f93611504565b386121cc565b346103a95760403660031901126103a957602060ff6122ba60243560043561229c82610a0f565b600052600080516020615c6683398151915284526040600020613070565b54166040519015158152f35b346103a95760003660031901126103a95760206040517f75027301df982f5215b4963a854cf9c73219df80cb6acd8f098189c9480c7bbc8152f35b346103a95760003660031901126103a957602060405160008152f35b346103a9576101603660031901126103a957610795611ae661014435610124356101043560e43560c43560a435608435606435604435602435600435613d8e565b6001600160a01b03909116815260200190565b346103a95760003660031901126103a957600b546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576020604051600080516020615b668339815191528152f35b906020611f14928181520190611c2a565b346103a95760003660031901126103a95761079560408051906123f78183611504565b60058252640352e302e360dc1b602083015251918291602083526020830190611c2a565b346103a9576101603660031901126103a95760443561014435602435600435610124356101043560e43560c43560a4356084356064356001600160401b038a116103a9576107959a61247461142d9b369060040161037c565b9a9099613df1565b346103a95761248a36610ab9565b9193926124956142c4565b61249d6142ee565b6124a68661433e565b8315612618578015612607576124de9285926124c584899488866143b1565b6124d0600c54610a03565b6124d9816143cb565b614599565b6124ec610460600054610a03565b604051638d34875560e01b815260048101859052909290600081602481875afa908115610850576000916125ec575b508051156125db57610120015161253181612937565b61253a81612937565b6125ca57823b156103a95760006040518094637f15208d60e01b82528183816125668a600483016136cb565b03925af1928315610850577f07783f66bb7a1367042849627a0e745b947e50de5c98cd9e436eaf66569f6d1a936125b5575b506125aa6040519283924291846133b3565b0390a26110be61432a565b8061081560006125c493611504565b38612598565b63e047416960e01b60005260046000fd5b637bb0b62160e01b60005260046000fd5b61260191503d806000833e6109298183611504565b3861251b565b6308d6307f60e31b60005260046000fd5b63fbd85bc360e01b60005260046000fd5b346103a95760403660031901126103a95760243560043561264982611f48565b60015461266d9061266690610460906001600160a01b0316610a03565b3314613f14565b612678811515613f73565b612686610460600054610a03565b91823b156103a9576126b29260009283604051809681958294637f15208d60e01b8452600484016136f9565b03925af18015610850576126c257005b8061081560006110be93611504565b346103a9576101403660031901126103a9576110be6004356126f281610a0f565b6024356126fe81610a0f565b60443561270a81610a0f565b60643561271681610a0f565b60843561272281610a0f565b60a4359061272f82610a0f565b60c4359261273c84610a0f565b60e4359461274986610a0f565b610104359661275788610a0f565b61012435986127658a610a0f565b613fb5565b346103a95760203660031901126103a9576004356127866147b9565b61278f8161433e565b806000526009602052604060002060ff19815416905533907f81a106317e7bcc4bb0d00469e38615879068b044d72620ca9aec13ad478ccb6c600080a3005b346103a95760403660031901126103a9576110be6024356004356127f182610a0f565b6127fd6110b4826134ee565b6150c3565b346103a95760003660031901126103a9576008546040516001600160a01b039091168152602090f35b346103a95761289661190f602061284136611af6565b938294819893926128506147b9565b6128586142ee565b612860614930565b6128698361433e565b61287286614356565b61287d86858561547c565b612888600c54610a03565b612891816143cb565b6145d1565b6128a4610460600354610a03565b906000604051809681958294637236934f60e11b84528a600485016133b3565b346103a95760003660031901126103a9576002546040516001600160a01b039091168152602090f35b346103a95760203660031901126103a95760043561290a81610a0f565b6129126147b9565b6001600160a01b03168015610aa857600c80546001600160a01b031916919091179055005b6008111561294157565b634e487b7160e01b600052602160045260246000fd5b9060088210156129415752565b610a2b909291926101008061012083019580518452602081015160208501526040810151604085015260018060a01b03606082015116606085015264ffffffffff60808201511660808501526129c860a082015160a086019064ffffffffff169052565b60c08181015161ffff169085015260e08181015164ffffffffff16908501520151910190612957565b346103a95760203660031901126103a957612a406000600435612a12614263565b50612a206104608354610a03565b6040518080958194638d34875560e01b8352600483019190602083019252565b03915afa90811561085057600091612b2a575b5080519060208101519060408101516080820151612a7090610a03565b60a083015164ffffffffff1660c084015164ffffffffff169160e0850151612a999061ffff1690565b93610100860151612aae9064ffffffffff1690565b95610120015196612abe88612937565b612ac661153c565b988952602089015260408801526001600160a01b0316606087015264ffffffffff16608086015264ffffffffff1660a085015261ffff1660c084015264ffffffffff1660e0830152612b1c9061010083016142b8565b604051610795819282612964565b612b3d913d8091833e6109298183611504565b38612a53565b346103a95760203660031901126103a9576004356000526009602052602060ff604060002054166040519015158152f35b60609060031901126103a957600435906024359060443590565b346103a957612b9c36612b74565b919060018060a01b03612bb3610460600154610a03565b1680158015612ea7575b8015612e9d575b610aa8573303612e8c57612bdc610460600054610a03565b92612be684610a03565b15610aa857604051638d34875560e01b815260048101849052600081602481885afa90811561085057600091612e73575b50805115610905576001600160801b038311610fa15764ffffffffff8211610fa15760c081015164ffffffffff1694803b156103a9576000604051809263fa5fa16360e01b8252818381612c6f8a8c60048401613372565b03925af1801561085057612e5e575b508215801590612e51575b612d22575b50506000612cc392612ca36104608354610a03565b6040518080968194638d34875560e01b8352600483019190602083019252565b03915afa91821561085057600092612d05575b50604082015103610fa15764ffffffffff612cfa60c08293015164ffffffffff1690565b9216911610610fa157005b612d1b9192503d806000833e6109298183611504565b9038612cd6565b604081015115612de6575b6101209150018051612d3e81612937565b612d4781612937565b15908115612dc8575b50612d5d575b3880612c8e565b612d6b610460600054610a03565b91823b156103a95760006040518094637f15208d60e01b8252818381612d9487600483016136e2565b03925af190811561085057612cc393600092612db4575b50925050612d56565b8061081584612dc293611504565b38612dab565b6001915051612dd681612937565b612ddf81612937565b1438612d50565b612df4610460600054610a03565b803b156103a9576040516390da939b60e01b8152926000918491829084908290612e22908b60048401613372565b03925af19182156108505761012092612e3c575b50612d2d565b806108156000612e4b93611504565b38612e36565b5060408101511515612c89565b806108156000612e6d93611504565b38612c7e565b612e86913d8091833e6109298183611504565b38612c17565b63ea8e4eb560e01b60005260046000fd5b5080331415612bc4565b50612eb9610460610460600054610a03565b15612bbd565b346103a957612f016020612ed236612b74565b60085460405163e7f9caa560e01b81529586946001600160a01b039092169385938493909190600485016133b3565b03915afa90811561085057600091612f22575b506040519015158152602090f35b612f3b915060203d602011610981576109738183611504565b38612f14565b346103a95760003660031901126103a9576020604051600080516020615c868339815191528152f35b346103a95760003660031901126103a9576003546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576000546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a9576007546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a957600c546040516001600160a01b039091168152602090f35b346103a95760003660031901126103a95761079560408051906130318183611504565b600682526518971817189960d11b602083015251918291602083526020830190611c2a565b6001600160a01b03166000908152600a6020526040902090565b9060018060a01b0316600052602052604060002090565b908160209103126103a9575180151581036103a95790565b6040513d6000823e3d90fd5b6000526009602052604060002090565b81601f820112156103a95780516130d18161154c565b926130df6040519485611504565b818452602082840101116103a957611f149160208085019101611c07565b5190610a2b82610a0f565b5190610a2b82611f17565b5190610a2b82611f31565b5190610a2b82611f48565b6020818303126103a9578051906001600160401b0382116103a95701610140818303126103a95761315861152c565b9181518352602082015160208401526040820151604084015260608201519160018060401b0383116103a957613196610120926131f89483016130bb565b60608501526131a7608082016130fd565b60808501526131b860a08201613108565b60a08501526131c960c08201613108565b60c08501526131da60e08201613113565b60e08501526131ec6101008201613108565b6101008501520161311e565b61012082015290565b91908260809103126103a9578151916020810151916060604083015192015190565b90926060929594936080835280516080840152602081015160a0840152604081015160c08401526132d061012061326a8684015161014060e08801526101c0870190611c2a565b60808401516001600160a01b03166101008701529260a081015164ffffffffff168683015260c081015164ffffffffff1661014087015260e081015161ffff1661016087015261010081015164ffffffffff1661018087015201516101a0850190612957565b95602083015260408201520152565b60009060033d116132ec57565b905060046000803e60005160e01c90565b600060443d10611f14576040513d600319016004823e8051916001600160401b0383113d60248501111761336c578183018051909390916001600160401b038311613364573d840160031901858401602001116133645750611f1492910160200190611504565b949350505050565b92915050565b908152602081019190915260400190565b908160209103126103a95751611f1481610a0f565b6001600160a01b039091168152602081019190915260400190565b6040919493926060820195825260208201520152565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b908160209103126103a9575190565b634e487b7160e01b600052601160045260246000fd5b919082039182116134e957565b6134c6565b600052600080516020615c6683398151915260205260016040600020015490565b903590601e19813603018212156103a957018035906001600160401b0382116103a9576020019181360383136103a957565b9035601e19823603018112156103a9570160208101919035906001600160401b0382116103a95781360383136103a957565b908060209392818452848401376000828201840152601f01601f1916010190565b63ffffffff8116036103a957565b3590610a2b82613594565b91611f1493919260408152833560408201526020840135606082015260408401356080820152606084013560a0820152608084013560c082015261367861366a61016061366361361661360360a08a018a613541565b61018060e08901526101c0880191613573565b60c089013561010087015260e0890135610120870152610100890135610140870152610120890135838701526136506101408a018a613541565b878303603f190161018089015290613573565b96016135a2565b63ffffffff166101a0830152565b6020818503910152613573565b9695949092608094926136af9489526020890152604088015260a0606088015260a0870191613573565b930152565b908152604081019190610a2b906020016005612957565b908152604081019190610a2b906020016001612957565b908152604081019190610a2b906020016002612957565b908152604081019291610a2b9160200190612957565b959697949297939091936137216142ee565b6137296142c4565b33600052600a602052604060002054431115610988576137608161374e368887611567565b61375936868e611567565b908a615496565b801561094857613774610460600454610a03565b604051634977ff8b60e11b81526004810183905290602090829060249082905afa90811561085057600091613914575b5015610948576137b8610460600054610a03565b604051631e1778ad60e11b8152600481018990529096906020816024818b5afa908115610850576000916138f5575b506138e4576137f7600b54610a03565b6001600160a01b03811615610aa857868b868b61383c8e8b8a61381e61046060209a610a03565b966040519a8b998a98899863728e8bbb60e01b8a5260048a01613933565b03915afa908115610850576000916138c5575b5015610fa15760209760009461387e936040519b8c9a8b998a986306f4597160e21b8a52339260048b01613979565b03925af1908115610850576000916138a6575b504361389c33613056565b5590610a2b61432a565b6138bf915060203d602011610f1e57610f108183611504565b38613891565b6138de915060203d602011610981576109738183611504565b3861384f565b630dd1bc8b60e31b60005260046000fd5b61390e915060203d602011610f1e57610f108183611504565b386137e7565b61392d915060203d602011610981576109738183611504565b386137a4565b969490611f1498969261396b9594613958928a5260a060208b015260a08a0191613573565b9260408801528683036060880152613573565b926080818503910152613573565b9998979391946139a160a098966139bb9560c08e6136af9b9681528160208201520191613573565b926001808a1b031660408c01528a830360608c0152613573565b918783036080890152613573565b60405161016091906139db8382611504565b600a815291601f19018260005b8281106139f457505050565b8060606020809385010152016139e8565b805115613a125760200190565b634e487b7160e01b600052603260045260246000fd5b805160011015613a125760400190565b805160021015613a125760600190565b805160031015613a125760800190565b805160041015613a125760a00190565b805160051015613a125760c00190565b805160061015613a125760e00190565b805160071015613a12576101000190565b805160081015613a12576101200190565b805160091015613a12576101400190565b60405190613aca604083611504565b600a8252691c1bdcda5d1a5bdb925960b21b6020830152565b60405190613af2604083611504565b600a8252691b5a5b9d105b5bdd5b9d60b21b6020830152565b60405190613b1a604083611504565b60078252666d696e7446656560c81b6020830152565b60405190613b3f604083611504565b60078252661b995dd119589d60ca1b6020830152565b60405190613b64604083611504565b600d82526c1b995dd0dbdb1b185d195c985b609a1b6020830152565b60405190613b8f604083611504565b6008825267627463507269636560c01b6020830152565b60405190613bb5604083611504565b60148252730c2eae8d0dee4d2f4cac8a6e0cadcc8e690c2e6d60631b6020830152565b60405190613be7604083611504565b600b82526a0eac6c888cac4e890c2e6d60ab1b6020830152565b60405190613c10604083611504565b600c82526b0c6dedce8e4c2c6e890c2e6d60a31b6020830152565b60405190613c3a604083611504565b601082526f07175616e74756d54696d657374616d760841b6020830152565b611f14949260609263ffffffff60e01b16825260208201528160408201520191613573565b9192303303612e8c57610120830160028151613c9981612937565b613ca281612937565b14613d60575b600c8303613d51576301e13380905b613cd682613cd161052461010089015164ffffffffff1690565b61472b565b91613cea613ce442856134dc565b91614752565b10613d405760039051613cfc81612937565b613d0581612937565b14613d33575b50613d2d93613d1b600454610a03565b92613d27600154610a03565b94615589565b90919293565b421015613d405738613d0b565b6309116a8160e11b60005260046000fd5b613d5a83614738565b90613cb7565b613d7661052461010086015164ffffffffff1690565b421115613ca85763088502f160e21b60005260046000fd5b99979593919896949290986040519960208b019b8c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152613deb61018082611504565b51902090565b949a999590969198929a979397613e066142c4565b613e0e6142ee565b613e16614930565b8315610fa157613e64848760209d8f9a613e4b8f8f9d8f9e60009f928893613ec79f8c908f8f613e4584614356565b8c615792565b613e56600c54610a03565b613e5f816143cb565b614609565b613e72610460600154610a03565b986040519c8d9b8c9a8b9963ee3448f960e01b8b5260048b0195926101009794919a9998959261012088019b8852602088015260408701526060860152608085015260a084015260c083015260e08201520152565b03925af190811561085057600091613ef5575b5015610fa157613ee86149ad565b613ef061432a565b600190565b613f0e915060203d602011610981576109738183611504565b38613eda565b15613f1b57565b60405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79206c6f616e206f7065726174696f6e73206d616e616765722063616e6044820152692063616c6c207468697360b01b6064820152608490fd5b15613f7a57565b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c1bdcda5d1a5bdb881251606a1b6044820152606490fd5b97959391989694929098600080516020615d068339815191525499613fe060ff8c60401c1615151590565b9a6001600160401b0316801590816140d0575b60011490816140c6575b1590816140bd575b506140ac57600080516020615d0683398151915280546001600160401b0319166001179055614038998b614087576140d8565b61403e57565b600080516020615d06833981519152805460ff60401b19169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b600080516020615d06833981519152805460ff60401b1916600160401b1790556140d8565b63f92ee8a960e01b60005260046000fd5b90501538614005565b303b159150613ffd565b8c9150613ff3565b989793929896919094966140ea615a3d565b6140f261580e565b6140fa615a3d565b614102615a3d565b61410a615a6b565b6001600160a01b0316948515610aa8576001600160a01b0316908115610aa8576001600160a01b0316988915610aa8576001600160a01b0316928315610aa8576001600160a01b0316968715610aa8576001600160a01b0316958615610aa8576001600160a01b0316918215610aa8576001600160a01b0316938415610aa8576001600160a01b0316958615610aa8576001600160a01b03891615610aa8576141e5614233986141e06141ef966141db6142609e6141d66141ea986141d16142119e6133c9565b6133eb565b61340d565b61342f565b613451565b613473565b613495565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61423c81614cb0565b5061424681614d49565b5061425081614e06565b5061425a81614ec3565b50614f80565b50565b6040519061012082016001600160401b03811183821017611527576040526000610100838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b60088210156129415752565b60ff600080516020615ca683398151915254166142dd57565b63d93c066560e01b60005260046000fd5b6002600080516020615cc68339815191525414614319576002600080516020615cc683398151915255565b633ee5aeb560e01b60005260046000fd5b6001600080516020615cc683398151915255565b1561434557565b6379ec0ed760e11b60005260046000fd5b801580156143a3575b8015614394575b61436d5750565b6382d6282f60e01b60005260045264e8d4a51000602452655af3107a400060445260646000fd5b50655af3107a40008111614366565b5064e8d4a51000811061435f565b9290611764613deb92604051948593602085019788611f5d565b6001600160a01b0316156143db57565b639cef199b60e01b60005260046000fd5b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926144249263018af30960e01b60048601613c59565b0381875afa9081156108505760009161449a575b501561448957823b156103a9576144699260009283604051809681958294630e62cc9360e21b845260048401613372565b03925af180156108505761447a5750565b806108156000610a2b93611504565b636227817160e01b60005260046000fd5b6144b3915060203d602011610981576109738183611504565b38614438565b604051636b80155f60e01b81526001600160a01b039091169593909260209284928392614424926304e9585760e11b60048601613c59565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926144249263121f00ad60e21b60048601613c59565b604051636b80155f60e01b81526001600160a01b0390911695939092602092849283926144249263544ba5af60e01b60048601613c59565b604051636b80155f60e01b81526001600160a01b039091169593909260209284928392614424926318eea33b60e21b60048601613c59565b604051636b80155f60e01b81526001600160a01b03909116959390926020928492839261442492635db13e1760e11b60048601613c59565b604051636b80155f60e01b81526001600160a01b03909116959390926020928492839261442492636b40812160e11b60048601613c59565b604051636b80155f60e01b81526001600160a01b03909116959390926020928492839261442492632c545d9960e21b60048601613c59565b604051634911e9cd60e01b8152600481019190915291926001600160a01b0316602083602481845afa92831561085057600093614703575b50604051630180d64960e11b8152600481019290925260209082908180602481015b03915afa908115610850576000916146e4575b50808211156146da576146c0916134dc565b905b036146c957565b63896492f560e01b60005260046000fd5b50506000906146c2565b6146fd915060203d602011610f1e57610f108183611504565b386146ae565b60209193509161472261469b93833d8511610f1e57610f108183611504565b93915091614679565b919082018092116134e957565b9062278d0082029180830462278d0014901517156134e957565b908160011b91808304600214901517156134e957565b818102929181159184041417156134e957565b90600c81146147a75762278d0081029080820462278d0014901517156134e95781018091116134e95790565b506301e1338081018091116134e95790565b600080516020615ce6833981519152600052600080516020615c6683398151915260205260ff6147f733600080516020615ba6833981519152613070565b54161561480057565b63e2517d3f60e01b60005233600452600080516020615ce683398151915260245260446000fd5b60008052600080516020615c6683398151915260205260ff61485733600080516020615be6833981519152613070565b54161561486057565b63e2517d3f60e01b60005233600452600060245260446000fd5b600080516020615b46833981519152600052600080516020615c6683398151915260205260ff6148b833600080516020615c46833981519152613070565b5416156148c157565b63e2517d3f60e01b60005233600452600080516020615b4683398151915260245260446000fd5b80600052600080516020615c6683398151915260205260ff61490e336040600020613070565b5416156149185750565b63e2517d3f60e01b6000523360045260245260446000fd5b6002600080516020615b86833981519152541461495b576002600080516020615b8683398151915255565b60405162461bcd60e51b8152602060048201526024808201527f476c6f62616c5265656e7472616e637947756172643a207265656e7472616e746044820152640818d85b1b60da1b6064820152608490fd5b6001600080516020615b8683398151915255565b91909115613f7a578115614a6a575115614a2b57116149dc57565b60405162461bcd60e51b815260206004820152602160248201527f5061796d656e7420616d6f756e74206578636565647320746f74616c206465626044820152601d60fa1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526017602482015276141bdcda5d1a5bdb88191bd95cc81b9bdd08195e1a5cdd604a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602860248201527f5061796d656e7420616d6f756e74206d7573742062652067726561746572207460448201526768616e207a65726f60c01b6064820152608490fd5b60008054604051638d34875560e01b815260048101849052929190839060249082906001600160a01b03165afa91821561085057600092614b32575b5081511490811591614b13575b50610fa157600190565b608001516001600160a01b039150614b2a90610a03565b161538614b09565b614b489192503d806000833e6109298183611504565b9038614afc565b614b5881612937565b60018114159081614c00575b81614bea575b81614bd5575b50614b7757565b60405162461bcd60e51b815260206004820152603060248201527f506f736974696f6e20737461747573206e6f7420656c696769626c6520666f7260448201526f081c185c9d1a585b081c185e5b595b9d60821b6064820152608490fd5b60049150614be281612937565b141538614b70565b9050614bf581612937565b600381141590614b6a565b9050614c0b81612937565b600281141590614b64565b6040516323b872dd60e01b60208083019182526001600160a01b0394851660248401529490931660448201526064808201959095529384529260009190614c5e608482611504565b519082855af11561309f576000513d614ca757506001600160a01b0381163b155b614c865750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415614c7f565b60008052600080516020615c6683398151915260205260ff614ce082600080516020615be6833981519152613070565b5416614d435760008052600080516020615c66833981519152602052614d1481600080516020615be6833981519152613070565b805460ff1916600117905533906001600160a01b03166000600080516020615b268339815191528180a4600190565b50600090565b600080516020615b46833981519152600052600080516020615c6683398151915260205260ff614d8782600080516020615c46833981519152613070565b5416614d4357600080516020615b46833981519152600052600080516020615c66833981519152602052614dc981600080516020615c46833981519152613070565b805460ff1916600117905533906001600160a01b0316600080516020615b46833981519152600080516020615b26833981519152600080a4600190565b600080516020615ce6833981519152600052600080516020615c6683398151915260205260ff614e4482600080516020615ba6833981519152613070565b5416614d4357600080516020615ce6833981519152600052600080516020615c66833981519152602052614e8681600080516020615ba6833981519152613070565b805460ff1916600117905533906001600160a01b0316600080516020615ce6833981519152600080516020615b26833981519152600080a4600190565b600080516020615c86833981519152600052600080516020615c6683398151915260205260ff614f0182600080516020615c26833981519152613070565b5416614d4357600080516020615c86833981519152600052600080516020615c66833981519152602052614f4381600080516020615c26833981519152613070565b805460ff1916600117905533906001600160a01b0316600080516020615c86833981519152600080516020615b26833981519152600080a4600190565b600080516020615b66833981519152600052600080516020615c6683398151915260205260ff614fbe82600080516020615bc6833981519152613070565b5416614d4357600080516020615b66833981519152600052600080516020615c6683398151915260205261500081600080516020615bc6833981519152613070565b805460ff1916600117905533906001600160a01b0316600080516020615b66833981519152600080516020615b26833981519152600080a4600190565b80600052600080516020615c6683398151915260205260ff615063836040600020613070565b54166150bc5780600052600080516020615c6683398151915260205261508d826040600020613070565b805460ff1916600117905533916001600160a01b031690600080516020615b26833981519152600080a4600190565b5050600090565b80600052600080516020615c6683398151915260205260ff6150e9836040600020613070565b5416156150bc5780600052600080516020615c66833981519152602052615114826040600020613070565b805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b80511561515c5750565b60405163df70480560e01b815260206004820152908190611710906024830190611c2a565b9c9798939d9e9d60a08e6151f09c976101609f9a949363ffffffff9f9a96976151cb98610180968552602085015260408401526060830152608082015201526101808d0191613573565b9560c08b015260e08a0152610100890152610120880152868303610140880152613573565b9416910152565b803560208201359060408301359260608101359060808101359060a0810161521f908261350f565b60c083013560e08401359061010085013592610120860135946101408701615247908861350f565b9890976101600135996152598b613594565b6040519d8e9d60208f019d61526d9e615181565b03601f198101825261527f9082611504565b8051906020012090565b91909181156152bc576152a49261529f9161581e565b6158cd565b106152ab57565b635e31938360e11b60005260046000fd5b50505050565b6008811015612941578015159081615313575b816152fd575b816152e8575b506125ca57565b600691506152f581612937565b1415386152e1565b905061530881612937565b6002811415906152db565b905061531e81612937565b6001811415906152d5565b9061533c60209282815194859201611c07565b0190565b6040516352d1902d60e01b81529091906020816004816001600160a01b0387165afa6000918161545b575b5061538e57634c9c8ce360e01b6000526001600160a01b03831660045260246000fd5b600080516020615c0683398151915281036154475750813b1561542557600080516020615c0683398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a280511561540b5761426091615a82565b50503461541457565b63b398979f60e01b60005260046000fd5b50634c9c8ce360e01b60009081526001600160a01b0391909116600452602490fd5b632a87526960e21b60005260045260246000fd5b61547591925060203d602011610f1e57610f108183611504565b903861536b565b9190613deb906117646040519384926020840196876133b3565b61549f9061433e565b80511561551c5760409051106154e0576154b890615152565b80156154c15750565b6304a45adb60e51b600052600452600160245260001960445260646000fd5b60405163df70480560e01b815260206004820152601360248201527214da59db985d1d5c99481d1bdbc81cda1bdc9d606a1b6044820152606490fd5b60405163df70480560e01b815260206004820152600f60248201526e456d707479207369676e617475726560881b6044820152606490fd5b51906001600160581b03821682036103a957565b91908260409103126103a957611f14602061558284615554565b9301615554565b604080516353f366c760e01b815260048101849052939794969195849060249082906001600160a01b03165afa92831561085057600093615720575b506040850180519093615602916155e5916001600160581b031690615958565b976155f18986516159ca565b976155fd8983836159ef565b61581e565b925160405163100c48d360e21b81526001600160a01b039092169190602082600481865afa90811561085057615641926000926156ff575b5085615a21565b6156ee5760206004916040519283809263100c48d360e21b82525afa801561085057615677916000916156cf575b508684615a21565b6156be57613cd161569a60e0615690886156a1966158cd565b96015161ffff1690565b61ffff1690565b9061ffff82116156ad57565b6319a4c60960e21b60005260046000fd5b631300e8bd60e21b60005260046000fd5b6156e8915060203d602011610f1e57610f108183611504565b3861566f565b63e5cace4160e01b60005260046000fd5b61571991925060203d602011610f1e57610f108183611504565b903861563a565b61574391935060403d60401161574c575b61573b8183611504565b810190615568565b905091386155c5565b503d615731565b6001600160a01b038116908115615781573b1561576d5750565b630fb15bad60e11b60005260045260246000fd5b63d92e233d60e01b60005260046000fd5b9896919497909392956040519860208a019a7ffa8f74e09e937f69ff6ed56ad5685b576507504860024ea40564c0432ff8034a8c5260408b015260608a0152608089015260a088015260c087015260e08601526101008501526101208401526101408301526101608201526101608152613deb61018082611504565b615816615a3d565b61432a615a3d565b90660775f05a07400082116158bc576a52b7d2dcc80cd2e400000081116158ab5781158015908161587f575b5061586e5761585891614768565b6064810290808204606414901517156134e95790565b63450d49cd60e01b60005260046000fd5b905061589557606482600019040481113861584a565b634e487b7160e01b600052601260045260246000fd5b63128df78360e01b60005260046000fd5b63e9ec682160e01b60005260046000fd5b81156159475768327cb2734119d3b7a9601e1b8111615936577e068db8bac710cb295e9e1b089a027525460aa64c2f837b4a2339c0ebedfa4381116159255761271081029080820461271014901517156134e9570490565b633da428df60e21b60005260046000fd5b638a94304d60e01b60005260046000fd5b6323d359a360e01b60005260046000fd5b68327cb2734119d3b7a9601e1b81116159365761271082116159b9578015801590816159a6575b50615995576127109161599191614768565b0490565b6340c0d6e560e11b60005260046000fd5b905061589557806000190482113861597f565b637186728f60e11b60005260046000fd5b908101908181116134e95781106159de5790565b636be580af60e11b60005260046000fd5b660775f05a074000106158bc576a52b7d2dcc80cd2e4000000106158ab5768327cb2734119d3b7a9601e1b1061593657565b908015615a3557615a31916158cd565b1090565b505050600090565b60ff600080516020615d068339815191525460401c1615615a5a57565b631afcd79f60e31b60005260046000fd5b600080516020615b8683398151915254156149ad57565b600080611f1493602081519101845af43d15615ac0573d91615aa38361154c565b92615ab16040519485611504565b83523d6000602085013e615ac4565b6060915b90615aea5750805115615ad957602081519101fd5b63d6bda27560e01b60005260046000fd5b81511580615b1c575b615afb575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15615af356fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5e17fc5225d4a099df75359ce1f405503ca79498a8dc46a7d583235a0ee45c16f4a222f146e17d7057e96450fc67f08ce8569fd5cf3b62a23983c4f4b9e497f35cd165352ca420415a2423a5a15f077145431fc21aec9b84cb1b8800541a5c26b16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c1b3eac282bb4080c159156c6faa9df237c5a80b4a568c4661ea2010de1eb2caeb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd6c996ba66d0dbb3c38dbaaac7d192f7d41593dd02b55a9147053192322b1d3b615dc3ea5d9654acb949989a0a9587a0da8cd03451c0368cc676ec7c08dd81402dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268004ad5455c7a5edb25c14b61cc4d6429153aab5507800334ac05d65e9828801bf3cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00aaae1071a267a66db1d9c0714498307791bc0f693f5b254c861d95ca60503b6da2646970667358221220d85dc18b5a8b8c89d299d86d043667445e0905b1b3ef60a2fe3292c92a18351264736f6c634300081c0033";
|
|
38776
38829
|
var isSuperArgs = (xs) => xs.length > 1;
|
|
38777
38830
|
var PositionManager__factory = class extends ContractFactory2 {
|
|
38778
38831
|
constructor(...args) {
|
|
@@ -42026,6 +42079,9 @@ function convertEthereumSignatureToBitcoinDER(signature2) {
|
|
|
42026
42079
|
r2 = rBN.toArrayLike(Buffer, "be");
|
|
42027
42080
|
s = sBN.toArrayLike(Buffer, "be");
|
|
42028
42081
|
function ensurePositive(buffer) {
|
|
42082
|
+
if (!buffer || buffer.length === 0) {
|
|
42083
|
+
return Buffer.alloc(0);
|
|
42084
|
+
}
|
|
42029
42085
|
if (buffer[0] & 128) {
|
|
42030
42086
|
const newBuffer = Buffer.alloc(buffer.length + 1);
|
|
42031
42087
|
newBuffer[0] = 0;
|
|
@@ -42108,7 +42164,9 @@ var ContractManager = class {
|
|
|
42108
42164
|
contractRunner
|
|
42109
42165
|
);
|
|
42110
42166
|
} catch (error) {
|
|
42111
|
-
throw new Error(
|
|
42167
|
+
throw new Error(
|
|
42168
|
+
`Failed to connect to PositionManager at ${contractAddresses.positionManager}: ${error}`
|
|
42169
|
+
);
|
|
42112
42170
|
}
|
|
42113
42171
|
})(),
|
|
42114
42172
|
loanOperationsManager: (() => {
|
|
@@ -42118,7 +42176,9 @@ var ContractManager = class {
|
|
|
42118
42176
|
contractRunner
|
|
42119
42177
|
);
|
|
42120
42178
|
} catch (error) {
|
|
42121
|
-
throw new Error(
|
|
42179
|
+
throw new Error(
|
|
42180
|
+
`Failed to connect to LoanOperationsManager at ${contractAddresses.loanOperationsManager}: ${error}`
|
|
42181
|
+
);
|
|
42122
42182
|
}
|
|
42123
42183
|
})(),
|
|
42124
42184
|
ucdController: (() => {
|
|
@@ -42128,7 +42188,9 @@ var ContractManager = class {
|
|
|
42128
42188
|
contractRunner
|
|
42129
42189
|
);
|
|
42130
42190
|
} catch (error) {
|
|
42131
|
-
throw new Error(
|
|
42191
|
+
throw new Error(
|
|
42192
|
+
`Failed to connect to UCDController at ${contractAddresses.ucdToken}: ${error}`
|
|
42193
|
+
);
|
|
42132
42194
|
}
|
|
42133
42195
|
})(),
|
|
42134
42196
|
priceFeed: (() => {
|
|
@@ -42138,7 +42200,9 @@ var ContractManager = class {
|
|
|
42138
42200
|
contractRunner
|
|
42139
42201
|
);
|
|
42140
42202
|
} catch (error) {
|
|
42141
|
-
throw new Error(
|
|
42203
|
+
throw new Error(
|
|
42204
|
+
`Failed to connect to PriceFeed at ${contractAddresses.priceFeedConsumer}: ${error}`
|
|
42205
|
+
);
|
|
42142
42206
|
}
|
|
42143
42207
|
})(),
|
|
42144
42208
|
termManager: (() => {
|
|
@@ -42148,7 +42212,9 @@ var ContractManager = class {
|
|
|
42148
42212
|
contractRunner
|
|
42149
42213
|
);
|
|
42150
42214
|
} catch (error) {
|
|
42151
|
-
throw new Error(
|
|
42215
|
+
throw new Error(
|
|
42216
|
+
`Failed to connect to TermManager at ${contractAddresses.termManager}: ${error}`
|
|
42217
|
+
);
|
|
42152
42218
|
}
|
|
42153
42219
|
})(),
|
|
42154
42220
|
circuitBreaker: (() => {
|
|
@@ -42158,7 +42224,9 @@ var ContractManager = class {
|
|
|
42158
42224
|
contractRunner
|
|
42159
42225
|
);
|
|
42160
42226
|
} catch (error) {
|
|
42161
|
-
throw new Error(
|
|
42227
|
+
throw new Error(
|
|
42228
|
+
`Failed to connect to CircuitBreaker at ${contractAddresses.circuitBreaker}: ${error}`
|
|
42229
|
+
);
|
|
42162
42230
|
}
|
|
42163
42231
|
})(),
|
|
42164
42232
|
communityManager: (() => {
|
|
@@ -42168,7 +42236,9 @@ var ContractManager = class {
|
|
|
42168
42236
|
contractRunner
|
|
42169
42237
|
);
|
|
42170
42238
|
} catch (error) {
|
|
42171
|
-
throw new Error(
|
|
42239
|
+
throw new Error(
|
|
42240
|
+
`Failed to connect to CommunityManager at ${contractAddresses.communityManager}: ${error}`
|
|
42241
|
+
);
|
|
42172
42242
|
}
|
|
42173
42243
|
})(),
|
|
42174
42244
|
liquidationManager: (() => {
|
|
@@ -42178,7 +42248,9 @@ var ContractManager = class {
|
|
|
42178
42248
|
contractRunner
|
|
42179
42249
|
);
|
|
42180
42250
|
} catch (error) {
|
|
42181
|
-
throw new Error(
|
|
42251
|
+
throw new Error(
|
|
42252
|
+
`Failed to connect to LiquidationManager at ${contractAddresses.liquidationManager}: ${error}`
|
|
42253
|
+
);
|
|
42182
42254
|
}
|
|
42183
42255
|
})()
|
|
42184
42256
|
};
|
|
@@ -47522,6 +47594,25 @@ async function sendTelegramMessage(chatId, chatToken, message, threadId) {
|
|
|
47522
47594
|
function formatMintMessage(mintAmount, loanId, txHash) {
|
|
47523
47595
|
return `${mintAmount} UCD was minted for loan id: ${loanId} Tx: https://sepolia.etherscan.io/tx/${txHash}`;
|
|
47524
47596
|
}
|
|
47597
|
+
function formatBalanceConfirmationMessage(loanId) {
|
|
47598
|
+
return `Loan id: ${loanId} was updated to PENDING_MINT`;
|
|
47599
|
+
}
|
|
47600
|
+
function formatBalanceConfirmationFailureMessage(loanId) {
|
|
47601
|
+
return `FAILED to update to PENDING_MINT for loan id ${loanId}`;
|
|
47602
|
+
}
|
|
47603
|
+
|
|
47604
|
+
// src/types/loanStatus.ts
|
|
47605
|
+
var LoanStatus = /* @__PURE__ */ ((LoanStatus2) => {
|
|
47606
|
+
LoanStatus2[LoanStatus2["PENDING_DEPOSIT"] = 0] = "PENDING_DEPOSIT";
|
|
47607
|
+
LoanStatus2[LoanStatus2["PENDING_MINT"] = 1] = "PENDING_MINT";
|
|
47608
|
+
LoanStatus2[LoanStatus2["ACTIVE"] = 2] = "ACTIVE";
|
|
47609
|
+
LoanStatus2[LoanStatus2["EXPIRED"] = 3] = "EXPIRED";
|
|
47610
|
+
LoanStatus2[LoanStatus2["LIQUIDATABLE"] = 4] = "LIQUIDATABLE";
|
|
47611
|
+
LoanStatus2[LoanStatus2["LIQUIDATED"] = 5] = "LIQUIDATED";
|
|
47612
|
+
LoanStatus2[LoanStatus2["REPAID"] = 6] = "REPAID";
|
|
47613
|
+
LoanStatus2[LoanStatus2["CLOSED"] = 7] = "CLOSED";
|
|
47614
|
+
return LoanStatus2;
|
|
47615
|
+
})(LoanStatus || {});
|
|
47525
47616
|
|
|
47526
47617
|
// src/modules/diamond-hands-sdk.ts
|
|
47527
47618
|
var DiamondHandsSDK = class _DiamondHandsSDK {
|
|
@@ -48244,14 +48335,14 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
|
|
|
48244
48335
|
const chainId = Number(network.chainId);
|
|
48245
48336
|
const mode = chainId === 1 || chainId === 137 ? "prod" : "dev";
|
|
48246
48337
|
const signer = this.getSignerOrThrow();
|
|
48247
|
-
const contracts =
|
|
48338
|
+
const contracts = {
|
|
48248
48339
|
PositionManager: this.config.contractAddresses?.positionManager || "",
|
|
48249
48340
|
LoanOperationsManagerModule: this.config.contractAddresses?.loanOperationsManager || "",
|
|
48250
48341
|
TermManagerModule: this.config.contractAddresses?.termManager || "",
|
|
48251
48342
|
UCDController: this.config.contractAddresses?.ucdController || ""
|
|
48252
|
-
}
|
|
48253
|
-
if (this.config.debug
|
|
48254
|
-
log.info(" Contract addresses
|
|
48343
|
+
};
|
|
48344
|
+
if (this.config.debug) {
|
|
48345
|
+
log.info(" Contract addresses passed to LIT Action:", {});
|
|
48255
48346
|
log.info(
|
|
48256
48347
|
` PositionManager: ${contracts?.PositionManager || "MISSING"}`
|
|
48257
48348
|
);
|
|
@@ -48315,7 +48406,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
|
|
|
48315
48406
|
litActionResult = await this.litOps.requestMintAuthorization({
|
|
48316
48407
|
authMessage: {
|
|
48317
48408
|
...auth,
|
|
48318
|
-
|
|
48409
|
+
contractAddresses: contracts
|
|
48319
48410
|
},
|
|
48320
48411
|
userSignature: auth.signature,
|
|
48321
48412
|
...request.customRpcUrl && { customRpcUrl: request.customRpcUrl },
|
|
@@ -48429,11 +48520,21 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
|
|
|
48429
48520
|
}
|
|
48430
48521
|
const litSignature = validationResponse.signature;
|
|
48431
48522
|
if (this.config.debug) {
|
|
48523
|
+
log.info("\u{1F50D} LIT Action Response Details", {});
|
|
48524
|
+
log.info(` Approved: ${validationResponse.approved}`, {});
|
|
48525
|
+
log.info(` Reason: ${validationResponse.reason || "N/A"}`, {});
|
|
48526
|
+
log.info(` Has signature: ${!!validationResponse.signature}`, {});
|
|
48432
48527
|
log.info("\u{1F50D} Extracting signature from validation response", {
|
|
48433
48528
|
signatureType: typeof litSignature,
|
|
48434
48529
|
signatureLength: typeof litSignature === "string" ? litSignature.length : "N/A",
|
|
48435
48530
|
signaturePreview: typeof litSignature === "string" ? litSignature.substring(0, 50) + "..." : String(litSignature).substring(0, 50)
|
|
48436
48531
|
});
|
|
48532
|
+
if (validationResponse.authorizedSpendsHash) {
|
|
48533
|
+
log.info(
|
|
48534
|
+
` authorizedSpendsHash: ${validationResponse.authorizedSpendsHash}`,
|
|
48535
|
+
{}
|
|
48536
|
+
);
|
|
48537
|
+
}
|
|
48437
48538
|
}
|
|
48438
48539
|
let signatureBytes;
|
|
48439
48540
|
if (typeof litSignature === "string") {
|
|
@@ -48504,19 +48605,211 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
|
|
|
48504
48605
|
]
|
|
48505
48606
|
)
|
|
48506
48607
|
);
|
|
48507
|
-
|
|
48508
|
-
|
|
48509
|
-
|
|
48510
|
-
|
|
48511
|
-
|
|
48512
|
-
|
|
48513
|
-
|
|
48514
|
-
validationResponse.
|
|
48515
|
-
|
|
48516
|
-
|
|
48517
|
-
validationResponse.
|
|
48518
|
-
|
|
48519
|
-
|
|
48608
|
+
if (this.config.debug) {
|
|
48609
|
+
log.info("\u{1F50D} DEBUG: Detailed Contract Call Parameters", {});
|
|
48610
|
+
log.info(" === LIT Action Response ===", {});
|
|
48611
|
+
log.info(
|
|
48612
|
+
` authorizedSpendsHash: ${validationResponse.authorizedSpendsHash}`,
|
|
48613
|
+
{}
|
|
48614
|
+
);
|
|
48615
|
+
log.info(` mintAmount: ${validationResponse.mintAmount}`, {});
|
|
48616
|
+
log.info(` mintFee: ${validationResponse.mintFee}`, {});
|
|
48617
|
+
log.info(` newDebt: ${validationResponse.newDebt}`, {});
|
|
48618
|
+
log.info(` newCollateral: ${validationResponse.newCollateral}`, {});
|
|
48619
|
+
log.info(` btcPrice: ${validationResponse.btcPrice}`, {});
|
|
48620
|
+
log.info(
|
|
48621
|
+
` timestamp (quantumTimestamp): ${validationResponse.timestamp}`,
|
|
48622
|
+
{}
|
|
48623
|
+
);
|
|
48624
|
+
log.info(" === SDK Calculated Hashes ===", {});
|
|
48625
|
+
log.info(` Current UCD Debt (from position): ${currentDebt}`, {});
|
|
48626
|
+
log.info(` ucdDebtHash: ${ucdDebtHash}`, {});
|
|
48627
|
+
log.info(" === Contract Addresses for contractHash ===", {});
|
|
48628
|
+
log.info(` PositionManager: ${positionManagerAddress}`, {});
|
|
48629
|
+
log.info(
|
|
48630
|
+
` LoanOpsManager: ${this.getContractAddressesOrThrow().loanOperationsManager}`,
|
|
48631
|
+
{}
|
|
48632
|
+
);
|
|
48633
|
+
log.info(
|
|
48634
|
+
` TermManager: ${this.getContractAddressesOrThrow().termManager}`,
|
|
48635
|
+
{}
|
|
48636
|
+
);
|
|
48637
|
+
log.info(
|
|
48638
|
+
` UCDController: ${this.getContractAddressesOrThrow().ucdController}`,
|
|
48639
|
+
{}
|
|
48640
|
+
);
|
|
48641
|
+
log.info(` contractHash: ${contractHash}`, {});
|
|
48642
|
+
log.info(" === Signature ===", {});
|
|
48643
|
+
log.info(
|
|
48644
|
+
` Signature (first 20 chars): ${finalSignature.substring(0, 20)}...`,
|
|
48645
|
+
{}
|
|
48646
|
+
);
|
|
48647
|
+
log.info(` Signature length: ${finalSignature.length}`, {});
|
|
48648
|
+
}
|
|
48649
|
+
if (this.config.debug) {
|
|
48650
|
+
log.info("\u{1F50D} PREFLIGHT: Attempting diagnostic gas estimation...", {});
|
|
48651
|
+
}
|
|
48652
|
+
try {
|
|
48653
|
+
const iface = new ethers_exports.utils.Interface(positionManagerAbi);
|
|
48654
|
+
const calldata = iface.encodeFunctionData("mintUCD", [
|
|
48655
|
+
positionIdBytes32,
|
|
48656
|
+
validationResponse.mintAmount,
|
|
48657
|
+
validationResponse.mintFee,
|
|
48658
|
+
validationResponse.newDebt,
|
|
48659
|
+
validationResponse.newCollateral,
|
|
48660
|
+
validationResponse.btcPrice,
|
|
48661
|
+
validationResponse.authorizedSpendsHash,
|
|
48662
|
+
ucdDebtHash,
|
|
48663
|
+
contractHash,
|
|
48664
|
+
validationResponse.timestamp,
|
|
48665
|
+
finalSignature
|
|
48666
|
+
]);
|
|
48667
|
+
const provider = this.getSignerOrThrow().provider;
|
|
48668
|
+
if (!provider) {
|
|
48669
|
+
throw new Error("Provider not available");
|
|
48670
|
+
}
|
|
48671
|
+
const signerAddress = await this.getSignerOrThrow().getAddress();
|
|
48672
|
+
if (this.config.debug) {
|
|
48673
|
+
log.info(" Executing diagnostic eth_call...", {});
|
|
48674
|
+
}
|
|
48675
|
+
await provider.call({
|
|
48676
|
+
to: positionManagerAddress,
|
|
48677
|
+
from: signerAddress,
|
|
48678
|
+
data: calldata
|
|
48679
|
+
});
|
|
48680
|
+
if (this.config.debug) {
|
|
48681
|
+
log.info(" \u2705 Diagnostic eth_call succeeded!", {});
|
|
48682
|
+
}
|
|
48683
|
+
} catch (preflightError) {
|
|
48684
|
+
if (this.config.debug) {
|
|
48685
|
+
log.error(
|
|
48686
|
+
"\u274C PREFLIGHT CHECK FAILED - Diagnostic eth_call reverted",
|
|
48687
|
+
{}
|
|
48688
|
+
);
|
|
48689
|
+
log.error(` Error message: ${preflightError?.message}`, {});
|
|
48690
|
+
log.error(` Error code: ${preflightError?.code}`, {});
|
|
48691
|
+
log.error(` Error data: ${preflightError?.data || "none"}`, {});
|
|
48692
|
+
}
|
|
48693
|
+
let errorData = preflightError?.data || preflightError?.error?.data?.data;
|
|
48694
|
+
const errorMessage = preflightError?.reason || preflightError?.message || "Unknown error";
|
|
48695
|
+
if (errorData && typeof errorData === "string" && errorData.startsWith("0x") && errorData.length > 10) {
|
|
48696
|
+
const selector = errorData.slice(0, 10);
|
|
48697
|
+
const knownErrors = {
|
|
48698
|
+
"0x8baa579f": "InvalidSignature()",
|
|
48699
|
+
"0xd92e233d": "ValidationFailed()",
|
|
48700
|
+
"0x3ee5aeb5": "OperationNotAuthorized()",
|
|
48701
|
+
"0x70f4b32a": "UnauthorizedSigner()",
|
|
48702
|
+
"0x48f5c3ed": "Unauthorized()",
|
|
48703
|
+
"0x0b135ddc": "StateHashMismatch()",
|
|
48704
|
+
"0xdc52ba78": "QuantumExpired()",
|
|
48705
|
+
"0x6b3b8c1c": "QuantumAlreadyUsed()"
|
|
48706
|
+
};
|
|
48707
|
+
const errorName = knownErrors[selector] || `Unknown error ${selector}`;
|
|
48708
|
+
throw new Error(
|
|
48709
|
+
`Preflight check failed - mintUCD would revert:
|
|
48710
|
+
Error: ${errorName}
|
|
48711
|
+
Selector: ${selector}
|
|
48712
|
+
Message: ${errorMessage}
|
|
48713
|
+
Data: ${errorData}`
|
|
48714
|
+
);
|
|
48715
|
+
} else {
|
|
48716
|
+
throw new Error(
|
|
48717
|
+
`Preflight check failed - mintUCD would revert:
|
|
48718
|
+
${errorMessage}`
|
|
48719
|
+
);
|
|
48720
|
+
}
|
|
48721
|
+
}
|
|
48722
|
+
let tx;
|
|
48723
|
+
try {
|
|
48724
|
+
tx = await positionManager.mintUCD(
|
|
48725
|
+
positionIdBytes32,
|
|
48726
|
+
validationResponse.mintAmount,
|
|
48727
|
+
validationResponse.mintFee,
|
|
48728
|
+
validationResponse.newDebt,
|
|
48729
|
+
validationResponse.newCollateral,
|
|
48730
|
+
validationResponse.btcPrice,
|
|
48731
|
+
validationResponse.authorizedSpendsHash,
|
|
48732
|
+
ucdDebtHash,
|
|
48733
|
+
contractHash,
|
|
48734
|
+
validationResponse.timestamp,
|
|
48735
|
+
finalSignature
|
|
48736
|
+
);
|
|
48737
|
+
} catch (estimateError) {
|
|
48738
|
+
if (estimateError.code === "UNPREDICTABLE_GAS_LIMIT" || estimateError.code === "CALL_EXCEPTION") {
|
|
48739
|
+
if (this.config.debug) {
|
|
48740
|
+
log.info(
|
|
48741
|
+
"\u{1F50D} DEBUG: Gas estimation failed, attempting raw eth_call",
|
|
48742
|
+
{}
|
|
48743
|
+
);
|
|
48744
|
+
log.info(` Error code: ${estimateError.code}`, {});
|
|
48745
|
+
log.info(` Error message: ${estimateError.message}`, {});
|
|
48746
|
+
}
|
|
48747
|
+
try {
|
|
48748
|
+
const iface = new ethers_exports.utils.Interface(positionManagerAbi);
|
|
48749
|
+
const calldata = iface.encodeFunctionData("mintUCD", [
|
|
48750
|
+
positionIdBytes32,
|
|
48751
|
+
validationResponse.mintAmount,
|
|
48752
|
+
validationResponse.mintFee,
|
|
48753
|
+
validationResponse.newDebt,
|
|
48754
|
+
validationResponse.newCollateral,
|
|
48755
|
+
validationResponse.btcPrice,
|
|
48756
|
+
validationResponse.authorizedSpendsHash,
|
|
48757
|
+
ucdDebtHash,
|
|
48758
|
+
contractHash,
|
|
48759
|
+
validationResponse.timestamp,
|
|
48760
|
+
finalSignature
|
|
48761
|
+
]);
|
|
48762
|
+
if (this.config.debug) {
|
|
48763
|
+
log.info(
|
|
48764
|
+
` Raw call data (first 100 chars): ${calldata.substring(0, 100)}...`,
|
|
48765
|
+
{}
|
|
48766
|
+
);
|
|
48767
|
+
}
|
|
48768
|
+
const provider = this.getSignerOrThrow().provider;
|
|
48769
|
+
if (!provider) {
|
|
48770
|
+
throw new Error("Provider not available");
|
|
48771
|
+
}
|
|
48772
|
+
await provider.call({
|
|
48773
|
+
to: positionManagerAddress,
|
|
48774
|
+
from: await this.getSignerOrThrow().getAddress(),
|
|
48775
|
+
data: calldata
|
|
48776
|
+
});
|
|
48777
|
+
} catch (callError) {
|
|
48778
|
+
if (this.config.debug) {
|
|
48779
|
+
log.info("\u{1F50D} DEBUG: Raw eth_call failed with error:", {});
|
|
48780
|
+
log.info(` Error message: ${callError?.message}`, {});
|
|
48781
|
+
log.info(` Error code: ${callError?.code}`, {});
|
|
48782
|
+
log.info(` Error data type: ${typeof callError?.data}`, {});
|
|
48783
|
+
log.info(` Error data value: ${callError?.data}`, {});
|
|
48784
|
+
}
|
|
48785
|
+
let errorData = callError?.data || callError?.error?.data?.data || callError?.error?.data;
|
|
48786
|
+
const errorMessage = callError?.reason || callError?.message || "Unknown error";
|
|
48787
|
+
if (errorData && typeof errorData === "string" && errorData.startsWith("0x") && errorData.length > 10) {
|
|
48788
|
+
const selector = errorData.slice(0, 10);
|
|
48789
|
+
const knownErrors = {
|
|
48790
|
+
"0x8baa579f": "InvalidSignature()",
|
|
48791
|
+
"0xd92e233d": "ValidationFailed()",
|
|
48792
|
+
"0x3ee5aeb5": "OperationNotAuthorized()",
|
|
48793
|
+
"0x70f4b32a": "UnauthorizedSigner()",
|
|
48794
|
+
"0x48f5c3ed": "Unauthorized()"
|
|
48795
|
+
};
|
|
48796
|
+
const errorName = knownErrors[selector] || `Unknown error ${selector}`;
|
|
48797
|
+
throw new Error(
|
|
48798
|
+
`mintUCD reverted: ${errorName}
|
|
48799
|
+
Error selector: ${selector}
|
|
48800
|
+
Error data: ${errorData}
|
|
48801
|
+
Message: ${errorMessage}`
|
|
48802
|
+
);
|
|
48803
|
+
} else {
|
|
48804
|
+
throw new Error(
|
|
48805
|
+
`mintUCD reverted: ${errorMessage}
|
|
48806
|
+
Error data: ${errorData || "none"}`
|
|
48807
|
+
);
|
|
48808
|
+
}
|
|
48809
|
+
}
|
|
48810
|
+
}
|
|
48811
|
+
throw estimateError;
|
|
48812
|
+
}
|
|
48520
48813
|
const receipt = await tx.wait(1, 3e5);
|
|
48521
48814
|
let amountMinted;
|
|
48522
48815
|
let positionId;
|
|
@@ -48601,6 +48894,228 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
|
|
|
48601
48894
|
"extendPosition not yet implemented - requires requestExtendAuthorization in lit-ops"
|
|
48602
48895
|
);
|
|
48603
48896
|
}
|
|
48897
|
+
/**
|
|
48898
|
+
* Confirm Bitcoin balance for a position
|
|
48899
|
+
*
|
|
48900
|
+
* This method:
|
|
48901
|
+
* 1. Queries BTC balance via LIT Action
|
|
48902
|
+
* 2. Gets PKP signature for the balance
|
|
48903
|
+
* 3. Calls PositionManager.updateBalance() on-chain
|
|
48904
|
+
* 4. Transitions position status to PENDING_MINT
|
|
48905
|
+
*
|
|
48906
|
+
* @param positionId - Position ID to confirm balance for
|
|
48907
|
+
* @returns Confirmation result with transaction details
|
|
48908
|
+
*/
|
|
48909
|
+
async confirmBalance(positionId) {
|
|
48910
|
+
const initCheck = this.checkInitialized();
|
|
48911
|
+
if (!initCheck.success) {
|
|
48912
|
+
const error = `SDK not initialized: ${initCheck.error.message}`;
|
|
48913
|
+
if (this.config.telegram) {
|
|
48914
|
+
try {
|
|
48915
|
+
await sendTelegramMessage(
|
|
48916
|
+
this.config.telegram.chatId,
|
|
48917
|
+
this.config.telegram.chatToken,
|
|
48918
|
+
formatBalanceConfirmationFailureMessage(positionId),
|
|
48919
|
+
this.config.telegram.threadId
|
|
48920
|
+
);
|
|
48921
|
+
} catch (e) {
|
|
48922
|
+
}
|
|
48923
|
+
}
|
|
48924
|
+
return {
|
|
48925
|
+
success: false,
|
|
48926
|
+
error,
|
|
48927
|
+
positionId
|
|
48928
|
+
};
|
|
48929
|
+
}
|
|
48930
|
+
try {
|
|
48931
|
+
if (this.config.debug) {
|
|
48932
|
+
log.info("\u{1F4DD} Starting balance confirmation", { positionId });
|
|
48933
|
+
}
|
|
48934
|
+
const position = await this.getPosition(positionId);
|
|
48935
|
+
if (!position) {
|
|
48936
|
+
throw new Error(`Position not found: ${positionId}`);
|
|
48937
|
+
}
|
|
48938
|
+
if (this.config.debug) {
|
|
48939
|
+
log.info("\u2705 Position found", {
|
|
48940
|
+
status: position.status,
|
|
48941
|
+
pkpId: position.pkpId
|
|
48942
|
+
});
|
|
48943
|
+
}
|
|
48944
|
+
const pkpCache = this.cacheManager.getCache("pkp-data", {
|
|
48945
|
+
maxSize: 500,
|
|
48946
|
+
ttlMs: 24 * 60 * 60 * 1e3
|
|
48947
|
+
});
|
|
48948
|
+
const pkpData = pkpCache.get(positionId);
|
|
48949
|
+
if (!pkpData) {
|
|
48950
|
+
throw new Error(
|
|
48951
|
+
"PKP data not found in cache - position may be from a previous session"
|
|
48952
|
+
);
|
|
48953
|
+
}
|
|
48954
|
+
const contractAddresses = {
|
|
48955
|
+
PositionManager: this.config.contractAddresses?.positionManager || "",
|
|
48956
|
+
LoanOperationsManagerModule: this.config.contractAddresses?.loanOperationsManager || "",
|
|
48957
|
+
TermManagerModule: this.config.contractAddresses?.termManager || ""
|
|
48958
|
+
};
|
|
48959
|
+
const chainId = await this.config.provider?.getNetwork().then((n2) => n2.chainId) || 11155111;
|
|
48960
|
+
const chain = chainId === 11155111 ? "sepolia" : chainId === 1337 ? "hardhat" : "sepolia";
|
|
48961
|
+
let bitcoinProviderUrl = "http://localhost:3006/api/esplora";
|
|
48962
|
+
if (this.config.bitcoinProviders && this.config.bitcoinProviders.length > 0 && this.config.bitcoinProviders[0]?.url) {
|
|
48963
|
+
bitcoinProviderUrl = this.config.bitcoinProviders[0].url;
|
|
48964
|
+
}
|
|
48965
|
+
const signer = this.getSignerOrThrow();
|
|
48966
|
+
const signerAddress = await signer.getAddress();
|
|
48967
|
+
const auth = await generateBalanceConfirmationAuthorization(
|
|
48968
|
+
positionId,
|
|
48969
|
+
chainId,
|
|
48970
|
+
chain === "hardhat" ? "dev" : "prod",
|
|
48971
|
+
signer
|
|
48972
|
+
);
|
|
48973
|
+
if (this.config.debug) {
|
|
48974
|
+
log.info("\u2705 Quantum authorization generated", {
|
|
48975
|
+
caller: signerAddress,
|
|
48976
|
+
timestamp: auth.timestamp,
|
|
48977
|
+
signature: auth.signature.substring(0, 20) + "..."
|
|
48978
|
+
});
|
|
48979
|
+
}
|
|
48980
|
+
await waitUntilTimestamp(auth.timestamp);
|
|
48981
|
+
validateQuantumTiming(auth.timestamp, 30);
|
|
48982
|
+
if (this.config.debug) {
|
|
48983
|
+
log.info("\u{1F50D} Calling LIT Action to check balance", {
|
|
48984
|
+
chain,
|
|
48985
|
+
bitcoinProviderUrl,
|
|
48986
|
+
publicKey: pkpData.publicKey.substring(0, 20) + "..."
|
|
48987
|
+
});
|
|
48988
|
+
}
|
|
48989
|
+
const result = await this.litOps.requestBalanceConfirmation({
|
|
48990
|
+
positionId,
|
|
48991
|
+
chain,
|
|
48992
|
+
bitcoinProviderUrl,
|
|
48993
|
+
publicKey: pkpData.publicKey,
|
|
48994
|
+
authMessage: {
|
|
48995
|
+
positionId,
|
|
48996
|
+
timestamp: auth.timestamp,
|
|
48997
|
+
chainId: auth.chainId,
|
|
48998
|
+
caller: signerAddress,
|
|
48999
|
+
action: "confirmBalance",
|
|
49000
|
+
mode: auth.mode
|
|
49001
|
+
},
|
|
49002
|
+
userSignature: auth.signature,
|
|
49003
|
+
contractAddresses,
|
|
49004
|
+
customRpcUrl: this.config.ethRpcUrl,
|
|
49005
|
+
priceProviders: this.config.priceProviders,
|
|
49006
|
+
pkpTokenId: pkpData.tokenId,
|
|
49007
|
+
pkpEthAddress: pkpData.ethAddress,
|
|
49008
|
+
devMode: this.config.debug
|
|
49009
|
+
// Pass debug flag as devMode to bypass Bitcoin provider whitelist
|
|
49010
|
+
});
|
|
49011
|
+
if (!result.success) {
|
|
49012
|
+
throw new Error(
|
|
49013
|
+
`Balance confirmation failed: ${result.error || "Unknown error"}`
|
|
49014
|
+
);
|
|
49015
|
+
}
|
|
49016
|
+
const balanceData = {
|
|
49017
|
+
vaultBalance: result.vaultBalance || "",
|
|
49018
|
+
btcPrice: result.btcPrice || "",
|
|
49019
|
+
timestamp: result.timestamp || Math.floor(Date.now() / 1e3),
|
|
49020
|
+
signature: result.signature || ""
|
|
49021
|
+
};
|
|
49022
|
+
if (!balanceData.vaultBalance || !balanceData.btcPrice || !balanceData.signature) {
|
|
49023
|
+
throw new Error("Invalid balance data returned from LIT Action");
|
|
49024
|
+
}
|
|
49025
|
+
if (this.config.debug) {
|
|
49026
|
+
log.info("\u2705 Balance data received", {
|
|
49027
|
+
vaultBalance: balanceData.vaultBalance,
|
|
49028
|
+
btcPrice: balanceData.btcPrice
|
|
49029
|
+
});
|
|
49030
|
+
}
|
|
49031
|
+
const positionManagerResult = this.contractManager.getPositionManager();
|
|
49032
|
+
if (!positionManagerResult.success) {
|
|
49033
|
+
throw new Error(
|
|
49034
|
+
`Failed to get PositionManager: ${positionManagerResult.error.message}`
|
|
49035
|
+
);
|
|
49036
|
+
}
|
|
49037
|
+
const positionManager = positionManagerResult.value;
|
|
49038
|
+
if (this.config.debug) {
|
|
49039
|
+
log.info("\u{1F4DD} Calling PositionManager.updateBalance()");
|
|
49040
|
+
}
|
|
49041
|
+
const tx = await positionManager.updateBalance(
|
|
49042
|
+
positionId,
|
|
49043
|
+
balanceData.vaultBalance,
|
|
49044
|
+
balanceData.btcPrice,
|
|
49045
|
+
auth.timestamp,
|
|
49046
|
+
balanceData.signature
|
|
49047
|
+
);
|
|
49048
|
+
if (this.config.debug) {
|
|
49049
|
+
log.info("\u23F3 Waiting for transaction confirmation", {
|
|
49050
|
+
hash: tx.hash
|
|
49051
|
+
});
|
|
49052
|
+
}
|
|
49053
|
+
const receipt = await tx.wait();
|
|
49054
|
+
if (!receipt) {
|
|
49055
|
+
throw new Error("Transaction receipt is null");
|
|
49056
|
+
}
|
|
49057
|
+
if (this.config.debug) {
|
|
49058
|
+
log.info("\u2705 Balance confirmed on-chain", {
|
|
49059
|
+
blockNumber: receipt.blockNumber,
|
|
49060
|
+
gasUsed: receipt.gasUsed.toString()
|
|
49061
|
+
});
|
|
49062
|
+
}
|
|
49063
|
+
if (this.config.telegram) {
|
|
49064
|
+
try {
|
|
49065
|
+
const message = formatBalanceConfirmationMessage(positionId);
|
|
49066
|
+
await sendTelegramMessage(
|
|
49067
|
+
this.config.telegram.chatId,
|
|
49068
|
+
this.config.telegram.chatToken,
|
|
49069
|
+
message,
|
|
49070
|
+
this.config.telegram.threadId
|
|
49071
|
+
);
|
|
49072
|
+
} catch (telegramError) {
|
|
49073
|
+
if (this.config.debug) {
|
|
49074
|
+
log.warn("\u26A0\uFE0F Failed to send Telegram notification", {
|
|
49075
|
+
error: telegramError instanceof Error ? telegramError.message : String(telegramError)
|
|
49076
|
+
});
|
|
49077
|
+
}
|
|
49078
|
+
}
|
|
49079
|
+
}
|
|
49080
|
+
return {
|
|
49081
|
+
success: true,
|
|
49082
|
+
transactionHash: receipt.hash || tx.hash,
|
|
49083
|
+
blockNumber: receipt.blockNumber,
|
|
49084
|
+
blockHash: receipt.blockHash,
|
|
49085
|
+
gasUsed: receipt.gasUsed.toString(),
|
|
49086
|
+
effectiveGasPrice: receipt.effectiveGasPrice?.toString() || "0",
|
|
49087
|
+
positionId,
|
|
49088
|
+
confirmedBalance: balanceData.vaultBalance,
|
|
49089
|
+
btcPrice: balanceData.btcPrice,
|
|
49090
|
+
newStatus: 1 /* PENDING_MINT */
|
|
49091
|
+
};
|
|
49092
|
+
} catch (error) {
|
|
49093
|
+
const errorMessage = error.message || String(error);
|
|
49094
|
+
if (this.config.debug) {
|
|
49095
|
+
log.error("\u274C Balance confirmation failed", {
|
|
49096
|
+
error: errorMessage,
|
|
49097
|
+
positionId
|
|
49098
|
+
});
|
|
49099
|
+
}
|
|
49100
|
+
if (this.config.telegram) {
|
|
49101
|
+
try {
|
|
49102
|
+
const message = formatBalanceConfirmationFailureMessage(positionId);
|
|
49103
|
+
await sendTelegramMessage(
|
|
49104
|
+
this.config.telegram.chatId,
|
|
49105
|
+
this.config.telegram.chatToken,
|
|
49106
|
+
message,
|
|
49107
|
+
this.config.telegram.threadId
|
|
49108
|
+
);
|
|
49109
|
+
} catch (telegramError) {
|
|
49110
|
+
}
|
|
49111
|
+
}
|
|
49112
|
+
return {
|
|
49113
|
+
success: false,
|
|
49114
|
+
error: errorMessage,
|
|
49115
|
+
positionId
|
|
49116
|
+
};
|
|
49117
|
+
}
|
|
49118
|
+
}
|
|
48604
49119
|
/**
|
|
48605
49120
|
* Make a payment on a loan position
|
|
48606
49121
|
*
|
|
@@ -49729,9 +50244,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
|
|
|
49729
50244
|
this.getProviderOrThrow()
|
|
49730
50245
|
);
|
|
49731
50246
|
const positionIdBytes32 = this.toBytes32(positionId);
|
|
49732
|
-
const authorizedSpends = await positionManager["getAuthorizedSpends"](
|
|
49733
|
-
positionIdBytes32
|
|
49734
|
-
);
|
|
50247
|
+
const authorizedSpends = await positionManager["getAuthorizedSpends"](positionIdBytes32);
|
|
49735
50248
|
if (this.config.debug) {
|
|
49736
50249
|
log.info(`\u{1F4E6} Found ${authorizedSpends.length} authorized spends`);
|
|
49737
50250
|
}
|
|
@@ -50353,9 +50866,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
|
|
|
50353
50866
|
);
|
|
50354
50867
|
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
50355
50868
|
try {
|
|
50356
|
-
const corePosition = await corePositionContract["getPositionDetails"](
|
|
50357
|
-
positionIdBytes32
|
|
50358
|
-
);
|
|
50869
|
+
const corePosition = await corePositionContract["getPositionDetails"](positionIdBytes32);
|
|
50359
50870
|
const positionIdFromCore = corePosition?.positionId || corePosition?.[0] || null;
|
|
50360
50871
|
if (positionIdFromCore && positionIdFromCore !== ethers_exports.constants.HashZero && positionIdFromCore !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
|
|
50361
50872
|
if (this.config.debug) {
|
|
@@ -50572,19 +51083,6 @@ var AuthParamsValidation;
|
|
|
50572
51083
|
AuthParamsValidation2.validate = validate5;
|
|
50573
51084
|
})(AuthParamsValidation || (AuthParamsValidation = {}));
|
|
50574
51085
|
|
|
50575
|
-
// src/types/loanStatus.ts
|
|
50576
|
-
var LoanStatus = /* @__PURE__ */ ((LoanStatus2) => {
|
|
50577
|
-
LoanStatus2[LoanStatus2["PENDING_DEPOSIT"] = 0] = "PENDING_DEPOSIT";
|
|
50578
|
-
LoanStatus2[LoanStatus2["PENDING_MINT"] = 1] = "PENDING_MINT";
|
|
50579
|
-
LoanStatus2[LoanStatus2["ACTIVE"] = 2] = "ACTIVE";
|
|
50580
|
-
LoanStatus2[LoanStatus2["EXPIRED"] = 3] = "EXPIRED";
|
|
50581
|
-
LoanStatus2[LoanStatus2["LIQUIDATABLE"] = 4] = "LIQUIDATABLE";
|
|
50582
|
-
LoanStatus2[LoanStatus2["LIQUIDATED"] = 5] = "LIQUIDATED";
|
|
50583
|
-
LoanStatus2[LoanStatus2["REPAID"] = 6] = "REPAID";
|
|
50584
|
-
LoanStatus2[LoanStatus2["CLOSED"] = 7] = "CLOSED";
|
|
50585
|
-
return LoanStatus2;
|
|
50586
|
-
})(LoanStatus || {});
|
|
50587
|
-
|
|
50588
51086
|
// src/types/event-types.ts
|
|
50589
51087
|
var PaymentType = /* @__PURE__ */ ((PaymentType2) => {
|
|
50590
51088
|
PaymentType2["FULL_REPAYMENT"] = "FULL_REPAYMENT";
|