UNPKG

@zero-tech/zkevm-contracts

Version:
1,266 lines 116 kB
{ "_format": "hh-sol-artifact-1", "contractName": "PolygonDataComittee", "sourceName": "contracts/v2/consensus/dataComittee/PolygonDataComittee.sol", "abi": [ { "inputs": [ { "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, { "internalType": "contract IERC20Upgradeable", "name": "_pol", "type": "address" }, { "internalType": "contract IPolygonZkEVMBridgeV2", "name": "_bridgeAddress", "type": "address" }, { "internalType": "contract PolygonRollupManager", "name": "_rollupManager", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "BatchAlreadyVerified", "type": "error" }, { "inputs": [], "name": "BatchNotSequencedOrNotSequenceEnd", "type": "error" }, { "inputs": [], "name": "ExceedMaxVerifyBatches", "type": "error" }, { "inputs": [], "name": "FinalNumBatchBelowLastVerifiedBatch", "type": "error" }, { "inputs": [], "name": "FinalNumBatchDoesNotMatchPendingState", "type": "error" }, { "inputs": [], "name": "FinalPendingStateNumInvalid", "type": "error" }, { "inputs": [], "name": "ForceBatchNotAllowed", "type": "error" }, { "inputs": [], "name": "ForceBatchTimeoutNotExpired", "type": "error" }, { "inputs": [], "name": "ForceBatchesAlreadyActive", "type": "error" }, { "inputs": [], "name": "ForceBatchesDescentralized", "type": "error" }, { "inputs": [], "name": "ForceBatchesNotAllowedOnEmergencyState", "type": "error" }, { "inputs": [], "name": "ForceBatchesOverflow", "type": "error" }, { "inputs": [], "name": "ForcedDataDoesNotMatch", "type": "error" }, { "inputs": [], "name": "GasTokenNetworkMustBeZeroOnEther", "type": "error" }, { "inputs": [], "name": "GlobalExitRootNotExist", "type": "error" }, { "inputs": [], "name": "HaltTimeoutNotExpired", "type": "error" }, { "inputs": [], "name": "HaltTimeoutNotExpiredAfterEmergencyState", "type": "error" }, { "inputs": [], "name": "HugeTokenMetadataNotSupported", "type": "error" }, { "inputs": [], "name": "InitNumBatchAboveLastVerifiedBatch", "type": "error" }, { "inputs": [], "name": "InitNumBatchDoesNotMatchPendingState", "type": "error" }, { "inputs": [], "name": "InvalidInitializeTransaction", "type": "error" }, { "inputs": [], "name": "InvalidProof", "type": "error" }, { "inputs": [], "name": "InvalidRangeBatchTimeTarget", "type": "error" }, { "inputs": [], "name": "InvalidRangeForceBatchTimeout", "type": "error" }, { "inputs": [], "name": "InvalidRangeMultiplierBatchFee", "type": "error" }, { "inputs": [], "name": "NewAccInputHashDoesNotExist", "type": "error" }, { "inputs": [], "name": "NewPendingStateTimeoutMustBeLower", "type": "error" }, { "inputs": [], "name": "NewStateRootNotInsidePrime", "type": "error" }, { "inputs": [], "name": "NewTrustedAggregatorTimeoutMustBeLower", "type": "error" }, { "inputs": [], "name": "NotEnoughMaticAmount", "type": "error" }, { "inputs": [], "name": "NotEnoughPOLAmount", "type": "error" }, { "inputs": [], "name": "OldAccInputHashDoesNotExist", "type": "error" }, { "inputs": [], "name": "OldStateRootDoesNotExist", "type": "error" }, { "inputs": [], "name": "OnlyAdmin", "type": "error" }, { "inputs": [], "name": "OnlyPendingAdmin", "type": "error" }, { "inputs": [], "name": "OnlyRollupManager", "type": "error" }, { "inputs": [], "name": "OnlyTrustedAggregator", "type": "error" }, { "inputs": [], "name": "OnlyTrustedSequencer", "type": "error" }, { "inputs": [], "name": "PendingStateDoesNotExist", "type": "error" }, { "inputs": [], "name": "PendingStateInvalid", "type": "error" }, { "inputs": [], "name": "PendingStateNotConsolidable", "type": "error" }, { "inputs": [], "name": "PendingStateTimeoutExceedHaltAggregationTimeout", "type": "error" }, { "inputs": [], "name": "SequenceWithDataAvailabilityNotAllowed", "type": "error" }, { "inputs": [], "name": "SequenceZeroBatches", "type": "error" }, { "inputs": [], "name": "SequencedTimestampBelowForcedTimestamp", "type": "error" }, { "inputs": [], "name": "SequencedTimestampInvalid", "type": "error" }, { "inputs": [], "name": "StoredRootMustBeDifferentThanNewRoot", "type": "error" }, { "inputs": [], "name": "SwitchToSameValue", "type": "error" }, { "inputs": [], "name": "TransactionsLengthAboveMax", "type": "error" }, { "inputs": [], "name": "TrustedAggregatorTimeoutExceedHaltAggregationTimeout", "type": "error" }, { "inputs": [], "name": "TrustedAggregatorTimeoutNotExpired", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AcceptAdminRole", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "forceBatchNum", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "lastGlobalExitRoot", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "sequencer", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "transactions", "type": "bytes" } ], "name": "ForceBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes", "name": "transactions", "type": "bytes" }, { "indexed": false, "internalType": "bytes32", "name": "lastGlobalExitRoot", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "sequencer", "type": "address" } ], "name": "InitialSequenceBatches", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "numBatch", "type": "uint64" } ], "name": "SequenceBatches", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "numBatch", "type": "uint64" } ], "name": "SequenceForceBatches", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newDataCommittee", "type": "address" } ], "name": "SetDataCommittee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newForceBatchAddress", "type": "address" } ], "name": "SetForceBatchAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "newforceBatchTimeout", "type": "uint64" } ], "name": "SetForceBatchTimeout", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newTrustedSequencer", "type": "address" } ], "name": "SetTrustedSequencer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newTrustedSequencerURL", "type": "string" } ], "name": "SetTrustedSequencerURL", "type": "event" }, { "anonymous": false, "inputs": [], "name": "SwitchSequenceWithDataAvailability", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newPendingAdmin", "type": "address" } ], "name": "TransferAdminRole", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint64", "name": "numBatch", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "stateRoot", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "aggregator", "type": "address" } ], "name": "VerifyBatches", "type": "event" }, { "inputs": [], "name": "GLOBAL_EXIT_ROOT_MANAGER_L2", "outputs": [ { "internalType": "contract IBasePolygonZkEVMGlobalExitRoot", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_BRIDGE_LIST_LEN_LEN", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_BRIDGE_PARAMS", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_BRIDGE_PARAMS_AFTER_BRIDGE_ADDRESS", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_BRIDGE_PARAMS_AFTER_BRIDGE_ADDRESS_EMPTY_METADATA", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_CONSTANT_BYTES", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_CONSTANT_BYTES_EMPTY_METADATA", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_DATA_LEN_EMPTY_METADATA", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZE_TX_EFFECTIVE_PERCENTAGE", "outputs": [ { "internalType": "bytes1", "name": "", "type": "bytes1" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SIGNATURE_INITIALIZE_TX_R", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SIGNATURE_INITIALIZE_TX_S", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SIGNATURE_INITIALIZE_TX_V", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptAdminRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "admin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bridgeAddress", "outputs": [ { "internalType": "contract IPolygonZkEVMBridgeV2", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "calculatePolPerForceBatch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dataCommittee", "outputs": [ { "internalType": "contract ICDKDataCommittee", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "transactions", "type": "bytes" }, { "internalType": "uint256", "name": "polAmount", "type": "uint256" } ], "name": "forceBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "forceBatchAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "forceBatchTimeout", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "forcedBatches", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "gasTokenAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "gasTokenNetwork", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "networkID", "type": "uint32" }, { "internalType": "address", "name": "_gasTokenAddress", "type": "address" }, { "internalType": "uint32", "name": "_gasTokenNetwork", "type": "uint32" }, { "internalType": "bytes", "name": "_gasTokenMetadata", "type": "bytes" } ], "name": "generateInitializeTransaction", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "globalExitRootManager", "outputs": [ { "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" }, { "internalType": "address", "name": "sequencer", "type": "address" }, { "internalType": "uint32", "name": "networkID", "type": "uint32" }, { "internalType": "address", "name": "_gasTokenAddress", "type": "address" }, { "internalType": "string", "name": "sequencerURL", "type": "string" }, { "internalType": "string", "name": "_networkName", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isSequenceWithDataAvailabilityAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastAccInputHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastForceBatch", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastForceBatchSequenced", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastTimestamp", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "networkName", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "lastVerifiedBatch", "type": "uint64" }, { "internalType": "bytes32", "name": "newStateRoot", "type": "bytes32" }, { "internalType": "address", "name": "aggregator", "type": "address" } ], "name": "onVerifyBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pendingAdmin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pol", "outputs": [ { "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rollupManager", "outputs": [ { "internalType": "contract PolygonRollupManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "transactions", "type": "bytes" }, { "internalType": "bytes32", "name": "globalExitRoot", "type": "bytes32" }, { "internalType": "uint64", "name": "timestamp", "type": "uint64" }, { "internalType": "uint64", "name": "minForcedTimestamp", "type": "uint64" } ], "internalType": "struct PolygonRollupBase.BatchData[]", "name": "batches", "type": "tuple[]" }, { "internalType": "address", "name": "l2Coinbase", "type": "address" } ], "name": "sequenceBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "transactionsHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "globalExitRoot", "type": "bytes32" }, { "internalType": "uint64", "name": "timestamp", "type": "uint64" }, { "internalType": "uint64", "name": "minForcedTimestamp", "type": "uint64" } ], "internalType": "struct PolygonDataComittee.ValidiumBatchData[]", "name": "batches", "type": "tuple[]" }, { "internalType": "address", "name": "l2Coinbase", "type": "address" }, { "internalType": "bytes", "name": "dataAvailabilityMessage", "type": "bytes" } ], "name": "sequenceBatchesDataCommittee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes", "name": "transactions", "type": "bytes" }, { "internalType": "bytes32", "name": "globalExitRoot", "type": "bytes32" }, { "internalType": "uint64", "name": "minForcedTimestamp", "type": "uint64" } ], "internalType": "struct PolygonRollupBase.ForcedBatchData[]", "name": "batches", "type": "tuple[]" } ], "name": "sequenceForceBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ICDKDataCommittee", "name": "newDataCommittee", "type": "address" } ], "name": "setDataCommittee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newForceBatchAddress", "type": "address" } ], "name": "setForceBatchAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "newforceBatchTimeout", "type": "uint64" } ], "name": "setForceBatchTimeout", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newTrustedSequencer", "type": "address" } ], "name": "setTrustedSequencer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newTrustedSequencerURL", "type": "string" } ], "name": "setTrustedSequencerURL", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "newIsSequenceWithDataAvailabilityAllowed", "type": "bool" } ], "name": "switchSequenceWithDataAvailability", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newPendingAdmin", "type": "address" } ], "name": "transferAdminRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "trustedSequencer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "trustedSequencerURL", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x6101006040523480156200001257600080fd5b506040516200574a3803806200574a833981016040819052620000359162000071565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d9565b6001600160a01b03811681146200006e57600080fd5b50565b600080600080608085870312156200008857600080fd5b8451620000958162000058565b6020860151909450620000a88162000058565b6040860151909350620000bb8162000058565b6060860151909250620000ce8162000058565b939692955090935050565b60805160a05160c05160e051615565620001e56000396000818161056101528181610b8401528181610cf101528181610fa801528181611533015281816124580152818161252101528181612543015281816126da0152818161293b01528181612d9401528181612e6201528181612f870152818161304f015281816139ce01528181613a4f01528181613a710152613b9b0152600081816107230152818161120201528181611b2601528181611c2e0152818161261b0152613adc0152600081816107fa01528181611389015281816121ba0152818161319a01526136f101526000818161083f0152818161090a015281816124ab015281816125f1015261316e01526155656000f3fe608060405234801561001057600080fd5b506004361061031f5760003560e01c80636ff512cc116101a7578063c754c7ed116100ee578063d8d1091b11610097578063eaeb077b11610071578063eaeb077b14610881578063f35dda4714610894578063f851a4401461089c57600080fd5b8063d8d1091b14610827578063e46761c41461083a578063e7a7ed021461086157600080fd5b8063cfa8ed47116100c8578063cfa8ed47146107d5578063d02103ca146107f5578063d7bc90ff1461081c57600080fd5b8063c754c7ed1461078a578063c7fffd4b146107ba578063c89e42df146107c257600080fd5b80639e00187711610150578063ada8f9191161012a578063ada8f91914610758578063b0afe1541461076b578063b81fcafd1461077757600080fd5b80639e00187714610703578063a3c573eb1461071e578063a652f26c1461074557600080fd5b80638c3d7301116101815780638c3d7301146106d557806391cafe32146106dd57806398cf4bd0146106f057600080fd5b80636ff512cc1461067357806371257022146106865780637a5460c51461069957600080fd5b806340b5de6c1161026b578063542028d511610214578063676870d2116101ee578063676870d2146106425780636b8616ce1461064a5780636e05d2cd1461066a57600080fd5b8063542028d51461060757806356e294351461060f5780635e9145c91461062f57600080fd5b80634c21fef3116102455780634c21fef3146105835780634e487706146105b857806352bdeb6d146105cb57600080fd5b806340b5de6c146104dc578063456052671461053457806349b7b8021461055c57600080fd5b806326782247116102cd57806332c2d153116102a757806332c2d1531461046c5780633c351e101461047f5780633cbc795b1461049f57600080fd5b806326782247146103f25780632acdc2b6146104375780632c111c061461044c57600080fd5b8063107bf28c116102fe578063107bf28c146103a357806311e892d4146103ab57806319d8ac61146103c557600080fd5b8062d0295d14610324578063035089631461033f57806305835f371461035a575b600080fd5b61032c6108c2565b6040519081526020015b60405180910390f35b610347602081565b60405161ffff9091168152602001610336565b6103966040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b604051610336919061456a565b6103966109e2565b6103b360f981565b60405160ff9091168152602001610336565b6007546103d99067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610336565b6001546104129073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610336565b61044a610445366004614595565b610a70565b005b6008546104129073ffffffffffffffffffffffffffffffffffffffff1681565b61044a61047a3660046145f5565b610b82565b6009546104129073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104c79074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610336565b6105037fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff000000000000000000000000000000000000000000000000000000000000009091168152602001610336565b6007546103d990700100000000000000000000000000000000900467ffffffffffffffff1681565b6104127f000000000000000000000000000000000000000000000000000000000000000081565b600a546105a89074010000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610336565b61044a6105c6366004614637565b610c51565b6103966040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610396610e6b565b600a546104129073ffffffffffffffffffffffffffffffffffffffff1681565b61044a61063d3660046146a0565b610e78565b610347601f81565b61032c610658366004614637565b60066020526000908152604090205481565b61032c60055481565b61044a6106813660046146ec565b610edc565b61044a61069436600461485e565b610fa6565b6103966040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b61044a61176f565b61044a6106eb3660046146ec565b611842565b61044a6106fe3660046146ec565b61195b565b61041273a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6104127f000000000000000000000000000000000000000000000000000000000000000081565b61039661075336600461490b565b611a25565b61044a6107663660046146ec565b611e0a565b61032c6405ca1ab1e081565b61044a6107853660046149c2565b611ed4565b6007546103d9907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6103b360e481565b61044a6107d0366004614a74565b61282b565b6002546104129073ffffffffffffffffffffffffffffffffffffffff1681565b6104127f000000000000000000000000000000000000000000000000000000000000000081565b61032c635ca1ab1e81565b61044a610835366004614aa9565b6128be565b6104127f000000000000000000000000000000000000000000000000000000000000000081565b6007546103d99068010000000000000000900467ffffffffffffffff1681565b61044a61088f366004614aeb565b612f0f565b6103b3601b81565b6000546104129062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109759190614b37565b6007549091506000906109b49067ffffffffffffffff700100000000000000000000000000000000820481169168010000000000000000900416614b7f565b67ffffffffffffffff169050806000036109d15760009250505090565b6109db8183614ba7565b9250505090565b600480546109ef90614be2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b90614be2565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b505050505081565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801515600a60149054906101000a900460ff16151503610b13576040517f5f0e7abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000831515021790556040517ff32a0473f809a720a4f8af1e50d353f1caf7452030626fdaac4273f5e6587f4190600090a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bf1576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610c4491815260200190565b60405180910390a3505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610ca8576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610cef576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e9190614c35565b610de75760075467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690821610610de7576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546109ef90614be2565b600a5474010000000000000000000000000000000000000000900460ff16610ecc576040517f821935b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ed78383836133fe565b505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610f33576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610e60565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611015576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16158080156110355750600054600160ff909116105b8061104f5750303b15801561104f575060005460ff166001145b6110e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561113e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff85161561132a5761116585613c62565b61116e86613d72565b61117787613e79565b60405160200161118993929190614c52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f318aee3d00000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff878116600484015290925060009182917f0000000000000000000000000000000000000000000000000000000000000000169063318aee3d9060240160408051808303816000875af115801561124a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126e9190614c8b565b915091508163ffffffff166000146112e6576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff841617179055611327565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b60095460009061137290889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611a25565b9050600081805190602001209050600042905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190614b37565b60408051600060208201819052918101869052606080820184905260c086901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528e901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608882015291925090609c01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152908290528051602090910120600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff871617905560058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303816000875af1158015611591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b59190614cc5565b508c600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816116479190614d30565b5060046116548982614d30565b508c600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e6040516116f593929190614e4a565b60405180910390a1505050505050801561176657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146117c0576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314611899576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff166118e8576040517fd40d91c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610e60565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146119b2576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f76d12ecc41da43ceb240d60fdd4d9fc0baae9793060e7b592abde7ece5ee965190602001610e60565b6060600085858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa600087604051602401611a5996959493929190614e89565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff7000000000000000000000000000000000000000000000000000000001790528351909150606090600003611baa5760f9601f8351611aee9190614eec565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611b949796959493929190614f07565b6040516020818303038152906040529050611cae565b815161ffff1015611be7576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611bf6602083614eec565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b90000000000000000000000000000000000000000000000000000000000008152508588604051602001611c9b9796959493929190614fea565b6040516020818303038152906040529150505b805160208083019190912060408051600080825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa158015611d0f573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611d87576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051600090611dcd9084906405ca1ab1e090635ca1ab1e90601b907fff00000000000000000000000000000000000000000000000000000000000000906020016150cd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314611e61576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610e60565b60025473ffffffffffffffffffffffffffffffffffffffff163314611f25576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000819003611f61576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115611f9d576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075460055467ffffffffffffffff80831692700100000000000000000000000000000000900416908160005b8581101561238d5760008b8b83818110611fe657611fe6615129565b905060800201803603810190611ffc9190615158565b805160608201519192509067ffffffffffffffff16156121775785612020816151ad565b9650506000818360200151846060015160405160200161207893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a16600090815260069093529120549091508114612101576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015167ffffffffffffffff16836040015167ffffffffffffffff161015612157576040517f7f7ab87200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5067ffffffffffffffff8616600090815260066020526040812055612275565b60208201511580159061223e575060208201516040517f257b363200000000000000000000000000000000000000000000000000000000815260048101919091527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063257b3632906024016020604051808303816000875af1158015612218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223c9190614b37565b155b15612275576040517f73bd668d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8667ffffffffffffffff16826040015167ffffffffffffffff1610806122a8575042826040015167ffffffffffffffff16115b156122df576040517fea82791600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602082810151604080850151815193840189905290830184905260608084019290925260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528c901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012094508160400151965050508080612385906151d4565b915050611fca565b5060075467ffffffffffffffff68010000000000000000909104811690841611156123e4576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86811691909117909155600583905585908281169085161461251b57600061243b8386614b7f565b905061245167ffffffffffffffff82168361520c565b91506124d27f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff1661248a6108c2565b612494919061521f565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190613f6c565b50600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8716021790555b612619337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190614b37565b6125da919061521f565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190614040565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561268157600080fd5b505af1158015612695573d6000803e3d6000fd5b50506040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8916600482015260248101869052600092507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169150639a908e73906044016020604051808303816000875af1158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d9190614cc5565b600a546040517fc7a823e000000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063c7a823e0906127b89087908d908d9060040161527f565b60006040518083038186803b1580156127d057600080fd5b505afa1580156127e4573d6000803e3d6000fd5b505060405167ffffffffffffffff841692507f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce9150600090a2505050505050505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314612882576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600361288e8282614d30565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610e60919061456a565b60085473ffffffffffffffffffffffffffffffffffffffff16158015906128fd575060085473ffffffffffffffffffffffffffffffffffffffff163314155b15612934576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c89190614cc5565b6129d291906152a2565b67ffffffffffffffff161115612a14576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000819003612a50576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e8811115612a8