UNPKG

@sablier/airdrops

Version:

EVM smart contracts of the Sablier Airdrops protocol

516 lines 246 kB
{ "abi": [ { "type": "constructor", "inputs": [ { "name": "campaignParams", "type": "tuple", "internalType": "struct MerkleLT.ConstructorParams", "components": [ { "name": "campaignName", "type": "string", "internalType": "string" }, { "name": "campaignStartTime", "type": "uint40", "internalType": "uint40" }, { "name": "cancelable", "type": "bool", "internalType": "bool" }, { "name": "claimType", "type": "uint8", "internalType": "enum ClaimType" }, { "name": "expiration", "type": "uint40", "internalType": "uint40" }, { "name": "initialAdmin", "type": "address", "internalType": "address" }, { "name": "ipfsCID", "type": "string", "internalType": "string" }, { "name": "lockup", "type": "address", "internalType": "contract ISablierLockup" }, { "name": "merkleRoot", "type": "bytes32", "internalType": "bytes32" }, { "name": "shape", "type": "string", "internalType": "string" }, { "name": "token", "type": "address", "internalType": "contract IERC20" }, { "name": "tranchesWithPercentages", "type": "tuple[]", "internalType": "struct MerkleLT.TrancheWithPercentage[]", "components": [ { "name": "unlockPercentage", "type": "uint64", "internalType": "UD2x18" }, { "name": "duration", "type": "uint40", "internalType": "uint40" } ] }, { "name": "transferable", "type": "bool", "internalType": "bool" }, { "name": "vestingStartTime", "type": "uint40", "internalType": "uint40" } ] }, { "name": "campaignCreator", "type": "address", "internalType": "address" }, { "name": "comptroller", "type": "address", "internalType": "address" } ], "stateMutability": "nonpayable" }, { "type": "function", "name": "CAMPAIGN_START_TIME", "inputs": [], "outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }], "stateMutability": "view" }, { "type": "function", "name": "CLAIM_TYPE", "inputs": [], "outputs": [{ "name": "", "type": "uint8", "internalType": "enum ClaimType" }], "stateMutability": "view" }, { "type": "function", "name": "COMPTROLLER", "inputs": [], "outputs": [{ "name": "", "type": "address", "internalType": "address" }], "stateMutability": "view" }, { "type": "function", "name": "EXPIRATION", "inputs": [], "outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }], "stateMutability": "view" }, { "type": "function", "name": "IS_SABLIER_MERKLE", "inputs": [], "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], "stateMutability": "view" }, { "type": "function", "name": "MERKLE_ROOT", "inputs": [], "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], "stateMutability": "view" }, { "type": "function", "name": "SABLIER_LOCKUP", "inputs": [], "outputs": [{ "name": "", "type": "address", "internalType": "contract ISablierLockup" }], "stateMutability": "view" }, { "type": "function", "name": "STREAM_CANCELABLE", "inputs": [], "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], "stateMutability": "view" }, { "type": "function", "name": "STREAM_TRANSFERABLE", "inputs": [], "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], "stateMutability": "view" }, { "type": "function", "name": "TOKEN", "inputs": [], "outputs": [{ "name": "", "type": "address", "internalType": "contract IERC20" }], "stateMutability": "view" }, { "type": "function", "name": "VESTING_START_TIME", "inputs": [], "outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }], "stateMutability": "view" }, { "type": "function", "name": "admin", "inputs": [], "outputs": [{ "name": "", "type": "address", "internalType": "address" }], "stateMutability": "view" }, { "type": "function", "name": "attestor", "inputs": [], "outputs": [{ "name": "", "type": "address", "internalType": "address" }], "stateMutability": "view" }, { "type": "function", "name": "calculateMinFeeWei", "inputs": [], "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], "stateMutability": "view" }, { "type": "function", "name": "campaignName", "inputs": [], "outputs": [{ "name": "", "type": "string", "internalType": "string" }], "stateMutability": "view" }, { "type": "function", "name": "claim", "inputs": [ { "name": "index", "type": "uint256", "internalType": "uint256" }, { "name": "recipient", "type": "address", "internalType": "address" }, { "name": "amount", "type": "uint128", "internalType": "uint128" }, { "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" } ], "outputs": [], "stateMutability": "payable" }, { "type": "function", "name": "claimTo", "inputs": [ { "name": "index", "type": "uint256", "internalType": "uint256" }, { "name": "to", "type": "address", "internalType": "address" }, { "name": "amount", "type": "uint128", "internalType": "uint128" }, { "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" } ], "outputs": [], "stateMutability": "payable" }, { "type": "function", "name": "claimViaAttestation", "inputs": [ { "name": "index", "type": "uint256", "internalType": "uint256" }, { "name": "to", "type": "address", "internalType": "address" }, { "name": "amount", "type": "uint128", "internalType": "uint128" }, { "name": "expireAt", "type": "uint40", "internalType": "uint40" }, { "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" }, { "name": "attestation", "type": "bytes", "internalType": "bytes" } ], "outputs": [], "stateMutability": "payable" }, { "type": "function", "name": "claimViaSig", "inputs": [ { "name": "index", "type": "uint256", "internalType": "uint256" }, { "name": "recipient", "type": "address", "internalType": "address" }, { "name": "to", "type": "address", "internalType": "address" }, { "name": "amount", "type": "uint128", "internalType": "uint128" }, { "name": "validFrom", "type": "uint40", "internalType": "uint40" }, { "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" }, { "name": "signature", "type": "bytes", "internalType": "bytes" } ], "outputs": [], "stateMutability": "payable" }, { "type": "function", "name": "claimedStreams", "inputs": [{ "name": "recipient", "type": "address", "internalType": "address" }], "outputs": [{ "name": "", "type": "uint256[]", "internalType": "uint256[]" }], "stateMutability": "view" }, { "type": "function", "name": "clawback", "inputs": [ { "name": "to", "type": "address", "internalType": "address" }, { "name": "amount", "type": "uint128", "internalType": "uint128" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "domainSeparator", "inputs": [], "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], "stateMutability": "view" }, { "type": "function", "name": "firstClaimTime", "inputs": [], "outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }], "stateMutability": "view" }, { "type": "function", "name": "hasClaimed", "inputs": [{ "name": "index", "type": "uint256", "internalType": "uint256" }], "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], "stateMutability": "view" }, { "type": "function", "name": "hasExpired", "inputs": [], "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], "stateMutability": "view" }, { "type": "function", "name": "ipfsCID", "inputs": [], "outputs": [{ "name": "", "type": "string", "internalType": "string" }], "stateMutability": "view" }, { "type": "function", "name": "lowerMinFeeUSD", "inputs": [{ "name": "newMinFeeUSD", "type": "uint256", "internalType": "uint256" }], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "minFeeUSD", "inputs": [], "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], "stateMutability": "view" }, { "type": "function", "name": "setAttestor", "inputs": [{ "name": "newAttestor", "type": "address", "internalType": "address" }], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "sponsor", "inputs": [ { "name": "token", "type": "address", "internalType": "contract IERC20" }, { "name": "amount", "type": "uint128", "internalType": "uint128" }, { "name": "biller", "type": "address", "internalType": "address" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "streamShape", "inputs": [], "outputs": [{ "name": "", "type": "string", "internalType": "string" }], "stateMutability": "view" }, { "type": "function", "name": "tranchesWithPercentages", "inputs": [], "outputs": [ { "name": "", "type": "tuple[]", "internalType": "struct MerkleLT.TrancheWithPercentage[]", "components": [ { "name": "unlockPercentage", "type": "uint64", "internalType": "UD2x18" }, { "name": "duration", "type": "uint40", "internalType": "uint40" } ] } ], "stateMutability": "view" }, { "type": "function", "name": "transferAdmin", "inputs": [{ "name": "newAdmin", "type": "address", "internalType": "address" }], "outputs": [], "stateMutability": "nonpayable" }, { "type": "event", "name": "ClaimLTWithTransfer", "inputs": [ { "name": "index", "type": "uint256", "indexed": false, "internalType": "uint256" }, { "name": "recipient", "type": "address", "indexed": true, "internalType": "address" }, { "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" }, { "name": "to", "type": "address", "indexed": false, "internalType": "address" }, { "name": "viaSig", "type": "bool", "indexed": false, "internalType": "bool" } ], "anonymous": false }, { "type": "event", "name": "ClaimLTWithVesting", "inputs": [ { "name": "index", "type": "uint256", "indexed": false, "internalType": "uint256" }, { "name": "recipient", "type": "address", "indexed": true, "internalType": "address" }, { "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" }, { "name": "streamId", "type": "uint256", "indexed": true, "internalType": "uint256" }, { "name": "to", "type": "address", "indexed": false, "internalType": "address" }, { "name": "viaSig", "type": "bool", "indexed": false, "internalType": "bool" } ], "anonymous": false }, { "type": "event", "name": "Clawback", "inputs": [ { "name": "admin", "type": "address", "indexed": true, "internalType": "address" }, { "name": "to", "type": "address", "indexed": true, "internalType": "address" }, { "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" } ], "anonymous": false }, { "type": "event", "name": "LowerMinFeeUSD", "inputs": [ { "name": "comptroller", "type": "address", "indexed": true, "internalType": "address" }, { "name": "newMinFeeUSD", "type": "uint256", "indexed": false, "internalType": "uint256" }, { "name": "previousMinFeeUSD", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "SetAttestor", "inputs": [ { "name": "caller", "type": "address", "indexed": true, "internalType": "address" }, { "name": "previousAttestor", "type": "address", "indexed": true, "internalType": "address" }, { "name": "newAttestor", "type": "address", "indexed": true, "internalType": "address" } ], "anonymous": false }, { "type": "event", "name": "Sponsor", "inputs": [ { "name": "caller", "type": "address", "indexed": true, "internalType": "address" }, { "name": "token", "type": "address", "indexed": true, "internalType": "contract IERC20" }, { "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" }, { "name": "biller", "type": "address", "indexed": true, "internalType": "address" } ], "anonymous": false }, { "type": "event", "name": "TransferAdmin", "inputs": [ { "name": "oldAdmin", "type": "address", "indexed": true, "internalType": "address" }, { "name": "newAdmin", "type": "address", "indexed": true, "internalType": "address" } ], "anonymous": false }, { "type": "error", "name": "CallerNotAdmin", "inputs": [ { "name": "admin", "type": "address", "internalType": "address" }, { "name": "caller", "type": "address", "internalType": "address" } ] }, { "type": "error", "name": "PRBMath_MulDiv18_Overflow", "inputs": [ { "name": "x", "type": "uint256", "internalType": "uint256" }, { "name": "y", "type": "uint256", "internalType": "uint256" } ] }, { "type": "error", "name": "PRBMath_UD60x18_IntoUint128_Overflow", "inputs": [{ "name": "x", "type": "uint256", "internalType": "UD60x18" }] }, { "type": "error", "name": "SablierMerkleBase_CallerNotComptroller", "inputs": [ { "name": "comptroller", "type": "address", "internalType": "address" }, { "name": "caller", "type": "address", "internalType": "address" } ] }, { "type": "error", "name": "SablierMerkleBase_CampaignExpired", "inputs": [ { "name": "blockTimestamp", "type": "uint256", "internalType": "uint256" }, { "name": "expiration", "type": "uint40", "internalType": "uint40" } ] }, { "type": "error", "name": "SablierMerkleBase_CampaignNotStarted", "inputs": [ { "name": "blockTimestamp", "type": "uint256", "internalType": "uint256" }, { "name": "campaignStartTime", "type": "uint40", "internalType": "uint40" } ] }, { "type": "error", "name": "SablierMerkleBase_ClawbackNotAllowed", "inputs": [ { "name": "blockTimestamp", "type": "uint256", "internalType": "uint256" }, { "name": "expiration", "type": "uint40", "internalType": "uint40" }, { "name": "firstClaimTime", "type": "uint40", "internalType": "uint40" } ] }, { "type": "error", "name": "SablierMerkleBase_FeeTransferFailed", "inputs": [ { "name": "feeRecipient", "type": "address", "internalType": "address" }, { "name": "feeAmount", "type": "uint256", "internalType": "uint256" } ] }, { "type": "error", "name": "SablierMerkleBase_IndexClaimed", "inputs": [{ "name": "index", "type": "uint256", "internalType": "uint256" }] }, { "type": "error", "name": "SablierMerkleBase_InsufficientFeePayment", "inputs": [ { "name": "feePaid", "type": "uint256", "internalType": "uint256" }, { "name": "minFeeWei", "type": "uint256", "internalType": "uint256" } ] }, { "type": "error", "name": "SablierMerkleBase_InvalidProof", "inputs": [] }, { "type": "error", "name": "SablierMerkleBase_NewMinFeeUSDNotLower", "inputs": [ { "name": "currentMinFeeUSD", "type": "uint256", "internalType": "uint256" }, { "name": "newMinFeeUSD", "type": "uint256", "internalType": "uint256" } ] }, { "type": "error", "name": "SablierMerkleBase_SponsorAmountZero", "inputs": [] }, { "type": "error", "name": "SablierMerkleBase_ToZeroAddress", "inputs": [] }, { "type": "error", "name": "SablierMerkleBase_UnsupportedClaimType", "inputs": [ { "name": "claimTypeRequired", "type": "uint8", "internalType": "enum ClaimType" }, { "name": "claimTypeSupported", "type": "uint8", "internalType": "enum ClaimType" } ] }, { "type": "error", "name": "SablierMerkleSignature_AttestationExpired", "inputs": [ { "name": "expireAt", "type": "uint256", "internalType": "uint256" }, { "name": "blockTimestamp", "type": "uint256", "internalType": "uint256" } ] }, { "type": "error", "name": "SablierMerkleSignature_AttestorNotSet", "inputs": [] }, { "type": "error", "name": "SablierMerkleSignature_CallerNotAuthorized", "inputs": [ { "name": "caller", "type": "address", "internalType": "address" }, { "name": "campaignAdmin", "type": "address", "internalType": "address" }, { "name": "comptroller", "type": "address", "internalType": "address" } ] }, { "type": "error", "name": "SablierMerkleSignature_InvalidSignature", "inputs": [] }, { "type": "error", "name": "SablierMerkleSignature_SignatureNotYetValid", "inputs": [ { "name": "validFrom", "type": "uint40", "internalType": "uint40" }, { "name": "blockTimestamp", "type": "uint40", "internalType": "uint40" } ] }, { "type": "error", "name": "SafeERC20FailedOperation", "inputs": [{ "name": "token", "type": "address", "internalType": "address" }] } ], "bytecode": { "object": "0x61020060405234610a1757614674803803809161001e82610200610c6b565b6102003960608112610a1757610200516001600160401b038111610a17576101c081830312610a17576040516101c081016001600160401b03811182821017610880576040526102008201516001600160401b038111610a175761008d90846102000190846102000101610c8e565b815261009c6102208301610cfb565b60208201908152916100b16102408201610d0d565b6040830190815261026082015192906003841015610a1757606082019384526100dd6102808401610cfb565b60808301908152936100f26102a08501610d1a565b60a084019081526102c08501519092906001600160401b038111610a175761012590896102000190876102000101610c8e565b60c085019081526102e08601519092906001600160a01b0381168103610a175760e08601526103008601516101008601526103208601516001600160401b038111610a175761017f908a6102000190886102000101610c8e565b6101208601526103408601516001600160a01b0381168103610a17576101408601526103608601516001600160401b038111610a17576102008a0161021f888301011215610a17578681016102000151906001600160401b038211610880576040519a6101f260208460051b018d610c6b565b828c526020808d019360061b838b610200010101019181610200018311610a1757890161022001925b828410610c0b575050505061016085019889526102536101a06102416103808901610d0d565b97886101808901526102000101610cfb565b6101a0860190815297610267610220610d1a565b91610273610240610d1a565b935160e0880151610120890151604051909b90996001600160a01b03909216989192151560808b018b81106001600160401b03821117610880576040528a5260208a0198895260408a019b8c5260608a019a15158b5264ffffffffff83519551169351906003821015610bf7575191519751610100840151610140948501516040519a92986001600160a01b0391821697929664ffffffffff96909616958c0193909116906001600160401b0384118c8510176108805760409384526001600160a01b039081168c5260208c01988952928b0191825260608b019384529890911660808a0190815260a08a0193845260c08a0189905260e08a019788526101008a019485526101208a019586525f80546001600160a01b0319168a178155909864ffffffffff92917fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a3511660805251906003821015610bf75760a09190915285516001600160a01b0390811660c052905164ffffffffff1660e05290516101005290511661012052518051906001600160401b0382116108805760015490600182811c92168015610bed575b60208310146109cf5781601f849311610b7f575b50602090601f8311600114610b19575f92610b0e575b50508160011b915f199060031b1c1916176001555b518051906001600160401b03821161088057600354600181811c91168015610b04575b60208210146109cf57601f8111610aa1575b50602090601f8311600114610a395760209392915f9183610a2e575b50508160011b915f199060031b1c1916176003555b51915160405163111b863560e31b81525f60048201526001600160a01b0391821660248201529283916044918391165afa908115610a23575f916109ed575b50600455516001600160a01b0316610140525115156101605251151561018052518051906001600160401b03821161088057600654600181811c911680156109e3575b60208210146109cf57601f811161096c575b50602090601f83116001146109005764ffffffffff9392915f91836108f5575b50508160011b915f199060031b1c1916176006555b60018060a01b03610120511660018060a01b036101405116906040519060205f81840163095ea7b360e01b815285602486015281196044860152604485526105d9606486610c6b565b84519082855af15f513d826108d9575b505015610894575b505050466101a05260405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f13cd784591b49af6fc220be53013eaddf1dc15399ca43850d206ea319aca082160408201524660608201523060808201526080815261066560a082610c6b565b5190206101c05251166101e052805151905f5b8281106107f0576040516138ed9081610d8782396080518181816108ed01526126b3015260a05181818161039a0152818161048401528181610d26015281816110460152611a2b015260c0518181816102d0015281816103100152818161077e01528181610ae001528181610df7015281816126e90152613335015260e05181818161072d01528181611994015281816126080152612a54015261010051818181610b1b01526128890152610120518181816108ac015281816112fa015281816113b6015281816118f901528181611c5e01528181611d1201528181612cc20152612d930152610140518181816103640152818161158301528181611edf0152612f60015261016051818181610677015281816113f301528181611d4f0152612dd00152610180518181816106eb0152818161141d01528181611d790152612dfa01526101a051816133ba01526101c051816133e001526101e051818181610a900152818161114601528181611a9a0152612ae70152f35b8151805182101561086c576020908260051b01015190600954916801000000000000000083101561088057600183018060095583101561086c5760019260095f5260205f200190838060401b038151166cffffffffff00000000000000006020845493015160401b1691858060681b0319161717905501610678565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b6108cc6108d1936040519063095ea7b360e01b602083015260248201525f6044820152604481526108c6606482610c6b565b82610d2e565b610d2e565b5f80806105f1565b9091506108ed5750803b15155b5f806105e9565b6001146108e6565b015190505f8061057b565b90601f1983169160065f52815f20925f5b818110610954575091600193918564ffffffffff9796941061093c575b505050811b01600655610590565b01515f1960f88460031b161c191690555f808061092e565b92936020600181928786015181550195019301610911565b60065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f601f840160051c810191602085106109c5575b601f0160051c01905b8181106109ba575061055b565b5f81556001016109ad565b90915081906109a4565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610549565b90506020813d602011610a1b575b81610a0860209383610c6b565b81010312610a1757515f610506565b5f80fd5b3d91506109fb565b6040513d5f823e3d90fd5b015190505f806104b2565b90601f1983169160035f52815f20925f5b818110610a895750916001939185602097969410610a71575b505050811b016003556104c7565b01515f1960f88460031b161c191690555f8080610a63565b92936020600181928786015181550195019301610a4a565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81019160208510610afa575b601f0160051c01905b818110610aef5750610496565b5f8155600101610ae2565b9091508190610ad9565b90607f1690610484565b015190505f8061044c565b60015f9081528281209350601f198516905b818110610b675750908460019594939210610b4f575b505050811b01600155610461565b01515f1960f88460031b161c191690555f8080610b41565b92936020600181928786015181550195019301610b2b565b60015f529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f840160051c81019160208510610be3575b90601f859493920160051c01905b818110610bd55750610436565b5f8155849350600101610bc8565b9091508190610bba565b91607f1691610422565b634e487b7160e01b5f52602160045260245ffd5b60408483610200010312610a175760408051919082016001600160401b03811183821017610880576040528451906001600160401b0382168203610a17578260209260409452610c5c838801610cfb565b8382015281520193019261021b565b601f909101601f19168101906001600160401b0382119082101761088057604052565b81601f82011215610a17578051906001600160401b0382116108805760405192610cc2601f8401601f191660200185610c6b565b82845260208383010111610a17575f5b828110610ce657505060205f918301015290565b80602080928401015182828701015201610cd2565b519064ffffffffff82168203610a1757565b51908115158203610a1757565b51906001600160a01b0382168203610a1757565b905f602091828151910182855af115610a23575f513d610d7d57506001600160a01b0381163b155b610d5d5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415610d5656fe60806040526004361015610011575f80fd5b5f3560e01c80630724fda91461216f5780630854a79c14611a1c5780631686c909146118985780632074358314610fad57806323e5336714610f925780632481a13a14610e6f5780633a12a5bc14610d9b5780633f31ae3f14610d17578063496500a814610c9e57806349fc73dd14610b5b5780634e0bb8cc14610b3e57806351e75e8b14610b045780635f82c67e14610ab45780636c0b1e8c14610a735780637423649b14610a5857806375829def146109d257806376c30a95146109115780637ca3944d146108d057806382bfefc81461088057806382d72f7f1461085c5780638ec688691461076b57806390e64d1314610751578063bb4b573414610710578063bf44497a146106d4578063cada25c21461069c578063cbe9e5ef14610660578063ce51650714610620578063e74f822d146103f9578063eb8cd77514610388578063f3ffe13f14610338578063f5770b1f146101dc578063f698da25146101ba5763f851a44014610184575f80fd5b346101b6575f6003193601126101b657602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b5f80fd5b346101b6575f6003193601126101b65760206101d46133b7565b604051908152f35b346101b65760206003193601126101b6576101f56123ed565b73ffffffffffffffffffffffffffffffffffffffff5f541680331415806102f8575b61028f575073ffffffffffffffffffffffffffffffffffffffff8061023a6132d3565b921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000600854161760085516337fe12891ebe30d5f5d47856103adbbd7804332e875271e2903e5dd759badf2f42d5f80a4005b7f153cfb83000000000000000000000000000000000000000000000000000000005f523360045260245273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660445260645ffd5b5073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016331415610217565b346101b6575f6003193601126101b657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b6575f6003193601126101b6577f000000000000000000000000000000000000000000000000000000000000000060405160038210156103cc576020918152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60c06003193601126101b657600435610410612410565b604435906fffffffffffffffffffffffffffffffff821682036101b6576064359264ffffffffff84168094036101b65760843567ffffffffffffffff81116101b657610460903690600401612475565b9060a43567ffffffffffffffff81116101b657610481903690600401612518565b907f000000000000000000000000000000000000000000000000000000000000000060038110156103cc57600181036105ea575073ffffffffffffffffffffffffffffffffffffffff8616156105c2576104d96132d3565b73ffffffffffffffffffffffffffffffffffffffff81161561059a5742891061056a5791610559916105619594936105689a60405160208101917f219f32e1e2ac61bb8bf48019aeabd1a04366f69f4d9a4e73b315e56deb50c0438352336040830152606082015260608152610550608082612263565b519020906134fb565b8533856126a6565b3390612acc565b005b887f820dbdf9000000000000000000000000000000000000000000000000000000005f526004524260245260445ffd5b7f91cce831000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f036fcd52000000000000000000000000000000000000000000000000000000005f5260045ffd5b61061b907fcb0b66a3000000000000000000000000000000000000000000000000000000005f526001600452612546565b60445ffd5b346101b65760206003193601126101b657602061065660043560ff6001918060081c5f526005602052161b60405f205416151590565b6040519015158152f35b346101b6575f6003193601126101b65760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346101b6575f6003193601126101b65760206106b66132d3565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b6575f6003193601126101b65760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346101b6575f6003193601126101b657602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b6575f6003193601126101b6576020610656612600565b346101b65760206003193601126101b6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660043533820361082c57600454808210156107fe57816040917fcafa56d109bc30839f1bad76f9d17abcbd6c936490d4ec0fbc6d331bf89f92af9360045582519182526020820152a2005b7f173c9c82000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b507fead08252000000000000000000000000000000000000000000000000000000005f526004523360245260445ffd5b346101b6575f6003193601126101b657602064ffffffffff60025416604051908152f35b346101b6575f6003193601126101b657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b6575f6003193601126101b657602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b65760206003193601126101b65773ffffffffffffffffffffffffffffffffffffffff61093f6123ed565b165f52600760205260405f20604051806020835491828152019081935f5260205f20905f5b8181106109bc575050508161097a910382612263565b604051918291602083019060208452518091526040830191905f5b8181106109a3575050500390f35b8251845285945060209384019390920191600101610995565b8254845260209093019260019283019201610964565b346101b65760206003193601126101b65773ffffffffffffffffffffffffffffffffffffffff610a006123ed565b610a08613225565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf805f80a3005b346101b6575f6003193601126101b657602060405160018152f35b346101b6575f6003193601126101b657602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b6575f6003193601126101b657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b6575f6003193601126101b65760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101b6575f6003193601126101b6576020600454604051908152f35b346101b6575f6003193601126101b6576040515f6003548060011c90600181168015610c94575b602083108114610c6757828552908115610c255750600114610bc7575b610bc383610baf81850382612263565b604051918291602083526020830190612390565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610c0b57509091508101602001610baf610b9f565b919260018160209254838588010152019101909291610bf3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b84019091019150610baf9050610b9f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610b82565b346101b6575f6003193601126101b657610cb661256c565b6040518091602082016020835281518091526020604084019201905f5b818110610ce1575050500390f35b8251805167ffffffffffffffff16855260209081015164ffffffffff168186015286955060409094019390920191600101610cd3565b610d20366124a6565b909291927f000000000000000000000000000000000000000000000000000000000000000060038110156103cc5780610d6b575093610d668392610568968685856126a6565b612acc565b61061b907fcb0b66a3000000000000000000000000000000000000000000000000000000005f525f600452612546565b346101b6575f6003193601126101b657600454604051907fb0fa59e8000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610e64575f90610e31575b602090604051908152f35b506020813d602011610e5c575b81610e4b60209383612263565b810103126101b65760209051610e26565b3d9150610e3e565b6040513d5f823e3d90fd5b346101b65760606003193601126101b65760043573ffffffffffffffffffffffffffffffffffffffff81168082036101b657610ea9612456565b9173ffffffffffffffffffffffffffffffffffffffff610ec7612433565b169283156105c2576fffffffffffffffffffffffffffffffff16908115610f6a57610f3c90604051907f23b872dd00000000000000000000000000000000000000000000000000000000602083015233602483015285604483015283606483015260648252610f37608483612263565b613474565b6040519081527f5c3fcf40f5e26ff8e74068a6d3b372d00de14949e859fa20fb3616b2c7128b9b60203392a4005b7f642ef277000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b6575f6003193601126101b657610bc3610baf6122a4565b60e06003193601126101b657600435610fc4612410565b610fcc612433565b91606435906fffffffffffffffffffffffffffffffff8216938483036101b65760843564ffffffffff81168091036101b65760a43567ffffffffffffffff81116101b65761101e903690600401612475565b60c49691963567ffffffffffffffff81116101b657611041903690600401612518565b9790927f000000000000000000000000000000000000000000000000000000000000000060038110156103cc5780610d6b575073ffffffffffffffffffffffffffffffffffffffff86169384156105c2578a996111109160405160208101907fb0f12a3a6931229a836eaab08aeb1ebe2ddebad3bfd83f30d39f6c4a3b0f4f8182528b604082015273ffffffffffffffffffffffffffffffffffffffff86169d8e606083015289608083015260a08201528960c082015260c0815261110760e082612263565b519020846134fb565b64ffffffffff4216948581116118685750908761112e9392886126a6565b6040519161113b8361222a565b5f80845260208401527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff81166118605750915b61117c61256c565b9283519361118985612554565b946111976040519687612263565b8086527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06111c482612554565b015f5b81811061183d5750506fffffffffffffffffffffffffffffffff6112086112038d67ffffffffffffffff6111fa87612aab565b51511690613721565b6135a6565b169164ffffffffff80602061121c84612aab565b51015116850116604051906112308261222a565b848252602082015261124188612aab565b5261124b87612aab565b5060015b8c83821061177c579050839291506fffffffffffffffffffffffffffffffff64ffffffffff9594161061172a575b505016815264ffffffffff60206112b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86510186612ab8565b510151166020820181905242106113735750505060018161131e7ff46684b730cdfda57162147f36e667c94ecc144aa37e949cffe699e2f7c7f38d969761136e947f0000000000000000000000000000000000000000000000000000000000000000613276565b604051948594859273ffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff60609497969397608087019887521660208601521660408401521515910152565b0390a2005b9190965f959493955473ffffffffffffffffffffffffffffffffffffffff1692604051936113a085612246565b84526020840198895260408401918252606084017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152608085017f00000000000000000000000000000000000000000000000000000000000000001515815260a08601917f00000000000000000000000000000000000000000000000000000000000000001515835260c0870193845261144f6122a4565b9460e088019586526040519c8d987f9d93ddd3000000000000000000000000000000000000000000000000000000008a5260048a01604090525173ffffffffffffffffffffffffffffffffffffffff1660448a01525173ffffffffffffffffffffffffffffffffffffffff166064890152516fffffffffffffffffffffffffffffffff1660848801525173ffffffffffffffffffffffffffffffffffffffff1660a487015251151560c486015251151560e485015251805164ffffffffff166101048501526020015164ffffffffff166101248401525161014483016101209052610164830161153e91612390565b82810360031901602484015281519081815260200191602001905f5b8181106116ec57505050908060209203815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1948515610e64575f956116b8575b50835f52600760205260405f2080546801000000000000000081101561168b576001810180835581101561165e575f91825260209182902001869055604080519283526fffffffffffffffffffffffffffffffff9093169082015273ffffffffffffffffffffffffffffffffffffffff90921690820152600160608201527fc1a996f3693566bf333b8f07ae109766a59a6660dc05dadd5f419487f797f70b9080608081015b0390a3005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9094506020813d6020116116e4575b816116d460209383612263565b810103126101b6575193856115b3565b3d91506116c7565b825180516fffffffffffffffffffffffffffffffff16855260209081015164ffffffffff16818601528a95506040909401939092019160010161155a565b6fffffffffffffffffffffffffffffffff6117687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82930189612ab8565b51928b031681835116011690528a8061127d565b906fffffffffffffffffffffffffffffffff6117aa61120360019467ffffffffffffffff6111fa8689612ab8565b958601169464ffffffffff8060206117e47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86018e612ab8565b510151168160206117f58689612ab8565b5101511601166fffffffffffffffffffffffffffffffff604051926118198461222a565b168252602082015261182b828b612ab8565b52611836818a612ab8565b500161124f565b60209060405161184c8161222a565b5f81525f8382015282828b010152016111c7565b905091611174565b85907f663ab84b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b346101b65760406003193601126101b6576118b16123ed565b6118b9612456565b6118c1613225565b64ffffffffff60025416801515806119ce575b806119bf575b61196557506fffffffffffffffffffffffffffffffff169061191d82827f0000000000000000000000000000000000000000000000000000000000000000613276565b7f2e9d425ba8b27655048400b366d7b6a1f7180ebdb088e06bb7389704860ffe1f602073ffffffffffffffffffffffffffffffffffffffff805f5416936040519586521693a3005b7fe2e40a0c000000000000000000000000000000000000000000000000000000005f524260045264ffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660245260445260645ffd5b506119c8612600565b156118da565b5062093a80810164ffffffffff81116119ef5764ffffffffff1642116118d4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b611a25366124a6565b939291907f000000000000000000000000000000000000000000000000000000000000000060038110156103cc5780610d6b575073ffffffffffffffffffffffffffffffffffffffff83169485156105c257611a83918333876126a6565b604051611a8f8161222a565b5f80825260208201527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff8116612169575064ffffffffff4216945b611ad861256c565b916fffffffffffffffffffffffffffffffff841696835193611af985612554565b94611b076040519687612263565b8086527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611b3482612554565b015f5b8181106121465750506fffffffffffffffffffffffffffffffff611b7261120367ffffffffffffffff611b6986612aab565b5151168d613721565b169164ffffffffff806020611b8684612aab565b5101511685011660405190611b9a8261222a565b8482526020820152611bab88612aab565b52611bb587612aab565b5060015b8b838210612085579050839291506fffffffffffffffffffffffffffffffff64ffffffffff95941610612033575b505016815264ffffffffff6020611c217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86510186612ab8565b51015116602082018190524210611cd057505050611c827ff46684b730cdfda57162147f36e667c94ecc144aa37e949cffe699e2f7c7f38d9394837f0000000000000000000000000000000000000000000000000000000000000000613276565b604080519485526fffffffffffffffffffffffffffffffff909116602085015273ffffffffffffffffffffffffffffffffffffffff909116908301525f60608301523391806080810161136e565b9190955f9493945473ffffffffffffffffffffffffffffffffffffffff169260405193611cfc85612246565b84526020840197885260408401918252606084017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152608085017f00000000000000000000000000000000000000000000000000000000000000001515815260a08601917f00000000000000000000000000000000000000000000000000000000000000001515835260c08701938452611dab6122a4565b9460e088019586526040519b8c987f9d93ddd3000000000000000000000000000000000000000000000000000000008a5260048a01604090525173ffffffffffffffffffffffffffffffffffffffff1660448a01525173ffffffffffffffffffffffffffffffffffffffff166064890152516fffffffffffffffffffffffffffffffff1660848801525173ffffffffffffffffffffffffffffffffffffffff1660a487015251151560c486015251151560e485015251805164ffffffffff166101048501526020015164ffffffffff1661012484015251610144830161012090526101648301611e9a91612390565b82810360031901602484015281519081815260200191602001905f5b818110611ff557505050908060209203815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1938415610e64575f94611fc1575b50335f52600760205260405f20918254926801000000000000000084101561168b576001840180825584101561165e577fc1a996f3693566bf333b8f07ae109766a59a6660dc05dadd5f419487f797f70b9386915f5260205f2001556116595f6040519384933397859273ffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff60609497969397608087019887521660208601521660408401521515910152565b9093506020813d602011611fed575b81611fdd60209383612263565b810103126101b657519284611f0f565b3d9150611fd0565b825180516fffffffffffffffffffffffffffffffff16855260209081015164ffffffffff168186015289955060409094019390920191600101611eb6565b6fffffffffffffffffffffffffffffffff6120717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82930189612ab8565b519289031681835116011690528980611be7565b906fffffffffffffffffffffffffffffffff6120b361120360019467ffffffffffffffff6111fa8689612ab8565b958601169464ffffffffff8060206120ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86018e612ab8565b510151168160206120fe8689612ab8565b5101511601166fffffffffffffffffffffffffffffffff604051926121228461222a565b1682526020820152612134828b612ab8565b5261213f818a612ab8565b5001611bb9565b6020906040516121558161222a565b5f81525f8382015282828b01015201611b37565b94611ad0565b346101b6575f6003193601126101b6576040515f6001548060011c90600181168015612220575b602083108114610c6757828552908115610c2557506001146121c257610bc383610baf81850382612263565b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b80821061220657509091508101602001610baf610b9f565b9192600181602092548385880101520191019092916121ee565b91607f1691612196565b6040810190811067ffffffffffffffff82111761168b57604052565b610100810190811067ffffffffffffffff82111761168b57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761168b57604052565b604051905f6006548060011c9160018216918215612386575b602084108314610c6757838652859290811561234957506001146122ea575b6122e892500383612263565b565b5060065f90815290917ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b81831061232d5750509060206122e8928201016122dc565b6020919350806001915483858901015201910190918492612315565b602092506122e89491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016122dc565b92607f16926122bd565b91908251928382525f5b8481106123d85750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b8060208092840101518282860101520161239a565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b657565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b657565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b657565b602435906fffffffffffffffffffffffffffffffff821682036101b657565b9181601f840112156101b65782359167ffffffffffffffff83116101b6576020808501948460051b0101116101b657565b9060806003198301126101b6576004359160243573ffffffffffffffffffffffffffffffffffffffff811681036101b657916044356fffffffffffffffffffffffffffffffff811681036101b657916064359067ffffffffffffffff82116101b65761251491600401612475565b9091565b9181601f840112156101b65782359167ffffffffffffffff83116101b657602083818601950101116101b657565b60038110156103cc57602452565b67ffffffffffffffff811161168b5760051b60200190565b6009549061257982612554565b916125876040519384612263565b80835260095f9081527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af602085015b8383106125c35750505050565b6001602081926040516125d58161222a565b64ffffffffff865467ffffffffffffffff8116835260401c16838201528152019201920191906125b6565b64ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015159081612635575090565b905042101590565b67ffffffffffffffff811161168b57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b3d156126a1573d906126888261263d565b916126966040519384612263565b82523d5f602084013e565b606090565b939491909264ffffffffff7f000000000000000000000000000000000000000000000000000000000000000016428111612a7c57506126e3612600565b612a25577f00000000000000000000000000000000000000000000000000000000000000009373ffffffffffffffffffffffffffffffffffffffff851692600454604051907fb0fa59e80000000000000000000000000000000000000000000000000000000082526004820152602081602481885afa908115610e64575f916129f3575b508034106129c457506127918760ff6001918060081c5f526005602052161b60405f205416151590565b612998576fffffffffffffffffffffffffffffffff6040519173ffffffffffffffffffffffffffffffffffffffff60208401948a8652166040840152166060820152606081526127e2608082612263565b51902060405160208101918252602081526127fe604082612263565b5190209061280b87612554565b966128196040519889612263565b808852602088019060051b8201913683116101b657905b82821061298857505050925f935b8651851015612880576128518588612ab8565b51908181101561286f575f52602052600160405f205b94019361283e565b905f52602052600160405f20612867565b919492955092507f0000000000000000000000000000000000000000000000000000000000000000036129605760025464ffffffffff81161561292c575b508060081c5f526005602052600160ff60405f2092161b8154179055346128e3575050565b5f8080809334905af16128f4612677565b50156128fd5750565b7fe57d366c000000000000000000000000000000000000000000000000000000005f526004523460245260445ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16176002555f6128be565b7fb4f06787000000000000000000000000000000000000000000000000000000005f5260045ffd5b8135815260209182019101612830565b867f02bf1aba000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fa164c6b4000000000000000000000000000000000000000000000000000000005f523460045260245260445ffd5b90506020813d602011612a1d575b81612a0e60209383612263565b810103126101b657515f612767565b3d9150612a01565b7fdf4bae05000000000000000000000000000000000000000000000000000000005f524260045264ffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660245260445ffd5b7f14659648000000000000000000000000000000000000000000000000000000005f524260045260245260445ffd5b80511561165e5760200190565b805182101561165e5760209160051b010190565b92919091604051612adc8161222a565b5f80825260208201527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff811661321f575064ffffffffff4216905b612b2561256c565b6fffffffffffffffffffffffffffffffff841692815191612b4583612554565b92612b536040519485612263565b8084527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612b8082612554565b015f5b8181106131fc5750506fffffffffffffffffffffffffffffffff612bbe61120367ffffffffffffffff612bb586612aab565b51511689613721565b169164ffffffffff806020612bd284612aab565b5101511685011660405190612be68261222a565b8482526020820152612bf786612aab565b52612c0185612aab565b5060015b8281106131335750509064ffffffffff9291866fffffffffffffffffffffffffffffffff8316106130e1575b505016825264ffffffffff6020612c6b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84510184612ab8565b51015116602083018190524210612d3d5750505f837ff46684b730cdfda57162147f36e667c94ecc144aa37e949cffe699e2f7c7f38d9593612ce6612d389473ffffffffffffffffffffffffffffffffffffffff977f0000000000000000000000000000000000000000000000000000000000000000613276565b6040519586951697859273ffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff60609497969397608087019887521660208601521660408401521515910152565b0390a2565b5f54604051929796939073ffffffffffffffffffffffffffffffffffffffff16612d6684612246565b8352602083019773ffffffffffffffffffffffffffffffffffffffff8716895260408401918252606084017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152608085017f00000000000000000000000000000000000000000000000000000000000000001515815260a08601917f00000000000000000000000000000000000000000000000000000000000000001515835260c08701938452612e2c6122a4565b9460e088019586526040519c8d987f9d93ddd3000000000000000000000000000000000000000000000000000000008a5260048a01604090525173ffffffffffffffffffffffffffffffffffffffff1660448a01525173ffffffffffffffffffffffffffffffffffffffff166064890152516fffffffffffffffffffffffffffffffff1660848801525173ffffffffffffffffffffffffffffffffffffffff1660a487015251151560c486015251151560e485015251805164ffffffffff166101048501526020015164ffffffffff1661012484015251610144830161012090526101648301612f1b91612390565b82810360031901602484015281519081815260200191602001905f5b8181106130a357505050908060209203815f73ffffffffffffffffffffffffffffffffffffffff7f00000000000000