[ { "inputs": [ { "internalType": "contract IGlobals", "name": "globals", "type": "address" }, { "internalType": "contract IReserveAuctionCoreEth", "name": "zora", "type": "address" }, { "internalType": "contract IFractionalV1VaultFactory", "name": "fractionalVaultFactory", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [ { "internalType": "bytes", "name": "revertData", "type": "bytes" } ], "name": "ArbitraryCallFailedError", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "CallProhibitedError", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "bytes", "name": "errData", "type": "bytes" } ], "name": "EthTransferFailed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "callDataLength", "type": "uint256" } ], "name": "InvalidApprovalCallLength", "type": "error" }, { "inputs": [], "name": "InvalidFeeRecipients", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "InvalidGovernanceParameter", "type": "error" }, { "inputs": [], "name": "MalformedProposalDataError", "type": "error" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" } ], "name": "NotATokenError", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "executor", "type": "address" }, { "internalType": "address[]", "name": "allowedExecutors", "type": "address[]" } ], "name": "NotAllowedToExecute", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "callValue", "type": "uint256" }, { "internalType": "uint256", "name": "ethAvailable", "type": "uint256" } ], "name": "NotEnoughEthAttachedError", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "operatorValue", "type": "uint256" }, { "internalType": "uint256", "name": "ethAvailable", "type": "uint256" } ], "name": "NotEnoughEthError", "type": "error" }, { "inputs": [], "name": "OnlyDelegateCallError", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "OpenseaOrderStillActiveError", "type": "error" }, { "inputs": [ { "internalType": "contract IERC721", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "PreciousLostError", "type": "error" }, { "inputs": [ { "internalType": "enum ProposalExecutionEngine.ProposalType", "name": "proposalType", "type": "uint8" } ], "name": "ProposalDisabled", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "currentInProgressProposalId", "type": "uint256" } ], "name": "ProposalExecutionBlockedError", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "ProposalNotInProgressError", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "actualProgressDataHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "expectedProgressDataHash", "type": "bytes32" } ], "name": "ProposalProgressDataInvalidError", "type": "error" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokenTransferFailedError", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "u256", "type": "uint256" } ], "name": "Uint256ToUint40CastOutOfRangeError", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idx", "type": "uint256" }, { "internalType": "bytes32", "name": "resultHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "expectedResultHash", "type": "bytes32" } ], "name": "UnexpectedCallResultHashError", "type": "error" }, { "inputs": [ { "internalType": "contract IProposalExecutionEngine", "name": "actualImpl", "type": "address" }, { "internalType": "contract IProposalExecutionEngine", "name": "expectedImpl", "type": "address" } ], "name": "UnexpectedProposalEngineImplementationError", "type": "error" }, { "inputs": [ { "internalType": "uint32", "name": "proposalType", "type": "uint32" } ], "name": "UnsupportedProposalTypeError", "type": "error" }, { "inputs": [], "name": "ZeroProposalIdError", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "auctionEndTime", "type": "uint256" } ], "name": "ZoraListingLive", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "tokenid", "type": "uint256" }, { "internalType": "uint40", "name": "expiry", "type": "uint40" } ], "name": "ZoraListingNotExpired", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "idx", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "ArbitraryCallExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "ExecutionDelaySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IERC721", "name": "token", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "vaultId", "type": "uint256" }, { "indexed": false, "internalType": "contract IERC20", "name": "vault", "type": "address" } ], "name": "FractionalV1VaultCreated", "type": "event" }, { "anonymous": false, "inputs": [], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "address", "name": "offerer", "type": "address" }, { "internalType": "address", "name": "zone", "type": "address" }, { "components": [ { "internalType": "enum IOpenseaExchange.ItemType", "name": "itemType", "type": "uint8" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifierOrCriteria", "type": "uint256" }, { "internalType": "uint256", "name": "startAmount", "type": "uint256" }, { "internalType": "uint256", "name": "endAmount", "type": "uint256" } ], "internalType": "struct IOpenseaExchange.OfferItem[]", "name": "offer", "type": "tuple[]" }, { "components": [ { "internalType": "enum IOpenseaExchange.ItemType", "name": "itemType", "type": "uint8" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifierOrCriteria", "type": "uint256" }, { "internalType": "uint256", "name": "startAmount", "type": "uint256" }, { "internalType": "uint256", "name": "endAmount", "type": "uint256" }, { "internalType": "address payable", "name": "recipient", "type": "address" } ], "internalType": "struct IOpenseaExchange.ConsiderationItem[]", "name": "consideration", "type": "tuple[]" }, { "internalType": "enum IOpenseaExchange.OrderType", "name": "orderType", "type": "uint8" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "bytes32", "name": "zoneHash", "type": "bytes32" }, { "internalType": "uint256", "name": "salt", "type": "uint256" }, { "internalType": "bytes32", "name": "conduitKey", "type": "bytes32" }, { "internalType": "uint256", "name": "totalOriginalConsiderationItems", "type": "uint256" } ], "indexed": false, "internalType": "struct IOpenseaExchange.OrderParameters", "name": "orderParams", "type": "tuple" }, { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "startPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "OpenseaAdvancedOrderListed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "startPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endPrice", "type": "uint256" } ], "name": "OpenseaAdvancedOrderSold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "OpenseaOrderExpired", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "address", "name": "offerer", "type": "address" }, { "internalType": "address", "name": "zone", "type": "address" }, { "components": [ { "internalType": "enum IOpenseaExchange.ItemType", "name": "itemType", "type": "uint8" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifierOrCriteria", "type": "uint256" }, { "internalType": "uint256", "name": "startAmount", "type": "uint256" }, { "internalType": "uint256", "name": "endAmount", "type": "uint256" } ], "internalType": "struct IOpenseaExchange.OfferItem[]", "name": "offer", "type": "tuple[]" }, { "components": [ { "internalType": "enum IOpenseaExchange.ItemType", "name": "itemType", "type": "uint8" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "identifierOrCriteria", "type": "uint256" }, { "internalType": "uint256", "name": "startAmount", "type": "uint256" }, { "internalType": "uint256", "name": "endAmount", "type": "uint256" }, { "internalType": "address payable", "name": "recipient", "type": "address" } ], "internalType": "struct IOpenseaExchange.ConsiderationItem[]", "name": "consideration", "type": "tuple[]" }, { "internalType": "enum IOpenseaExchange.OrderType", "name": "orderType", "type": "uint8" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "bytes32", "name": "zoneHash", "type": "bytes32" }, { "internalType": "uint256", "name": "salt", "type": "uint256" }, { "internalType": "bytes32", "name": "conduitKey", "type": "bytes32" }, { "internalType": "uint256", "name": "totalOriginalConsiderationItems", "type": "uint256" } ], "indexed": false, "internalType": "struct IOpenseaExchange.OrderParameters", "name": "orderParams", "type": "tuple" }, { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": false, "internalType": "contract IERC721", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "listPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "OpenseaOrderListed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "indexed": false, "internalType": "contract IERC721", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "listPrice", "type": "uint256" } ], "name": "OpenseaOrderSold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "executor", "type": "address" } ], "name": "OperationExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "PassThresholdBpsSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldImpl", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newImpl", "type": "address" } ], "name": "ProposalEngineImplementationUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "hash", "type": "bytes32" }, { "indexed": true, "internalType": "contract IERC1271", "name": "signatureValidator", "type": "address" } ], "name": "SignatureValidatorSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "VoteDurationSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "startingPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint40", "name": "duration", "type": "uint40" }, { "indexed": false, "internalType": "uint40", "name": "timeoutTime", "type": "uint40" } ], "name": "ZoraAuctionCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "ZoraAuctionExpired", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenid", "type": "uint256" } ], "name": "ZoraAuctionSold", "type": "event" }, { "inputs": [], "name": "IMPL", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VAULT_FACTORY", "outputs": [ { "internalType": "contract IFractionalV1VaultFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ZORA", "outputs": [ { "internalType": "contract IReserveAuctionCoreEth", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ZORA_TRANSFER_HELPER", "outputs": [ { "internalType": "contract BaseTransferHelper", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" } ], "name": "cancelProposal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "bytes", "name": "proposalData", "type": "bytes" }, { "internalType": "bytes", "name": "progressData", "type": "bytes" }, { "internalType": "bytes", "name": "extraData", "type": "bytes" }, { "internalType": "uint256", "name": "flags", "type": "uint256" }, { "internalType": "contract IERC721[]", "name": "preciousTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "preciousTokenIds", "type": "uint256[]" } ], "internalType": "struct IProposalExecutionEngine.ExecuteProposalParams", "name": "params", "type": "tuple" } ], "name": "executeProposal", "outputs": [ { "internalType": "bytes", "name": "nextProgressData", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "getCurrentInProgressProposalId", "outputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "name": "getSignatureValidatorForHash", "outputs": [ { "internalType": "contract IERC1271", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "implementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "oldImpl", "type": "address" }, { "internalType": "bytes", "name": "initializeData", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "isValidSignature", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" } ]
6101808060405234620001d457606081620051ce8038038091620000248285620001d8565b833981010312620001d45780516001600160a01b0391908281168103620001d45760208201519280841692838503620001d45760400151928184168403620001d4576020600491306080528460a0528660c0526040519283809263f7cd1d9b60e01b82525afa908115620001c9575f9162000181575b50905060e0526101009281845261012092835261014090815261016091825260405192614fbd94856200021186396080518581816103d90152818161072b015281816107900152818161095e0152614849015260a0518581816123e60152818161266501528181612cd501528181612efa015281816131410152818161332d015261345f015260c0518581816106a501528181613c2c01528181613dcb0152613f5f015260e05185818161014701528181613bf00152613d74015251846139850152518381816101030152611c6d01525182611803015251818181610c6c01526147d80152f35b6020813d8211620001c0575b816200019c60209383620001d8565b81010312620001bc57519182168203620001b95750805f6200009a565b80fd5b5080fd5b3d91506200018d565b6040513d5f823e3d90fd5b5f80fd5b601f909101601f19168101906001600160401b03821190821017620001fc57604052565b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063103f2907146100cf57806311e69442146100ca578063158ef93e146100c55780631626ba7e146100c05780631d117029146100bb57806356973ee5146100b65780635c60da1b146100b65780636262b278146100b1578063a7c8a3f9146100ac578063c4e525bf146100a7578063d1f57894146100a25763e0a8f6f51461009d575f80fd5b610779565b6106d4565b610690565b61058e565b610408565b6103c4565b610388565b610338565b610176565b610132565b6100ee565b5f9103126100de57565b5f80fd5b6001600160a01b031690565b346100de575f3660031901126100de576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100de575f3660031901126100de576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100de575f3660031901126100de57602060ff5f54166040519015158152f35b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b038211176101c657604052565b610197565b604081019081106001600160401b038211176101c657604052565b6001600160401b0381116101c657604052565b61010081019081106001600160401b038211176101c657604052565b606081019081106001600160401b038211176101c657604052565b60a081019081106001600160401b038211176101c657604052565b602081019081106001600160401b038211176101c657604052565b601f909101601f19168101906001600160401b038211908210176101c657604052565b6040519060e082016001600160401b038111838210176101c657604052565b6040519061012082016001600160401b038111838210176101c657604052565b604051906102d58261024b565b565b6001600160401b0381116101c657601f01601f191660200190565b81601f820112156100de57803590610309826102d7565b926103176040519485610266565b828452602083830101116100de57815f926020809301838601378301015290565b346100de5760403660031901126100de576024356001600160401b0381116100de5761037561036d60209236906004016102f2565b600435610b5a565b6040516001600160e01b03199091168152f35b346100de575f3660031901126100de5760205f80516020614f2883398151915254604051908152f35b6001600160a01b03909116815260200190565b346100de575f3660031901126100de576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100de5760203660031901126100de576004355f525f80516020614f68833981519152602052602060018060a01b0360405f205416604051908152f35b6001600160401b0381116101c65760051b60200190565b6001600160a01b038116036100de57565b81601f820112156100de5780359161048583610446565b926104936040519485610266565b808452602092838086019260051b8201019283116100de578301905b8282106104bd575050505090565b83809183356104cb8161045d565b8152019101906104af565b81601f820112156100de578035916104ed83610446565b926104fb6040519485610266565b808452602092838086019260051b8201019283116100de578301905b828210610525575050505090565b81358152908301908301610517565b5f5b8381106105455750505f910152565b8181015183820152602001610536565b9060209161056e81518092818552858086019101610534565b601f01601f1916010190565b90602061058b928181520190610555565b90565b6003196020368201126100de5760048035916001600160401b03908184116100de5760e09084360301126100de576105c4610289565b9083830135825260248401358181116100de576105e6908436918701016102f2565b602083015260448401358181116100de57610606908436918701016102f2565b604083015260648401358181116100de57610626908436918701016102f2565b60608301526084840135608083015260a48401358181116100de576106509084369187010161046e565b60a083015260c48401359081116100de5761068c936106809361067692369201016104d6565b60c082015261095b565b6040519182918261057a565b0390f35b346100de575f3660031901126100de576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100de5760403660031901126100de576004356106f18161045d565b602435906001600160401b03908183116100de57366023840112156100de5782600401359182116100de5736602483850101116100de57307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146107675760246107659301906108ad565b005b60405163ea2cbbd560e01b8152600490fd5b346100de5760203660031901126100de57600435307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610767578015610807575f80516020614f2883398151915290808254036107ef575f8083555f80516020614e8883398151915255005b60249060405190633ae4fbbd60e11b82526004820152fd5b60405163eaeba8a760e01b8152600490fd5b801515036100de57565b634e487b7160e01b5f52602160045260245ffd5b6003111561084157565b610823565b805115155f80516020614f0883398151915291825461ff006020830151151560081b169060ff63ff000000606062ff00006040870151151560101b1695015161088e81610837565b61089781610837565b60181b1694169063ffffffff1916171717179055565b9091906001600160a01b031661092b57801561092b5781608091810103126100de576060604051916108de836101ab565b80356108e981610819565b835260208101356108f981610819565b6020840152604081013561090c81610819565b604084015201359060038210156100de576102d5916060820152610846565b5050565b908152602081019190915260400190565b1561094757565b634e487b7160e01b5f52600160045260245ffd5b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461076757805115610807575f80516020614f28833981519152548015908115610ac357506109c182515f80516020614f2883398151915255565b5f80516020614e88833981519152549081610a88576109df90610940565b604082015180519081610a6457505050610a1b905b5f195f80516020614e888339815191525560208101610a1381516146f0565b909152610d46565b805180610a4d5750610a385f5f80516020614f2883398151915255565b61058b5f5f80516020614e8883398151915255565b60208201205f80516020614e888339815191525590565b60200120610a8460405192839263070bdb0360e11b84526004840161092f565b0390fd5b50604082015160208151910120808203610aa7575050610a1b906109f4565b610a8460405192839263070bdb0360e11b84526004840161092f565b8251808203610ad35750506109c1565b610a8460405192839263432e608d60e11b84526004840161092f565b51906001600160e01b0319821682036100de57565b908160209103126100de5761058b90610aef565b60409061058b939281528160208201520190610555565b6040513d5f823e3d90fd5b51906102d58261045d565b908160209103126100de575161058b8161045d565b90610b74610b6783614c35565b546001600160a01b031690565b6001600160a01b039290831660018114610d195780610cde57503215610b9b575050505f90565b5f80525f80516020614f68833981519152602052610bd87f32e7835c7bdea43a8991225bf722dd2a62db42e8d890125081512c6e3fb14ea4610b67565b9280841615610c4a575b9260209291610c0794604051809681958294630b135d3f60e11b845260048401610b18565b0392165afa908115610c45575f91610c1d575090565b61058b915060203d8111610c3e575b610c368183610266565b810190610b04565b503d610c2c565b610b2f565b604051635c9fcd8560e11b8152602060048201819052909450919291846024817f000000000000000000000000000000000000000000000000000000000000000085165afa928315610c455781602094610c07965f91610cb1575b50169450919250610be2565b610cd19150863d8111610cd7575b610cc98183610266565b810190610b45565b5f610ca5565b503d610cbf565b604051630b135d3f60e11b81529350602092849283918291610d04919060048401610b18565b03915afa908115610c45575f91610c1d575090565b50630b135d3f60e11b9392505050565b600c111561084157565b91906020830192600c8210156108415752565b6060610d5182610d29565b60018203610d6457505061058b90613792565b610d6d82610d29565b60068203610d8057505061058b906120f9565b610d8982610d29565b60028203610d9c57505061058b906138e0565b610da582610d29565b60038203610db857505061058b90611beb565b610dc182610d29565b60048203610dea57505061058b9060ff5f80516020614f088339815191525460081c16906112b8565b610df382610d29565b60078203610e485750600160ff5f80516020614f088339815191525460181c16610e1c81610837565b03610e2b575061058b90611a03565b6040516331a7c43b60e11b8152908190610a849060048301610d33565b610e5182610d29565b60088203610e7b57505f80516020614f088339815191525460ff1615610e2b575061058b9061102f565b610e8482610d29565b60098203610eb157505f80516020614f088339815191525460101c60ff1615610e2b575061058b906143bf565b929190610ebd81610d29565b600a8103610ed1575061058b919250614c4f565b610eda81610d29565b600b8103610eee575061058b919250614996565b610ef781610d29565b60058103610f0d575060206102d591015161479c565b80610f1a610a8492610d29565b60405163efdc945f60e01b815263ffffffff90911660048201529081906024820190565b90929192610f4b816102d7565b91610f596040519384610266565b8294828452828201116100de5760206102d5930190610534565b9080601f830112156100de57815161058b92602001610f3e565b906020828203126100de5781516001600160401b03928382116100de5701906040828203126100de5760405192610fc3846101cb565b8251610fce8161045d565b845260208301519081116100de57610fe69201610f73565b602082015290565b60405190610ffb8261024b565b5f8252565b3d1561102a573d90611011826102d7565b9161101f6040519384610266565b82523d5f602084013e565b606090565b611046602080920151828082518301019101610f8d565b8082015180515f91816110ba575050506110619150516100e2565b303b156100de575f61108791604051809381926326defa7360e01b8352600483016103b1565b038183305af18015610c45576110a1575b5061058b610fee565b806110ae6110b4926101e6565b806100d4565b5f611098565b82856110c78296516100e2565b9201915af1906110d5611000565b91156110fa5781816110f0926110f594518301019101610b45565b6100e2565b611061565b50614938565b9060209081838203126100de5782516001600160401b03938482116100de57019080601f830112156100de57815161113781610446565b9460409061114782519788610266565b828752858088019360051b860101948486116100de57868101935b86851061117457505050505050505090565b84518381116100de5782019060809081601f19848a0301126100de57855161119b816101ab565b8a8401516111a88161045d565b8152868401518b820152606080850151938785116100de57856111d28c8f80999881990101610f73565b8a850152015190820152815201940193611162565b906111f182610446565b6111fe6040519182610266565b828152809261120f601f1991610446565b0190602036910137565b634e487b7160e01b5f52601160045260245ffd5b5f19811461123b5760010190565b611219565b634e487b7160e01b5f52603260045260245ffd5b8051156112615760200190565b611240565b80518210156112615760209160051b010190565b9190820391821161123b57565b6040919493926060820195825260208201520152565b6001600160a01b039091168152602081019190915260400190565b9060206112d081840151828082518301019101611100565b926001908180608083015116149460c0820193836112ef8651516111e7565b92881592836114a4575b881561149e57475b995f935b6113fe575b5050505061133e575b505050501580611335575b61132b575061058b610fee565b6110b49033614ce9565b5080151561131e565b5f835b61134c575b50611313565b81518110156113f9576113686113628284611266565b51151590565b61137c575b6113769061122d565b83611341565b60a083016113b76113b36113a1611394858551611266565b516001600160a01b031690565b6113ac858a51611266565b5190611636565b1590565b6113c1575061136d565b816113d461139488946113db9451611266565b9251611266565b51604051634baa335b60e11b8152918291610a84916004840161129d565b611346565b9091929983518b10156114985790828b836114278b979695858e60a08e01519051908a8761152d565b8c1561147957505050611473475b9b7fb7ff498e3c62b4b7e752fe0641134387db1cc5096d26b462a2c949bfb8484a9a818a5161146b885160405193849384611287565b0390a161122d565b93611305565b6114739261148a6114939388611266565b5101519061127a565b611435565b9961130a565b34611301565b5f835b6114b2575b506112f9565b8887879593949551831015611500576114e183926113ac846113d46113946114f79860a06114f2980151611266565b6114eb838a611266565b9015159052565b61122d565b819392916114a7565b5050929190926114ac565b6001600160a01b03909116815260406020820181905261058b92910190610555565b939261154e926113b392969486611544818a611266565b5198519189611677565b61160957602083019081518082106115ed5750505f80916115726110f086516100e2565b905190604086015191602083519301915af19161158d611000565b926115ad576040516308a16a4360e41b815280610a84856004830161057a565b6060015191826115bc57505050565b60208151910120918083036115d057505050565b610a84906040519384936395fcd9af60e01b855260048501611287565b610a8460405192839263465352eb60e01b84526004840161092f565b82604061161682516100e2565b9101516040516309a30f6560e01b8152918291610a84916004840161150b565b9061164091614e17565b6001600160a01b0316301490565b906001820180921161123b57565b600101908160011161123b57565b9190820180921161123b57565b909394929160018060a01b03928361168f84516100e2565b169130831461184057604084019283516004815110156116b9575b50505050505050505050600190565b602001516001600160e01b031916971561174a575b50505050505050630a85bd0160e11b8114801561173a575b801561172a575b6117245763440a3b9960e11b149081611719575b50611715575f8080808080808080806116aa565b5f90565b90505115155f611701565b50505f90565b5063bc197c8160e01b81146116ed565b5063f23a6e6160e01b81146116e6565b63095ea7b360e01b880361179757505050611765905161184c565b921661177b575050505b5f8080808080806116ce565b6113b39350906117926110f061058b9693516100e2565b611fcf565b939550919390929063a22cb46560e01b87036117e257505050506117bb9051611885565b90506117c7575061176f565b6113b39150916117dd6110f061058b94516100e2565b611f8a565b929450909250906342cdcbff60e11b8514611801575b5050505061176f565b7f0000000000000000000000000000000000000000000000000000000000000000161461182f5780806117f8565b90925061183c915061164e565b1490565b50505050505050505f90565b9081516044811061186d5750604460018060a01b0360248401511692015190565b6024906040519063252e3c3d60e01b82526004820152fd5b9081516044811061186d575060016044818060a01b03602485015116930151151890565b600211156100de57565b51906102d5826118a9565b908160809103126100de576060604051916118d8836101ab565b8051835260208101516118ea816118a9565b602084015260408101516118fd8161045d565b60408401520151606082015290565b6002111561084157565b51906001600160801b03821682036100de57565b51906001600160601b03821682036100de57565b90816101009103126100de576119ce60e06040519261195c846101f9565b8051611967816118a9565b84526020810151602085015261197f60408201610b3a565b604085015261199060608201610b3a565b60608501526119a160808201610b3a565b60808501526119b260a08201611916565b60a08501526119c360c08201611916565b60c08501520161192a565b60e082015290565b908152608081019493926060926119ec8161190c565b60208301526001600160a01b031660408201520152565b6020611a1a910151602080825183010191016118be565b611a628151602083015192611a2e8461190c565b6060611a3d60408301516100e2565b91015190604051938492839263d3c989af60e01b8452610100978896600486016119d6565b03815f305af18015610c4557611a7d575b505061058b610fee565b81611a9c92903d10611aa4575b611a948183610266565b81019061193e565b505f80611a73565b503d611a8a565b908160409103126100de57602060405191611ac5836101cb565b8051611ad08161045d565b83520151602082015290565b519064ffffffffff821682036100de57565b519061ffff821682036100de57565b908160809103126100de57611b4d606060405192611b1a846101ab565b611b2381611adc565b8452611b3160208201611adc565b6020850152611b4260408201611aee565b60408501520161192a565b606082015290565b6020818303126100de578051906001600160401b0382116100de57019080601f830112156100de57815161058b92602001610f3e565b908160209103126100de575190565b9193611bc65f95611bb860c09699989460e0875260e0870190610555565b908582036020870152610555565b6001600160a01b0390971660408401526060830152608082015260a081018390520152565b611c02602080920151828082518301019101611aab565b60408051635901207760e11b8152600491906080818481305afa8015610c45576060611c4291611c4e935f91611f5c575b5001516001600160601b031690565b6001600160601b031690565b93611c5c6110f085516100e2565b84820180516001600160a01b0394927f000000000000000000000000000000000000000000000000000000000000000086169190803b156100de57611cba915f9184838b89519687958694859363095ea7b360e01b8552840161129d565b03925af18015610c4557611f49575b5082516306fdde0360e01b8152945f868881305afa958615610c45575f96611f2e575b5083516395d89b4160e01b8152955f878981305afa968715610c45575f97611f09575b50859088611d3c8c611d218d516100e2565b8851908a519c8d968796630bdc011160e41b88528701611b9a565b03815f865af1958615610c45575f96611eea575b508484518093634632752560e11b82528180611d738b8d83019190602083019252565b03915afa918215610c45575f92611ecb575b5083516370a0823160e01b815282821695808280611da5308d83016103b1565b03818a5afa8015610c4557611dc5928c925f92611e9e575b505014610940565b843b156100de57835190630c6a62dd60e01b82525f8280611ded8b8201906001602083019252565b0381838a5af18015610c4557611a62997fd252747f4bdd4d75edc8c1d9cf1446e23083a5ea163955dfb64fe82a66fc3c9993611e2f92611e8b575b50516100e2565b935185518881526001600160a01b03949094166020850152931691604090a35163d3c989af60e01b8152928301948552600160208601526001600160a01b03166040850152606084015261010092909183918391829160800190565b806110ae611e98926101e6565b5f611e28565b611ebd9250803d10611ec4575b611eb58183610266565b810190611b8b565b5f80611dbd565b503d611eab565b611ee3919250853d8711610cd757610cc98183610266565b905f611d85565b611f02919650853d8711611ec457611eb58183610266565b945f611d50565b611f27908792983d8091833e611f1f8183610266565b810190611b55565b9690611d0f565b611f4291963d8091833e611f1f8183610266565b945f611cec565b806110ae611f56926101e6565b5f611cc9565b611f7d915060803d8111611f83575b611f758183610266565b810190611afd565b5f611c33565b503d611f6b565b5f5b8251811015611fc8576001600160a01b0380611fa88386611266565b511690831614611fc057611fbb9061122d565b611f8c565b505050600190565b5050505f90565b92915f5b815181101561202a576001600160a01b0380611fef8385611266565b51169086161480612017575b61200d576120089061122d565b611fd3565b5050505050600190565b506120228185611266565b518314611ffb565b50505050505f90565b81601f820112156100de5780519161204a83610446565b926120586040519485610266565b808452602092838086019260051b8201019283116100de578301905b828210612082575050505090565b81518152908301908301612074565b81601f820112156100de578051916120a883610446565b926120b66040519485610266565b808452602092838086019260051b8201019283116100de578301905b8282106120e0575050505090565b83809183516120ee8161045d565b8152019101906120d2565b602090818101519081518201918383019380828503126100de57818101516001600160401b03928382116100de5701809461012091829103126100de5761213e6102a8565b9482810151865260408101518387015261215a60608201611adc565b604087015261216b608082016118b3565b606087015261217c60a08201610b3a565b608087015260c081015160a087015260e08101518481116100de5787846121a592840101612033565b60c087015261010093848201519081116100de5761058b976121d8946121cd92840101612091565b60e087015201610aef565b908301526122d8565b600411156100de57565b908160209103126100de575161058b816121e1565b6004111561084157565b9064ffffffffff169052565b519060ff821682036100de57565b91908260209103126100de57604051602081016001600160401b038111828210176101c6576040526122568193611adc565b9052565b91906040838203126100de5761058b90602061227585612216565b9401612224565b8092910391608083126100de57606061229482612216565b93601f1901126100de576122d06060604051926122b084610215565b6020810151845260408101516122c58161045d565b602085015201611adc565b604082015290565b906080906001808385015116149260409384820191825180519081155f146127b95750505f915b8261230981612200565b1561262c575b505061231a81612200565b600181146125ae575b61232c81612200565b600281146123c2576123ba949161235160038361234b61236195612200565b14610940565b516020808251830101910161227c565b91905061239061238783519261237a60208601516100e2565b94015164ffffffffff1690565b948401516100e2565b60a0840151916060850151936123a58561190c565b64ffffffffff6020875197015197169161342d565b61058b610fee565b50508251631106aeeb60e21b80825260136004830152926020926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168484602481845afa938415610c45575f9461258f575b508464ffffffffff8095169688519283918252818061244360048201906014602083019252565b03915afa928315610c455761058b96612505956124b8956124d8945f91612572575b50169080151580612556575b1561251357612483915089850161220a565b6124d16124ad6124a761249d8b87015164ffffffffff1690565b64ffffffffff1690565b4261166a565b9485928501516100e2565b60a08501516060860151916124cc8361190c565b613117565b9093612c73565b9551600394810194855260208501969096526001600160a01b031660408401526060830152839160800190565b03601f198101835282610266565b508015158061253a575b612528575b50612483565b6125349089850161220a565b5f612522565b508061255061249d8b87015164ffffffffff1690565b1161251d565b508061256c61249d8c88015164ffffffffff1690565b10612471565b6125899150893d8b11611ec457611eb58183610266565b5f612465565b6125a7919450853d8711611ec457611eb58183610266565b925f61241c565b506125ed6125d66125c983516020808251830101910161225a565b90505164ffffffffff1690565b6125e2858501516100e2565b60a085015191613f40565b6125f681610837565b8015908115612618575b5061260c576002612323565b5050505061058b610fee565b6002915061262581610837565b145f612600565b15915081612789575b50612644575b60025f8061230f565b8351631106aeeb60e21b808252600660048301526020916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908381602481855afa908115610c45575f9161276c575b508364ffffffffff809216938951938491825281806126c360048201906007602083019252565b03915afa918215610c45575f9261274d575b50826126e4575050505061263b565b612505945082918661058b98612717956124a79460a061270c61271c9a9c51948601516100e2565b940151941691613b9c565b614ded565b9361272f6127286102c8565b958661220a565b51938492830160018152905164ffffffffff16602082015260400190565b612765919250843d8611611ec457611eb58183610266565b905f6126d5565b6127839150843d8611611ec457611eb58183610266565b5f61269c565b6127b3915061279d6110f0868601516100e2565b9060a085015160c060a083015192015192611fcf565b5f612635565b6020806127ca9383010191016121eb565b916122ff565b6040519061016082016001600160401b038111838210176101c657604052816101405f91828152826020820152606060408201526060808201528260808201528260a08201528260c08201528260e082015282610100820152826101208201520152565b6040908151612842816101cb565b6001815280915f5b60208082101561287e57855160209291612863826101cb565b61286b6127d0565b825260608183015282860101520161284a565b505091925050565b6001600160a01b039091169052565b61289e82612200565b52565b6040908151916128b0836101cb565b6001835282915f5b60208082101561287e578351602092916128d182610230565b5f82525f818301525f868301525f60608301525f60808301528288010152016128b8565b60068210156108415752565b9061290b82610446565b604061291981519283610266565b838252819361292a601f1991610446565b01905f5b82811061293b5750505050565b815160c0810191906001600160401b038311818410176101c65760209284525f8152825f818301525f858301525f60608301525f60808301525f60a083015282870101520161292e565b8181029291811591840414171561123b57565b81156129a2570490565b634e487b7160e01b5f52601260045260245ffd5b908160209103126100de575161058b81610819565b9060068210156108415752565b9081518082526020808093019301915f5b8281106129f7575050505090565b909192938260a06001928751612a0e8282516129cb565b8084015185841b8690031682850152604080820151908301526060808201519083015260809081015190820152019501939291016129e9565b9081518082526020808093019301915f5b828110612a66575050505090565b909192938260c06001928751612a7d8282516129cb565b848060a01b038085830151168584015260408083015190840152606080830151908401526080808301519084015260a0809201511690820152019501910192919092612a58565b9061289e82612200565b80516001600160a01b03168252906020828101516001600160a01b031690820152612b1d612b0b60408401516101608060408601528401906129d8565b60608401518382036060850152612a47565b91612b3060808201516080840190612ac4565b60a081015160a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151908301526101408091015191015290565b602080820190808352835180925260409283810182858560051b8401019601945f925b858410612ba5575050505050505090565b909192939495968580612be2600193603f198682030188528b519083612bd283518a84528a840190612ace565b9201519084818403910152610555565b990194019401929594939190612b94565b939092612c0f60c096939998979460e0875260e0870190612ace565b60208601999099526001600160a01b031660408501526060840152608083015260a08201520152565b92612c5360a09592989796939860c0865260c0860190612ace565b976020850152600180861b03166040840152606083015260808201520152565b9260c08401515160e085015151036130c657612c8d612834565b92612c9784611254565b515192612ca43085612886565b4260a085015260c08401829052604051635c9fcd8560e11b8152600e60048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c45575f916130a7575b50612d14602086019182612886565b516001600160a01b0390612d27906100e2565b1661309d57612d3a5f5b60808601612895565b610100868101516001600160e01b03191690850152610120840152612d6360c08601515161165c565b61014084015260016080612d83612d786128a1565b806040880152611254565b516060880151612d928161190c565b612d9b8161190c565b61309357612dab60025b826128f5565b612dc3612dba838a01516100e2565b60208301612886565b60a088015160408201528260608201520152612e27612dfc612df1612dec60c08901515161165c565b612901565b806060870152611254565b515f81525f60208201525f6040820152865160608201526020870151608082015260a0309101612886565b5f5b60c086015151811015612ec457612ebf906114f2612e546060870151612e4e8461165c565b90611266565b515f81525f60208201525f6040820152612e728360c08b0151611266565b516060820152612ea0612e98612e8c8560c08d0151611266565b5160208c015190612985565b8a5190612998565b608082015260a0612eb86113948560e08d0151611266565b9101612886565b612e29565b5091929092612ed2816132f0565b604051635c9fcd8560e11b8152601e6004820152909590926020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa938415610c45575f94602092612f50928792613074575b5060405196878094819363440a3b9960e11b835260048301612b71565b03926001600160a01b03165af1928315610c45578693612f77915f91613045575b50610940565b6060810151612f858161190c565b612f8e8161190c565b1580613037575b15612fea577f8bc0df75fcb1089ed0bc3c5aaeee9eb67fd03058afcce4f505c3876a170f6d639381612fd06110f06080612fe59501516100e2565b9060a081015190519160405196879687612c38565b0390a1565b7fa7a458fb56579e1739b7d7be315c8376100992f6cc2a7bed18e57de1ec547810938161301d6080612fe59401516100e2565b9060a0810151602082519201519260405197889788612bf3565b508051602082015114612f95565b613067915060203d60201161306d575b61305f8183610266565b8101906129b6565b5f612f71565b503d613055565b61308c919250843d8611610cd757610cc98183610266565b905f612f33565b612dab6003612da5565b612d3a6002612d31565b6130c0915060203d602011610cd757610cc98183610266565b5f612d05565b604051631b1cf91760e21b8152600490fd5b91908260409103126100de57602082516130f18161045d565b92015161058b81610819565b6001600160a01b0390911681526001602082015260400190565b604080516324dfc9d760e01b8152600d6004820152939460209490936001600160a01b03939091907f000000000000000000000000000000000000000000000000000000000000000085168783602481845afa928315610c45575f936132c0575b5082978086518093635c9fcd8560e11b8252818061319e6004820190601f602083019252565b03915afa8015610c4557879487936131d9935f936132a1575b50508351988980948193636e9bfd9f60e01b8352600483019190602083019252565b0392165afa948515610c45575f95613271575b5084976131f88161190c565b6132435716803b156100de57613225935f80945180968195829463095ea7b360e01b84526004840161129d565b03925af18015610c45576132365750565b806110ae6102d5926101e6565b1692919050823b156100de575f928392613225925194858094819363a22cb46560e01b8352600483016130fd565b613292919550843d861161329a575b61328a8183610266565b8101906130d8565b50935f6131ec565b503d613280565b6132b8929350803d10610cd757610cc98183610266565b905f806131b7565b6132d8919350883d8a11611ec457611eb58183610266565b915f613178565b90602061058b928181520190612ace565b906101408201918251905f84526133056127d0565b50604051635c9fcd8560e11b8152601e60048201526020916001600160a01b039183816024817f000000000000000000000000000000000000000000000000000000000000000087165afa8015610c45578492613380925f926133b6575b506040519485809481936379df72bd60e01b8352600483016132df565b0392165afa918215610c45575f92613399575b50509252565b6133af9250803d10611ec457611eb58183610266565b5f80613393565b6133ce919250843d8611610cd757610cc98183610266565b905f613363565b91908260809103126100de5781516133ec81610819565b9160208101516133fb81610819565b916060604083015192015190565b909493926060926080830196835260018060a01b0316602083015260408201520152565b60408051635c9fcd8560e11b8152601e600482015297986001600160a01b0398959792959194909390916020816024817f00000000000000000000000000000000000000000000000000000000000000008e165afa908115610c45575f916136c6575b5085516346423aa760e01b81526004810188905290608090829060249082908e165afa908115610c45575f91613694575b50156135705750506134d28161190c565b1580613567575b156135135750917f3e99b32c69260aa9463ba7c7f903dceed3e9cdc2709c00c858c887fa9bc5b9e59591612fe59351958695169085613409565b90519182526001600160a01b03939093166020820152604081019190915260608101939093526080830152507f496e331a08ff376957a7e057d214af9c47e131093374097b5fb5c005819b331c9060a090a1565b508087146134d9565b925093959692949750428411155f146136755761358c8161190c565b6136015750841694853b156100de57825163095ea7b360e01b81525f600482018190526024820183905290968790604490829084905af1928315610c45575f80516020614ec883398151915296612fe5946135ee575b505b5194859485613409565b806110ae6135fb926101e6565b5f6135e2565b95908516803b156100de57835163a22cb46560e01b81526001600160a01b039790971660048801525f60248801819052908790604490829084905af1928315610c45575f80516020614ec883398151915296612fe594613662575b506135e4565b806110ae61366f926101e6565b5f61365c565b50505084610a84925194859463079be7e360e41b865260048601613409565b6136b5915060803d81116136bf575b6136ad8183610266565b8101906133d5565b509150505f6134c1565b503d6136a3565b6136de915060203d8111610cd757610cc98183610266565b5f613490565b6020818303126100de5780516001600160401b03918282116100de57019160e0838203126100de57613714610289565b928051845261372560208201611adc565b602085015261373660408201610b3a565b60408501526060810151606085015260808101518381116100de578261375d918301612033565b608085015260a08101519283116100de5761377f60c09261378a948301612091565b60a085015201610aef565b60c082015290565b61058b906137ad6020820151602080825183010191016136e4565b9061384c8251926137c6602082015164ffffffffff1690565b906137d76110f060408301516100e2565b606082015161382b60808401519261381c61380160c060a088015197015163ffffffff60e01b1690565b9661380a6102a8565b9a808c5260208c015260408b0161220a565b5f60608a015260808901612886565b60a087015260c086015260e08501526001600160e01b031916610100840152565b6122d8565b908160a09103126100de5760806040519161386b83610230565b8051835261387b60208201611adc565b602084015261388c60408201611adc565b6040840152606081015161389f8161045d565b60608401520151608082015290565b908160209103126100de575161058b816118a9565b91906040838203126100de5761058b9060208451612275816118a9565b60206138f781830151828082518301019101613851565b9060408093019283518051908382155f14613b87575050505f905b61391b8261190c565b8115613963575061394a916110989461393c60018461234b6125c99661190c565b5180518101820191016138c3565b90608061395a60608301516100e2565b91015191613f40565b8051631106aeeb60e21b80825260106004830152919550936001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250908385602481865afa948515610c45575f95613b68575b5085518181526011600482015264ffffffffff9590919086168583602481885afa928315610c4557869388915f91613b4b575b50169080151580613b2f575b15613aec57613a0f915088850161220a565b86519081526012600482015292839060249082905afa938415610c45576124a761249d61271c936127179361058b98612505975f91613acf575b501680151580613ab3575b613aa1575b50613a96815188830192613a72845164ffffffffff1690565b818d015164ffffffffff16906080613a8d60608501516100e2565b93015193613b9c565b5164ffffffffff1690565b613aad9088830161220a565b5f613a59565b5080613ac961249d8a85015164ffffffffff1690565b11613a54565b613ae69150893d8b11611ec457611eb58183610266565b5f613a49565b5080151580613b13575b613b01575b50613a0f565b613b0d9088850161220a565b5f613afb565b5080613b2961249d8a87015164ffffffffff1690565b11613af6565b5080613b4561249d8b88015164ffffffffff1690565b106139fd565b613b629150853d8711611ec457611eb58183610266565b5f6139f1565b613b80919550843d8611611ec457611eb58183610266565b935f6139be565b80613b969383010191016138ae565b90613912565b93929193613bbb6113b35f80516020614ea88339815191525460ff1690565b613d53575b6001600160a01b038381169590863b156100de5760405163095ea7b360e01b81525f9788908290818381613c1a8d7f00000000000000000000000000000000000000000000000000000000000000008a166004840161129d565b03925af18015610c4557613d40575b507f00000000000000000000000000000000000000000000000000000000000000001695863b15613d3d576040516306fdd53160e01b81526001600160a01b03861660048201526024810187905264ffffffffff83166044820152606481018490523060848201524260a482015296879060c490829084905af1928315610c455761249d64ffffffffff613cea927f8931bf600c62fc00a41e9c5aef2f516510ab57676bddeb4fb57f3c22346a9ab599612fe597613d2a575b50164261166a565b604080516001600160a01b03909616865260208601969096529484019190915264ffffffffff9081166060840152909216608082015290819060a0820190565b806110ae613d37926101e6565b5f613ce2565b80fd5b806110ae613d4d926101e6565b5f613c29565b604051630e3e606f60e41b81525f906001600160a01b0390602081600481867f000000000000000000000000000000000000000000000000000000000000000087165af18015610c455782918491613e39575b501690813b15613e35578291613df49160405194858094819363152c1b5b60e01b83527f000000000000000000000000000000000000000000000000000000000000000016600483016130fd565b03925af18015610c4557613e22575b505f80516020614ea8833981519152805460ff19166001179055613bc0565b806110ae613e2f926101e6565b5f613e03565b8280fd5b613e51915060203d8111610cd757610cc98183610266565b5f613da6565b519063ffffffff821682036100de57565b90816101009103126100de576119ce60e060405192613e86846101f9565b8051613e918161045d565b8452613e9f6020820161192a565b6020850152613eb060408201610b3a565b6040850152613ec16060820161192a565b6060850152613ed260808201610b3a565b6080850152613ee360a08201613e57565b60a0850152613ef460c08201613e57565b60c085015201613e57565b91909163ffffffff8080941691160191821161123b57565b6001600160a01b039091168152602081019190915264ffffffffff909116604082015260600190565b6040805163a90832a160e01b81526004949392906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082169061010090818180613f958b8b8e840161129d565b0381865afa918215610c45575f926141ce575b5050613fb481516100e2565b83309116036141ac5760e081015163ffffffff1663ffffffff918183166140db575050504264ffffffffff8416116140c057803b156100de575f866140109287838b8951968795869485936342cdcbff60e11b8552840161129d565b03925af18015610c45576140ad575b508316803b156100de57825163095ea7b360e01b81525f96810187815260208101879052909691879182908490829060400103925af1918215610c45577ffc91a9bb4832cea20f42b79a32eb4fc8ca9eb67740feb0570a8d79eb0640adc1956140929361409a575b505193849384613f17565b0390a1600190565b806110ae6140a7926101e6565b5f614087565b806110ae6140ba926101e6565b5f61401f565b835163471cdd4560e01b815280610a84858989848d01613f17565b60a001519294509092506140f59163ffffffff1690613eff565b90811642106141715750803b156100de57835f918483614129988651998a958694859363144e2c2360e21b8552840161129d565b03925af1908115610c45575f80516020614f48833981519152946141579261415e575b50519283928361129d565b0390a15f90565b806110ae61416b926101e6565b5f61414c565b91516332ac800960e11b81526001600160a01b039093168386019081526020810185905263ffffffff90921660408301525081906060010390fd5b505050505f80516020614f48833981519152935061415790519283928361129d565b6141ed9250803d106141f4575b6141e58183610266565b810190613e68565b5f80613fa8565b503d6141db565b81601f820112156100de5780519061421282610446565b9260409261422284519586610266565b808552602091828087019260071b850101938185116100de578301915b84831061424f5750505050505090565b6080838303126100de57836080918751614268816101ab565b8551614273816121e1565b8152828601516142828161045d565b8382015288860151898201526060808701519082015281520192019161423f565b906020828203126100de5781516001600160401b03928382116100de5701906080828203126100de57604051926142d9846101ab565b82518181116100de57826142ee918501612091565b845260208301518181116100de57826143089185016141fb565b602085015261431960408401610b3a565b604085015260608301519081116100de57611b4d9201610f73565b9190916040818403126100de57805160208201519093906001600160401b0381116100de5761058b9201610f73565b6001600160a01b03918216815291166020820152604081019190915260600190565b916143af906143a1604093969596606086526060860190610555565b908482036020860152610555565b6001600160a01b03909416910152565b906143fd906020926143dc848201518580825183010191016142a3565b6143f3606080930151868082518301019101614334565b9490825133614667565b808501935f93845b86518051871015614608578661441a91611266565b51805161442681612200565b61442f81612200565b6144505761444a91866144449201519061166a565b9561122d565b94614405565b90956001825161445f81612200565b61446881612200565b0361449e576114f2826144836110f08c61444a9601516100e2565b90886144956110f060408b01516100e2565b91015191614d33565b600282516144ab81612200565b6144b481612200565b03614538576144cb6110f06110f08b8501516100e2565b604090816144de6110f0828a01516100e2565b94015190803b156100de5761450b945f8094518097819582946323b872dd60e01b84523060048501614363565b03925af1918215610c455761444a92614525575b5061122d565b806110ae614532926101e6565b5f61451f565b6003825161454581612200565b61454e81612200565b1461455e575b61444a915061122d565b6145706110f06110f08b8501516100e2565b6040926145826110f0858901516100e2565b91888583015192015191813b156100de579451637921219560e11b81523060048201526001600160a01b039390931660248401526044830194909452606482015260a060848201525f60a482018190529092839060c490829084905af1918215610c455761444a926145f5575b50614554565b806110ae614602926101e6565b5f6145ef565b50945095509350906146206110f060408401516100e2565b91015190803b156100de57604051637a8ee28f60e11b8152935f9385938492839161465091339160048501614385565b03925af18015610c45576110a1575061058b610fee565b908051156146eb576001600160a01b0392839081906146869084611266565b5116921691820361469657505050565b604080516338fd396160e01b8152600481019390935260248301528051604483018190526064830191602090810191905f5b8281106146d55785850386fd5b83518716855293810193928101926001016146c8565b505050565b90600482511061473857600482018051925160031901815263ffffffff831692909190600c8410156108415783156100de5760ff600b9161473086610d29565b16116100de57565b604051632fc4a01d60e21b8152600490fd5b9190916040818403126100de5780516147628161045d565b60208201519093906001600160401b0381116100de5761058b9201610f73565b6001600160a01b0391821681529116602082015260400190565b6147af906020808251830101910161474a565b604051635c9fcd8560e11b8152600260048201526001600160a01b0392831692906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa908115610c45575f9161488c575b501680830361486e5791614841612fe5927f171f44298b88c4e0b1c126daf5a75eabcd04d9dd623209ed50e7c98622e067d6946148aa565b6040519182917f000000000000000000000000000000000000000000000000000000000000000083614782565b604051630987f3d960e11b815292839250610a849160048401614782565b6148a4915060203d8111610cd757610cc98183610266565b5f614809565b7feb054550c406db3b89dc7016369a66aff0ce40188133281942b92e6188c6b1ef80546001600160a01b039283166001600160a01b0319821681179092556040805163347d5e2560e21b6020820190815294909216602483015260448201525f9384939190614923908290612505906064830190610555565b51915af461492f611000565b90156149385750565b602081519101fd5b908160609103126100de576122d0604080519261495c84610215565b61496581611adc565b845261497360208201611adc565b602085015201611aee565b64ffffffffff91821681529116602082015260400190565b60206149ad91015160208082518301019101614940565b805164ffffffffff9081168080614b95575b505060208201906149d5825164ffffffffff1690565b90811680614abe575b505050604001805161ffff1680806149fc575b50505061058b610fee565b61271010614aa05750614a6b614a98917fc5d909be7531c0275c9363858a8dd92aebe56dfbbeab2726103171b13458cfd6614a4a5f80516020614ee88339815191525461ffff9060501c1690565b82516040805161ffff938416815292909116602083015290a15161ffff1690565b5f80516020614ee8833981519152805461ffff60501b191660509290921b61ffff60501b16919091179055565b5f80806149f1565b604051636dfaf3cd60e01b815261ffff919091166004820152602490fd5b62278d0010614b74575090614b6c614b396040937f2056b1a79eedb94135a24bdb0827c0ac4823d13d69f5cf7923ee5751c53ff645614b135f80516020614ee88339815191525464ffffffffff9060281c1690565b825164ffffffffff1690614b2b88519283928361497e565b0390a15164ffffffffff1690565b5f80516020614ee8833981519152805464ffffffffff60281b191660289290921b64ffffffffff60281b16919091179055565b905f806149de565b604051636dfaf3cd60e01b815264ffffffffff919091166004820152602490fd5b610e1011614b7457507ffe8526f9761553b505b82123610da2321e3b1f678028e5b93b91110c272e2a4f614bdb5f80516020614ee88339815191525464ffffffffff1690565b835164ffffffffff1690614bf46040519283928361497e565b0390a1614c2e614c09835164ffffffffff1690565b64ffffffffff5f80516020614ee8833981519152911664ffffffffff19825416179055565b5f806149bf565b5f525f80516020614f6883398151915260205260405f2090565b60200151906040828051810103126100de5760405191614c6e836101cb565b60406020820151918285520151614c848161045d565b614c946020850192828452614c35565b80546001600160a01b0319166001600160a01b03928316179055604051614cba8161024b565b5f81529351915116907f767c93312a33c80fcdefe04b5c2499ce37f299f4798ba63b65397549f09d9b545f80a3565b90801561092b575f908190819081906001600160a01b0386165af190614d0d611000565b9115614d17575050565b610a8460405192839263354db69760e01b84526004840161150b565b9190925f80604051602081019063a9059cbb60e01b8252614d5c81612505888b6024840161129d565b5190826001600160a01b0388165af1614d73611000565b90614d98575b5050610a8490604051938493631702a98760e11b855260048501614363565b805115614dc25780602080614db2935183010191016129b6565b614dbc5780614d79565b92505050565b50925050803b15614dd05750565b604051639fe23a3960e01b8152908190610a8490600483016103b1565b64ffffffffff90818111614dff571690565b60249060405190633ce0460960e21b82526004820152fd5b905f809160405160208101916331a9108f60e11b8352602482015260248152614e3f81610215565b516001600160a01b039490919085165afa614e58611000565b90158015614e7c575b6117245780602080614e7893518301019101610b45565b1690565b506020815110614e6156fe33a3c164d6872de9f70b5a8072fe8ec5d3a6af6642df9b59e4bb0c4c5ce80e22962b211f5599679d507ecbd37672aa91e150db52e799a57b68c1357423f3c7ec2045cfa9b677ebd0cb44d8ba225aaa166881e63d27a156115c76cafb3f0b395deb054550c406db3b89dc7016369a66aff0ce40188133281942b92e6188c6b1f1eb054550c406db3b89dc7016369a66aff0ce40188133281942b92e6188c6b1f033a3c164d6872de9f70b5a8072fe8ec5d3a6af6642df9b59e4bb0c4c5ce80e234faae26401a738600a62b92784ab4a32ee108d4c083fea6fc5f7ec31ed7095f81a198b203b83bceb00adf843ff6bae46e9f9631a48e9ae0b1636fe9c54ed1661a2646970667358221220403deda0aa0fafccd9c5f66e45771b9b42e1feef8ff215253dea09c09012c79564736f6c634300081400330000000000000000000000001ca20040ce6ad406bc2a6c89976388829e7fbade0000000000000000000000005f7072e1fa7c01dfac7cf54289621afaad2184d000000000000000000000000085aa7f78bdb2de8f3e0c0010d99ad5853ffcfc63